很装b那种cmd命令_CMD命令混淆分析

0x00  简介

  混淆技术,已经有很长的历史了:包括恶意有效载荷的加密和字符串的混淆,到JavaScript混淆。命令行混淆不是一个新问题 - 只是混淆的目标(Windows命令处理器 cmd.exe)相对较新。命令行解释器是一个单独的软件程序,它可以在用户和操作系统之间提供直接的通讯。非图形命令行解释器用户界面提供运行基于字符的应用程序和实用程序的环境。命令行解释器通过使用类似于 MS-DOS 命令解释程序 Command.com 的各个字符来执行程序并在屏幕上显示其输出。Windows 服务器操作系统命令行解释器使用命令解释程序 Cmd.exe(该程序加载应用程序并指示应用程序之间的信息流动)将用户输入转换为操作系统可理解的形式。

 Cmd中有许多的特殊字符,都具备特殊的功能,“^”是常见的转义字符,我们把插入到命令当中,不影响命令执行,它们都有特定的功能,如果需要把它们作为字符输出的话,echo >、echo |之类的写法就会出错——cmd解释器会把它们作为具有特殊功能的字符对待,而不会作为普通字符处理,这个时候,就需要对这些特殊字符做转义处理:在每个特殊字符前加上转义字符^。因此,要输出这些特殊字符,就需要用 echo ^>、echo ^|、echo ^|^|、echo ^^之类的格式来处理。另外,此转义字符还可以用作续行符号。

 @  命令行回显屏蔽符  %  批处理变量引导符  >   重定向符  >>  重定向符  < 、>&、  |   命令管道符     ^   转义字符  &  组合命令  && 组合命令   ||  组合命令  ""  字符串界定符 
& [...]  Command1 &Command2 用来分隔一个命令行中的多个命令。Cmd.exe 运行第一个命令,然后运行第二个命令。&&[...]  Command1 &&Command2  只有在符号 && 前面的命令成功时,才运行该符号后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令运行成功时才运行第二个命令。|| [...] Command1 || Command2 只有在符号 || 前面的命令失败时,才运行符号 || 后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令未能运行成功(接收到大于零的错误代码)时才运行第二个命令。( ) [...] ( Command1 & Command2) 用来分组或嵌套多个命令。; 或者 , Command1 Parameter1;Parameter2 用来分隔命令参数。

9d34e85afa884bdf7b4e8aade8c1ddc8.png

混淆的维度

77e054929108349ebac2b73872657e09.png混淆的强度

0x01  利用特殊字符进行混淆

37a4109c4fd25a4d712b05e400e902b5.png

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

d1050389c9cdbf35ec5f654877730dd3.png

成对的圆括号()也会出现在命令参数中,也不影响命令的执行。圆括号表示嵌入子命令组,同样被cmd.exe参数处理器进行解释。

9ddeafb4dff0283049660af9e984a8c7.png

当然也可以用&&进行命令组合

a78788b5e46d1866c7ce49e213ab7590.png

ec58462f5d0c5c257c4c903426d54d1c.png

ce9ad616b8ab44fd3922fc6d60d7aab9.png

%comspec% 是一个指向当前命令行外壳的环境变量。通过使用 %comspec%,您不必担心命令行外壳是 cmd.exe 还是 command.exe;%comspec% 会自动选择正确的一个。

1e2feb688823c6d5d1bdfed03456cb24.png

a04cf8efb332c2ffacc79a44b7d2221d.png

添加空格

da8efa8dc05dcc1468da808130df5562.png

添加逗号和分号

,;,%coMSPec:~ -0, +27%,; ,;, ;/b, ;;; ,/c, ,,, ;start; , ; ;/b ; , /min ,;net user

e68693b663f7e72daf5c375b529482f1.png

添加括号

,;,%coMSPec:~ -0, +27%,; ,;, ;/b, ;;; ,/c, ,,, ;start; , ; ;/b ; , /min ,;netstat -ano |; ,;( (,;,((findstr LISTENING)),;,) )

48c744087080bbd2b5bd23ba053463b8.png

添加多个转义字符

