更新时间:2022.06.08
本文首发乌鸦安全知识星球!
1. 背景介绍
cmd
命令混淆的意义主要是bypass
,混淆也不能影响原来的命令执行结果。
2. 混淆方法
2.1 双引号法""
使用双引号包裹字符,相当于将字符进行连接。 who""a""mi
在这个也可以这样:
最好是成对使用:
2.2 转义符^
字符 ^
是CMD
命令中最常见的转义字符,该字符不影响命令的执行。 who^am^i
在这里不能两个^^放在一起使用,不然会报错:
2.3 大小写混合
WHoAmI
2.4 空格替换 ,;
逗号 ,
和分号 ;
可以互换,可以取代命令中的合法空格,多个空格也不影响命令执行。
;, net user
,; net user
但是不能在一个连续命令中间使用:
2.5 括号()
成对的圆括号()
也会出现在命令参数中,也不影响命令的执行。圆括号表示嵌入子命令组,同样被cmd.exe
参数处理器进行解释 这个句子注意当前使用的时候,只能够使用完整的一个命令使用当前的符号,不能分开:
多层同样不影响使用:
2.6 set设置环境变量
代码语言:javascript复制set a=cmd /c whoami ---> %a%
在这个例子中,通过设置变量,然后去执行变量,但是一定要注意在设置set
的变量值和等号之间不能有空格:
3. 混淆工具 Invoke-DOSfuscation
3.1 工具介绍
在混淆中,由于命令和方法太多,比如管道符| & ||
等等,有时候我们不知道如何处理,所以在这里提供了一个新的混淆工具:
https://github.com/danielbohannon/Invoke-DOSfuscation
首先导入该工具的包:
这里是因为默认禁止加载,修改下,以管理员身份运行powershell
,然后执行命令:
set-ExecutionPolicy RemoteSigned
选择Y
再次加载的时候报毒:
在这里需要关闭你的杀软,然后再加载:
代码语言:javascript复制Import-Module .Invoke-DOSfuscation.psd1
Invoke-DOSfuscation
在这里的命令非常的多,在这里演示下最简单的用法:
使用set command
设置命令,然后跟着步骤做就行了,最后生成的命令为:
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