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设置环境变量
set a=cmd /c whoami ---> %a%
在这个例子中,通过设置变量,然后去执行变量,但是一定要注意在设置set
的变量值和等号之间不能有空格:
3. 混淆工具 Invoke-DOSfuscation
3.1 工具介绍
在混淆中,由于命令和方法太多,比如管道符| & ||
等等,有时候我们不知道如何处理,所以在这里提供了一个新的混淆工具:
https://github.com/danielbohannon/Invoke-DOSfuscation
首先导入该工具的包:
这里是因为默认禁止加载,修改下,以管理员身份运行powershell
,然后执行命令:
set-ExecutionPolicy RemoteSigned 选择Y
再次加载的时候报毒:
在这里需要关闭你的杀软,然后再加载:
Import-Module .\Invoke-DOSfuscation.psd1 Invoke-DOSfuscation
在这里的命令非常的多,在这里演示下最简单的用法:
使用set command
设置命令,然后跟着步骤做就行了,最后生成的命令为:
whoa%ALLUSERSPROFILE:~-5,1%i
刚刚的命令执行结果: