CMD命令混淆学习

2022-08-11 13:50:59 浏览数 (1)

更新时间:2022.06.08

本文首发乌鸦安全知识星球!

1. 背景介绍

cmd命令混淆的意义主要是bypass,混淆也不能影响原来的命令执行结果。

2. 混淆方法

2.1 双引号法""

使用双引号包裹字符,相当于将字符进行连接。 who""a""mi

在这个也可以这样:

最好是成对使用:

2.2 转义符^

字符 ^CMD命令中最常见的转义字符,该字符不影响命令的执行。 who^am^i

在这里不能两个^^放在一起使用,不然会报错:

2.3 大小写混合

WHoAmI

2.4 空格替换 ,;

逗号 , 和分号 ;可以互换,可以取代命令中的合法空格,多个空格也不影响命令执行。

代码语言:javascript复制
;, net user
,; net user

但是不能在一个连续命令中间使用:

2.5 括号()

成对的圆括号()也会出现在命令参数中,也不影响命令的执行。圆括号表示嵌入子命令组,同样被cmd.exe参数处理器进行解释 这个句子注意当前使用的时候,只能够使用完整的一个命令使用当前的符号,不能分开:

多层同样不影响使用:

2.6 set设置环境变量

代码语言:javascript复制
set a=cmd /c whoami  --->  %a%

在这个例子中,通过设置变量,然后去执行变量,但是一定要注意在设置set的变量值和等号之间不能有空格:

3. 混淆工具 Invoke-DOSfuscation

3.1 工具介绍

在混淆中,由于命令和方法太多,比如管道符| & || 等等,有时候我们不知道如何处理,所以在这里提供了一个新的混淆工具:

代码语言:javascript复制
https://github.com/danielbohannon/Invoke-DOSfuscation

首先导入该工具的包:

‍‍‍‍这里是因为默认禁止加载,修改下,以管理员身份运行powershell,然后执行命令:

代码语言:javascript复制
set-ExecutionPolicy RemoteSigned
选择Y

再次加载的时候报毒:

在这里需要关闭你的杀软,然后再加载:

代码语言:javascript复制
Import-Module .Invoke-DOSfuscation.psd1
Invoke-DOSfuscation

在这里的命令非常的多,在这里演示下最简单的用法: 使用set command 设置命令,然后跟着步骤做就行了,最后生成的命令为:

代码语言:javascript复制
whoa%ALLUSERSPROFILE:~-5,1%i

刚刚的命令执行结果:

当然,在这里还可以使用BACK命令回退上一级

代码语言:javascript复制
%comMonpROGRaMFiLes:~     22,      1%%COmmOnPrOgramFILES:~      27,    -1%t%PROgrAmFILES:~    10,     -5%%pUblic:~    -5,   -4%s%tEmP:~    -3,   1%r

同样可以执行:

3.2 测试添加账号过火绒(失败)

在这里使用添加用户的命令来测试下火绒,因为我这个火绒病毒库没有及时更新,理论上讲不影响我们的操作:

当使用正常的用户添加命令的时候,会报毒:

在这里使用刚刚的工具来试试:

代码语言:javascript复制
ne%ALLUSERSPROFILE:~12,-1% use%TEMP:~6,1%%CommonProgramW6432:~-6,1%%ALLUSERSPROFILE:~12,-1%e%SystemRoot:~-1,1%%TEMP:~-13,-12% 123 /%LOCALAPPDATA:~-7,1%d%OS:~3,-6%

再试试其他的方法:

还是不行:

添加用户的我已经单独写了一个文章了,后面再发。

4. 总结

对cmd命令的混淆的目的并不是为了在这里添加用户,是为了辅助其他的操作,比如certutil的命令执行等。本文参考了大量的链接,感谢各位师傅的支持。

5. 参考资料

代码语言:javascript复制
https://update.venuseye.com.cn/reports/1548417941041/以Emotet为例深入分析CMD命令混淆技术20181212.html

https://blog.csdn.net/weixin_45745344/article/details/108088887

https://cloud.tencent.com/developer/article/1633973

0 人点赞