标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2020-2722]   作者: Hello大鱼 发表于: [2020-07-24]

本文共 [21] 位读者顶过

0x00 简介[出自:jiwo.org]
混淆技术,已经有很长的历史了:包括恶意有效载荷的加密和字符串的混淆,到JavaScript混淆。命令行混淆不是一个新问题 - 只是混淆的目标(Windows命令处理器 cmd.exe)相对较新。命令行解释器是一个单独的软件程序,它可以在用户和操作系统之间提供直接的通讯。非图形命令行解释器用户界面提供运行基于字符的应用程序和实用程序的环境。命令行解释器通过使用类似于 MS-DOS 命令解释程序 Command.com 的各个字符来执行程序并在屏幕上显示其输出。Windows 服务器操作系统命令行解释器使用命令解释程序 Cmd.exe(该程序加载应用程序并指示应用程序之间的信息流动)将用户输入转换为操作系统可理解的形式。
Cmd中有许多的特殊字符,都具备特殊的功能,“^”是常见的转义字符,我们把插入到命令当中,不影响命令执行,它们都有特定的功能,如果需要把它们作为字符输出的话,echo >、echo |之类的写法就会出错——cmd解释器会把它们作为具有特殊功能的字符对待,而不会作为普通字符处理,这个时候,就需要对这些特殊字符做转义处理:在每个特殊字符前加上转义字符^。因此,要输出这些特殊字符,就需要用 echo ^>、echo ^|、echo ^|^|、echo ^^之类的格式来处理。另外,此转义字符还可以用作续行符号。


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

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

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

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

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

添加空格

添加逗号和分号


添加括号


添加多个转义字符

0x02 利用环境变量进行混淆
cmd.exe的环境变量分为系统已有的环境变量和自定义变量。利用环境变量的值中的字符或字符串,可以拼接成黑客需要的cmd命令,同时可以逃避静态检测。
我们可以自定义一个或者多个环境变量,利用环境变量值中的字符,提取并拼接出命令

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

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

随机大小写和空格

添加逗号和分号

添加括号

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

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

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

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

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

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

评论

暂无
发表评论
 返回顶部 
热度(21)
 关注微信