,;,%coMSPec:~ -0, +27%,; ,;, ;^^^^/^^^^b^^^^, ;;; ,^^^^/^c, ,,, ;^^st^^art^^; , ; ;/^^^^b ; , ^^^^/^^^^min ,;net^^^^stat ^^^^ ^^^^-a^^^^no ^^^^ ^|; ,;( ^ (,;^,(^(fi^^^^ndstr LIST^^^^ENING)^),;^,) ^ )

ab2bb4fb450ea6216a01646a90c325d3.png

0x02  利用环境变量进行混淆

cmd.exe的环境变量分为系统已有的环境变量和自定义变量。利用环境变量的值中的字符或字符串,可以拼接成黑客需要的cmd命令,同时可以逃避静态检测

set 唯一的,只能有一个存在, 在编程语言里面 set 一般是用来处理重复的字符串和数字,  而在命令行里面是添加环境变量(例: set path=%path%;D\node), 添加环境变量可以通过 DOS 快熟的启动程序, 不过使用 set 添加环境变量指在当前 DOS 窗口下有效, 关闭当前 DOS 窗口添加的环境变量也就不存在了。

作用:显示、设置或删除 cmd.exe 环境变量

格式:

SET [variable=[string]]

  variable  指定环境变量名。

  string    指定要指派给变量的一系列字符串

要求:SET命令不允许变量名含有等号。

查看所有环境变量:

5275a2aca4f65bbc06aef402ce239a3c.png

查看指定环境变量名称:

93807ff17c8e87fd84b5751ad01df351.png

2de0f3767c48b00606bae3c1fcb57ad9.png

添加环境变量

65458aaba54711b118e90444fc44a893.png

清空环境变量

72d6aae1798b709e4590c17afc1cdd09.png

我们可以自定义一个或者多个环境变量,利用环境变量值中的字符,提取并拼接出命令

098829166d68659c1106848e6986f893.png

也可以定义多个环境变量进行拼接命令串

2970bcc57cfe0bf0e258b02e0a75ec1a.png

大多数对powershell使用简单连接的公共示例都依赖于执行子cmd.exe进程来扩展主进程中设置的自定义环境变量。但是,call命令将提供更安静的变量扩展方法,因为它不需要执行子进程。

c2f3fac3455ea81343e4265371d3f39d.png

cmd /c “set com3= /ano&&set com2=stat&&set com1=net&&call %com1%%com2%%com3%”

a7c266b7de5180de4f7242afa97bae5f.png

cmd /c "set com3= &&set com2=user&&set com1=net &&call %com1%%com2%%com3%"

7fac00ed824cfdd059e993eecbe335d6.png

cmd /c "set com3= &&set com2=user&&set com1=net &&call set final=%com1%%com2%%com3%&&call %final%"

9b93e7da8543d4d270325a5119fea768.png

随机大小写和空格

CMd /C “ sEt coM3= /ano&& SEt cOm2=stat&& seT CoM1=net&& caLl SeT fiNAl=%COm1%%cOm2%%coM3%&& cAlL %FinAl% “

8312658400145ba3538c4c73e21b8022.png

添加逗号和分号

;,,CMd,; ,/C “, ;, ;sEt coM3= &&,,,SEt cOm2=user&&;;;seT CoM1=net &&, ;caLl,;,SeT fiNAl=%COm1%%cOm2%%coM3%&&; , ,cAlL, ;, ;%FinAl% “

a3c9f3775fa49300cd15504b437a4dc7.png

添加括号

;,,C^Md^,; ,^/^C^ ^ “, ( ((;,( ;(s^Et ^ ^ co^M3=^^ /^^an^o)) )))&&,,(,S^Et^ ^ ^cO^m2=^s^^ta^^t)&&(;(;;s^eT^ ^ C^oM1^=^n^^et) ) &&, (( ;c^aLl,^;,S^e^T ^ ^ fi^NAl^=^%COm1^%%c^Om2%^%c^oM3^%))&&; (, ,(c^AlL^, ;,^ ;%Fi^nAl^%) ) “

05217a5905cde4a8e36ab46317362e21.png

将配对双引号添加到输入命令以混淆其最终命令行参数

