前言
所谓cmd命令混淆,主要意思就是指cmd命令的bypass,绕过一定的限制,方便执行命令达到我们需要的效果。
CMD命令的混淆方式
1、插入特殊字符混淆命令
1.1 转义符”^”
因此,要输出这些特殊字符,就需要用 echo ^>、echo ^|、echo ^|^|、echo ^^之类的格式来处理。另外,此转义字符还可以用作续行符号。
whoami
wh^o^a^m^i
![图片[1]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd201701.png)
注意whoa^^mi --->whoa^mi 失败
whoa^^mi
![图片[2]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd201919.png)
1.2 空格替换,;
;, whoami
,; whoami
![图片[3]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd202116.png)
但是不能在一个连续命令中间使用:
![图片[4]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd202447.png)
1.3 双引号法”
whoami
"w""h""o"a"m"i"
"net" "user"
"ne"t" "us"er" //失败
""ne"t" "us"er" //成功
![图片[5]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd202757-1024x693.png)
最好是成对使用
1.4 大小写混合
whoami
WHOami
WhOamI
![图片[6]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd203133.png)
1.5 括号()
成对的圆括号()也会出现在命令参数中,也不影响命令的执行。圆括号表示嵌入子命令组,同样被cmd.exe参数处理器进行解释。如:
cmd.exe /c ((((echo Command 1))))&&(((((((echo Command 2)))))))
![图片[7]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd203314.png)
2 利用CMD环境变量拼接命令
Cmd.exe内部命令有: set、assoc ,ftype等。
Set命令用来显示、设置或删除cmd.exe环境变量。命令格式:
SET [variable=[string]]
variable 指定环境变量名。
string 指定要指派给变量的一系列字符串。
在命令行中输入 set,会列举出cmd.exe中所有的环境变量。
![图片[8]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd203754-1024x480.png)
简单使用
set a=cmd /c whoami ---> %a%
![图片[9]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd203853.png)
assoc:文件名扩展关联命令,用于显示和设置文件名扩展关联,可以指定某种后缀名的文件按照特定的类型文件打开或执行。命令格式为:assoc [.ext[=[fileType]]]
.ext是指:指定要关联的文件后缀名。点号(.)是不能省略的,如果省略了系统将显示该后缀名文件的关联信息。fileType是指:指定相关联的文件类型。如果只使用该参数,将显示该文件类型的信息。反之,该命令将列出系统注册的素有后缀名文件和相关的类型。
![图片[10]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd204020.png)
![图片[11]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd204104.png)
ftype:显示或修改用在文件扩展名关联中的文件类型,指定一种类型的文件默认用哪个程序运行或打开。命令格式为:ftype [fileType[=[openCommandString]]
![图片[12]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd204200.png)
cmd.exe的环境变量分为系统已有的环境变量和自定义变量。利用环境变量的值中的字符或字符串,可以拼接成黑客需要的cmd命令,同时可以逃避静态检测。如系统已有的环境变量%comspec%变量的值默认为:“C:\WINDOWS\system32\cmd.exe”,set命令可以被编码为: %comspec:~11,1%%comspec:~-1%%comspec:~-13,1%。
![图片[13]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd204457.png)
%VarName:~offset[,length]% 主要用于获取环境变量VarName的变量值,偏移offset字节之后长度为length个字节。[,length]可省略。
变量值 :C:\WINDOWS\
偏移下标: 0 11 -13 -1
通常我们也可以自定义一个或者多个环境变量,利用环境变量值中的字符,提取并拼接出最终想要的cmd命令。如:
拼接出cmd命令:net user
Cmd /C “set envar=net user && call echo %envar%“
![图片[14]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd205032.png)
也可以定义多个环境变量进行拼接命令串,提高静态分析的复杂度:
cmd /c “ set envar1=ser&& set envar2=ne&& set envar3=t u&&call echo %envar2%%envar3%%envar1%”
![图片[15]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd205137-1024x81.png)
cmd命令的“/C”参数,Cmd /C “string”表示:执行字符串string指定的命令,然后终止。
![图片[16]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd205222.png)
而启用延迟的环境变量扩展,经常使用 cmd.exe的 /V:ON参数,
/V:ON参数启用时,可以不使用call命令来扩展变量,使用 %var% 或 !var! 来扩展变量,!var!可以用来代替%var%,也就是可以使用感叹号字符来替代运行时的环境变量值。后面介绍For循环时会需要开启/V:参数延迟变量扩展方式。
![图片[17]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd205337.png)
3 利用For循环拼接命令
For循环经常被用来混淆处理cmd命令,使得cmd命令看起来复杂且难以检测。
![图片[18]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd205428.png)
FOR %variable IN (set) DO command [command-parameters]
(set) 指定一个或一组文件。可以使用通配符。 相关的文件或命令。
command 指定对每个文件执行的命令。
command-parameters
为特定命令指定参数或命令行开关。
/L 参数: 迭代数值范围
for /L %variable in (start,step,end) do command [command-parameters]
该命令表示以增量形式从开始到结束的一个数字序列。使用迭代变量设置起始值(start),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (end)。/L 将通过对start与end进行比较来执行迭代变量。如果start小于end,就会执行该命令,否则命令解释程序退出此循环。还可以使用负的 step以递减数值的方式逐步执行此范围内的值。例如,(1,1,5) 生成序列 1 2 3 4 5,而 (5,-1,1) 则生成序列 (5 4 3 2 1)。命令cmd /C “for /L %i in (1,1,5) do start cmd”,会执行打开5个cmd窗口。
![图片[19]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd205646-1024x563.png)
/F参数: 是最强大的命令,用来处理文件和一些命令的输出结果。
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
(file-set) 为文件名,for会依次将file-set中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行分成一个一个的元素,忽略空白行。
(“string”)代表字符串,(‘command’)代表命令。
假如文件aa.txt中有如下内容:
第1行第1列 第1行第2列
第2行第1列 第2行第2列
要想读出aa.txt中的内容,可以用for /F %i in (aa.txt) do echo %i ,如果去掉/F参数则只会输出aa.txt,并不会读取其中的内容。
![图片[20]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd205812-1024x228.png)
先从括号执行,因为含有参数/F,所以for会先打开aa.txt,然后读出aa.txt里面的所有内容,把它作为一个集合,并且以每一行作为一个元素。由上图可见,并没有输出第二列的内容,原因是如果没有指定“delims=符号列表”这个开关,那么for /F语句会默认以空格键或Tab键作为分隔符。For /F是以行为单位来处理文本文件的,如果我们想把每一行再分解成更小的内容,就使用delims和tokens选项。delims用来告诉for每一行用什么作为分隔符,默认分隔符是空格和Tab键。for /F “delims= “ %i in (aa.txt) do echo %i ,将delims设置为空格,是将每个元素以空格分割,默认只取分割之后的第一个元素。如果我们想得到第二列数据,就要用到tokens=2,来指定通过delims将每一行分成更小的元素时,要取出哪一个或哪几个元素:for /F “tokens=2 delims= “ %i in (aa.txt) do echo %i。
![图片[21]-【内网渗透】cmd命令混淆 cmdbypass学习-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/12/d2b5ca33bd205824-1024x157.png)
总结
文章参考资料:
以Emotet为例深入分析CMD命令混淆技术http://update.venuseye.com.cn/reports/1548417941041/%E4%BB%A5Emotet%E4%B8%BA%E4%BE%8B%E6%B7%B1%E5%85%A5%E5%88%86%E6%9E%90CMD%E5%91%BD%E4%BB%A4%E6%B7%B7%E6%B7%86%E6%8A%80%E6%9C%AF20181212.html










请登录后查看评论内容