点击蓝字 关注我们
BlackHat 2024 Asia
Windows 技术
MagicDot 学习分享
起初看到国内很多安全行业的公众号转发关于Windows的路径转换机制可能导致命令执行的文章,其中使用到的技术是2024年BlackHat亚洲专场由研究员Or Yair分享的内容,这名研究员基于自己的研究成果,于2023年提交了多枚漏洞给微软并获取到CVE编号,其中已被微软修复的CVE-2023-36396和CVE-2023-32054分别造成了远程命令执行及权限提升。
本文将分享笔者在学习Or Yair分享的技术的过程。
DOS-NT路径转换
在Windows操作系统中用户可以通过执行系统函数与文件或目录进行交互,例如,在使用记事本程序打开文档的时候,记事本将调用win32api CreateFile函数,通过传参文件所在路径的方式来打开相关文件。
Windows系统支持几种不同的路径格式,我们最常使用的是DOS路径格式。
实际上Windows在进行文件操作时回去调用更底层的函数NtCreateFile,而该函数的参数要求是使用NT格式(??C:)的路径而不是DOS格式的路径,所以在调用NtCreateFIle之前,Windows会将DOS路径格式的地址转换为NT格式的路径地址。
#DOS格式路径地址
C:Users xfffengDesktop
#NT格式路径地址
??C:Users xfffengDesktop
这个转换过程是通过系统函数实现的,如RtlpDosPathNameToRelativeNtPathName函数。
在转换过程中存在一个已知问题,该函数会删除掉DOS格式路径中各层路径后的点;还会移除掉最后层路径中末尾的全部空格符号。
转换的例子如下表格所示:
DOS Path | NT Path |
C:exampleexample. | ??C:exampleexample |
C:exampleexample… | ??C:exampleexample |
C:exampleexample<space> | ??C:exampleexample |
C:exampleexample<space><space> | ??C:exampleexample |
C:example.example | ??C:exampleexample |
C:example<space>example | ??C:example<space>example |
文件隐藏
通过了解DOS-NT路径转换,我们可以知道,当用户使用的程序在打开文件或目录,使用的是DOS路径格式时,可能会发生一些异常情况。
测试这个现象我们可以使用Cygwin工具进行测试,它可以直接输入NT格式路径进行文件操作,另一边我们可以使用Windows的命令行或WIndows资源管理器,它使用DOS格式路径进行文件操作。
在cygwin的shell中,创建目录demo,使用重定向写入文件命令如下:
mkdir demo
cd demo
echo "normal file" > "file1.txt"
echo "evil file1" > "file1.txt."
echo "evil file2" > "file1.txt<space>"
使用notepad在资源管理器中打开这三个文件,或在cmd中使用type命令读取这三个文件内容结果都是file1.txt文件中的内容。
使用这样的方法实现了对file1.txt.及file1.txt文件中内容的隐藏。
这两个文件也无法直接通过cmd或资源管理器进行删除,由于DOS-NT路径转换的机制,对其进行的操作都将影响file1.txt。
进程隐藏
安全研究员也分享了使用这个机制进行进程隐藏的方法,我们使用他在github提供的工具magicdot,使用如下命令创建mimikatz的隐藏进程。
python magic_dot_cli.py CREATE_IMPERSONATED_PROCESS -exe-path
C:Users