;,,C^Md^,; ,^/^C^ ^ “, ( ((;,( ;(s^Et ^ ^ co^M3=^^ /^^an^o)) )))&&,,(,S^Et^ ^ ^cO^m2=^s^^ta^^t)&&(;(;;s^eT^ ^ C^oM1^=^n^^e””t) ) &&, (( ;c^aLl,^;,S^e^T ^ ^ fi^NAl^=^%COm1^%%c^Om2%^%c^oM3^%))&&; (, ,(c^AlL^, ;,^ ;%Fi^nAl^%) ) “

8f99dce448700c2cb1ef8b66a0f04264.png

用相邻的双引号替换不相邻的双引号

;,,C^Md^,; ,^/^C^ ^ “, ( ((;,( ;(s^Et ^ ^ co^M3=^^ /^^an^o)) )))&&,,(,S^Et^ ^ ^cO^m2=^s^^ta^^t)&&(;(;;s^eT^ ^ C^oM1^=^n^^””e””t) ) &&, (( ;c^aLl,^;,S^e^T ^ ^ fi^NAl^=^%COm1^%%c^Om2%^%c^oM3^%))&&; (, ,(c^AlL^, ;,^ ;%Fi^nAl^%) ) “

c42d530e7b17987da29f205a4b1f68e4.png

使用cmd.exe的/ V:ON参数启用延迟环境变量扩展

;,,C^Md^,; /V:ON,^/^C^ ^ “, ( ((;,( ;(s^Et ^ ^ co^M3=^^ /^^an^o)) )))&&,,(,S^Et^ ^ ^cO^m2=^s^^ta^^t)&&(;(;;s^eT^ ^ C^oM1^=^n^^””e””t) ) &&set quotes=””&&, (( ;c^aLl,^;,S^e^T ^ ^ fi^NAl^=^%COm1^%%c^Om2%^%c^oM3^%))&&; (, ,(c^AlL^, ;,^ ;%Fi^nAl^%) ) “

10e713c3c1f191ec7ebede268a693e00.png

使用包含相邻引号的变量的子字符串执行相邻双引号的字符串替换

;,,C^Md^,; /V:ON,^/^C^ ^ “, ( ((;,( ;(s^Et ^ ^ co^M3=^^ /^^an^o)) )))&&,,(,S^Et^ ^ ^cO^m2=^s^^ta^^t)&&(;(;;s^eT^ ^ C^oM1^=^n^^””e””t) ) &&set quotes=””&&, (( ;c^aLl,^;,S^e^T ^ ^ fi^NAl^=^%COm1^%%c^Om2%^%c^oM3^%))&&; (, ,(c^AlL^, ;,^ ;%Fi^nAl^:””=!quotes:~0,1!%) ) “

48497f37ab4b20c54d62b1de44198fe6.png

编码混淆可以支持将随机生成的垃圾字符添加到唯一环境变量中并更新for循环中的索引值以使得在视觉上重新组装原始命令更加困难。除了在循环索引值之间以任何正数量显式签名非负整数和可互换空格,逗号和分号分隔符字符之外,所有先前的插入混淆字符都可以添加到FORcoded命令中

,;c^Md;/^V^:O^N;,;/^C “((sE^T ^ unIQ^uE=OnBeFt^UsS C/AaToE ))&&,; fo^R;,;%^a,;; i^N;,,;( ,+1; 3 5 7 +5 1^3 +5,,9 11 +1^3 +1;;+15 ^+13^37;,),;,;d^O,,(;(;s^Et fI^Nal=!finAl!!uni^Que:~ %^a,1!))&&(;i^F,%^a=^=+13^37,(Ca^lL;%fIn^Al:~-12%))”

9b0af460cdad499a467c0354920855eb.png

cmd /V:ON /C “set reverse=ona/ tatsten&& FOR /L %A IN (11 -1 0) DO set final=!final!!reverse:~%A,1!&&IF %A==0 CALL %final:~-12%”

4e99864cc9cb47a4d7440b5099521500.png

0x03  参考

https://www.fireeye.com/blog/threat-research/2018/11/obfuscated-command-line-detection-using-machine-learning.html

https://www.fireeye.com/content/dam/fireeye-www/blog/pdfs/dosfuscation-report.pdf

https://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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部