freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

Windows CMD的命令混淆学习思路
雷石安全实验室 2021-10-09 15:34:50 268805

最近有些朋友问我一些免杀问题,由于个人技术有限,对静态免杀有些了解(动态免杀真的不会,太菜了),所以就总结了一些Windows中cmd的命令混淆思路,静态免杀无非就是对安全设备检测到代码(命令)中的特征字符进行查杀、过滤,首先做的就是对于特征字符的处理,随后就是对环境中限制的字符替换或混淆,从而达到免杀效果。

(1) 选项字符替换

CMD命令中可以执行ping 命令,该命令是由unix系统移植过来的,帮助页面建议命令行选项应使用连字符作为选项字符,例如ping -n 1 127.0.0.1. 这与大多数其他使用正斜杠的 Windows 原生命令行工具不一致。大概是为了帮助有疑问的用户,该程序还接受正斜杠作为选项比如 ping /n 1 127.0.0.1也能运行的。

大多数使用连字符的内置 Windows 可执行文件也接受正斜杠,但有的命令却不可以,例如find /i keyword,该命令将显示包含单词“keyword”的所有文件,但find -i keyword会提示语句错误。

(2) 字符替换

Unicode修饰符替换

另一种方法是用类似的字符替换命令行中的其他字符(即除了选项字符之外)。特别是当你考虑整个 Unicode 范围时,在某些进程可能接受的 ASCII 范围中还发现了许多字母变体。

涉及到的 Unicode 字符ʱ ʰ ʲ ʳ ʷ ʸ ˢ ˣ ˡ

ʷ 修饰字母小写 W

ʸ 修饰字母小写 Y

ʰ 修饰字母小写 H

ʱ 带钩的修饰字母小写 H

ʲ 修饰字母小写 J

ʳ 修饰字母小写 R

ˡ 修饰字母小写 L

ˢ 修饰字母小写 S

ˣ 修饰字母小写 X

Unicode 包含一个间距修饰字母范围(0x02B0 - 0x02FF) [ 4 ],其中包括 ˪、ˣ 和 ˢ 等字符。一些命令行解析器将它们识别为字母并将它们分别转换回 l、x 和 s。这方面的一个例子是reg,它将reg export HKCU out.reg和reg eˣport HKCU out.reg视为平等。

因为编码问题显示 ˣ 为方框

逗号、分号替换空格

使用 ; (分号) 和 , (逗号)替换合法空格,但是在某些命令中无法替换,例如:net user会提示语法错误。

(3) 字符插入

同样,有时可以在命令行中插入额外的字符,这些字符将被执行程序忽略。例如,某些可执行文件可能会删除不可打印的字符,同时也可能会过滤掉某些可打印的字符。

例如,Windows 事件日志工具wevtutil似乎接受在随机位置插入某些范围内的 Unicode 字符(ࢯ)的命令行。因此执行wevtutil gli hardwareeventsandwevtutil gࢯli hardwareevents将产生完全相同的输出,尽管后者在第一个参数的中间包含一个阿拉、伯字母。

还有常见的 ^ 转义字符插入

插入多个(),也不会影响命令运行

(4) 行情插入

在保持流程完整的同时操纵命令行的另一种方法是插入引号。尽管这听起来像是先前技术的一个子集,但这里的要求是引号成对出现。

您可能熟悉在参数周围加上引号的概念。就拿dir "c:\windows"例如,这是有效的一样dir c:\windows\,由于缺乏空间。大多数程序都接受这个约定。鲜为人知的是,大多数程序在任意位置接受引号:该命令dir c:"win"d""ow"s"也可以工作。只要每个参数的引号数是偶数并且后面的引号不超过两个,大多数程序似乎都接受这一点。

(4) 环境变量

在cmd命令行中支持设置环境变量和自定义变量,使用环境变量中的值或字符串可以拼接成想要的命令。例如whoami,将am 设置变量为 t,将命令拼接成who%t%i,执行成功。

利用@在cmd中的特性,@表示后面的命令不显示执行

(5) 参数缩写

插入和替换字符后,我们还需要尝试删除字符。一些应用程序允许为其他冗长的命令行选项提供“速记”,从而更容易记住这些命令,或者缩短命令字符个数。

这是基于 Unix 的工具(例如grep -i keywordvs grep --ignore-case keyword)中的一个众所周知的概念,但在 Windows 上则不然。然而,一些程序接受缩短的版本。有些程序采用与 Unix 类似的方法并接受单字母版本(例如cmdkey /lvs cmdkey /list),有些程序接受其他缩写版本(例如wevtutil glivs wevtutil get-loginfo),而其他程序则采用“通配符方法”。这方面的一个例子是 PowerShell,它的许多关键字允许您在关键字 [ 5 ]的末尾省略一个或多个字符。

需要注意的是有些命令的缩写会出现一些冲突。可以查看powershell相关文档。

免杀的方法有很多,只要思路灵活,静态免杀很容易的。

命令混淆工具已经有好多大佬开发出来了,详细用法大家可以自己研究(网上已经有很多了),命令混淆过静态免杀很简单,在这里提供一个简单的样例供大家参考。

下载地址:https://github.com/danielbohannon/Invoke-DOSfuscation

大概使用方法也很简单。

下载文件后再当前目录运行powershell,导入使用的模块 Import-Module .\Invoke-DOSfuscation.psd1 ;

再运行程序Invoke-DOSfuscation ;

可以查看工具的基本使用方法TUTORIAL

  1. Set command __//设置需要混淆的命令

  2. Set FINALBINARY__//设置命令运行的环境

  3. 加载混淆模块,(可以查看下当前目录下的文件夹,不同文件有不同的混淆效果)

  4. 使用show命令查看当前命令设置的参数情况

\5. 可以使用test命令再当前窗口进行测试混肴过后的命令;

  1. 复测下再cmd 中运行的结果;

其中有很多混淆方法,可以自己看下教程,在这里就不一一举例了。混淆只是可以过一些静态面纱,静态免杀无非就是针对特征字符的处理,静态免杀的方法千千万,基本原理不会变,这里只是提供一种思路,供大家参考。

# web安全 # 数据安全
本文为 雷石安全实验室 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
攻防渗透宝典
web安全
雷石安全实验室 LV.6
这家伙太懒了,还未填写个人描述!
  • 88 文章数
  • 132 关注者
对用友NC“任意文件读取”漏洞的分析
2024-01-29
雷石|二进制漏洞之数组越界and缓冲区进行数据同步
2023-09-01
用友NC-ActionHandlerServlet反序列化漏洞分析
2023-08-18