详解MagicDot漏洞及其利用手段

漏洞背景与原理

  • DOS 路径:C:\example\example
  • NT 路径:\??\C:\example\example

DOS 路径为了兼容性被保留下来,而 Windows 系统内核使用 NT 路径进行处理

当应用程序使用 DOS 路径调用 Win32 API 时,内核会将 DOS 路径规范化为 NT 路径

问题就出在规范化过程中:路径解析函数会静默删除

  • 任意路径段末尾的任意数量的点
  • 最后一个路径段末尾的任意数量的空格
DOS 路径 规范化后的 NT 路径 说明
C:\example\example**.** \??\C:\example\example -
C:\example\example**…** \??\C:\example\example -
C:\example**.**\example \??\C:\example\example 任意路径段末尾的任意数量的点被删除
C:\example\example**<space>** \??\C:\example\example -
C:\example\example**<space><space>** \??\C:\example\example 最后一个路径段末尾的任意数量的空格被删除
C:\example**<space>**\example \??\C:\example**<space>**\example 如果不是最后一个路径段,则末尾空格不会被删除
看出端倪了吗?
  1. 病毒程序malware.exe把自己重命名为svchost.exe然后放在 C:\Windows.\System32\ 路径下
  2. 某杀毒软件使用 DOS 路径进行杀毒,尝试打开文件C:\Windows.\System32\svchost.exe时路径被规范化为\??\C:\Windows\System32\svchost.exe,导致读取到的是真的svchost.exe,假的病毒程序美美逃逸!

原理就是这么简单

利用

文件保护(防删除)

首先,使用API创建一个末尾带点的文件,测试一下有什么基本特性

详细信息为空

记事本无法打开

无法正常删除

火绒也无法粉碎

无法正常被删除,而使用API搭配NT路径就可以正常读写,至此,完成了第一个利用手段:文件防删除

文件隐藏

一个文本文件不够炸裂,为了详细说明这个漏洞有多么“核弹级”,这里用永恒之蓝做样本

编写程序,创建一个末尾带点的文件夹,把永恒之蓝移动进去

文件资源管理器无法正常访问点文件夹

使用DiskGenius可以看到移动成功了

火绒杀毒:未发现风险(注意这里的扫描对象是0个)

同目录下创建同名但没点的文件夹,内部放几个文件

再次用火绒杀毒,这次扫描对象就不为0个了

由此可见,火绒一定有 MagicDot 漏洞(访问 dot. 时被规范化为 dot)

无法正常访问,杀毒软件也无法扫描(同样的,使用API搭配NT路径就可以正常访问),至此,完成了第二个利用手段:文件隐藏

进程伪装

好吧,现在的ARK工具都不吃这一套了,system informer能正常解析NT路径

免杀

火绒能查杀到木马进程

但是无法检测和删除木马源文件

进程杀几千次都没用,只要源文件还在,触发器还在,有的是机会重新运行重新上线,相当于实现了一种另类的免杀(你能杀掉本,但是杀不掉根)

参考

https://github.com/SafeBreach-Labs/MagicDot

https://www.safebreach.com/blog/magicdot-a-hackers-magic-show-of-disappearing-dots-and-spaces/

这个漏洞都公布一年了,没见过在野利用,很多 APT 组织花大价钱搞黑签名驱动进入0环也不愿意零成本在3环搞点小奇技淫巧吗?


详解MagicDot漏洞及其利用手段
https://crackme.net/articles/magicdot/
作者
Brassinolide
发布于
2025年12月22日
许可协议