标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-2789] 作者: 大猪 发表于: [2020-11-22] [2020-11-22]被用户:大猪 修改过
本文共 [650] 位读者顶过
SandboxEscaper!
[出自:jiwo.org]
原文:
Process Monitor
vmware 15.0 密钥:YC74H-FGF92-081VZ-R5QNG-P6RY4 如果你的vmware版本比15.0高,您需要卸载当前的版本,并准备一份适用于15.0的系统镜像用来给vmware15.0用,这个镜像需要是多核,因为这个漏洞需要竞争条件来利用,关于恢复您可以卸载vm然后安装原来的版本,这并不会影响到您原来的镜像。
安装vmware后继续安装vmtools.exe,15.0的vmware安装的vmware tools初始版本是10.0版本,在本次复现的漏洞影响版本范围中。 安装vmware tools后C:\Windows\Installer的目录下文件如下图所示(这个文件夹保存着所有基于Windows Installer安装的应用软件的注册信息,要显示它需要打开显示隐藏的文件夹并显示收系统保护的文件夹)
最大的那个就是SandboxEscaper博客里所说的vmware tools的msi文件(.msi是微软格式的安装包)
接下来我将对它进行为分析,不过在这之前需要过滤一些操作
执行5vmware tools mis文件命令 。
此时再来查看Process Monitor会多出38000多个CreateFile操作
让我们再此过滤。某些事件的属性会是模拟用户操作,过滤掉它。
ok,还剩28000多,让我们再过滤一次,这次我们需要排除用户没有权限写入的目录,C:\Windows和C:\Program Files,然后只包含system权限的操作
根据SandboxEscaper博客描述我们接下来需要找到C:\ProgramData文件夹(这个文件夹是隐藏的,它包含了应用缓存数据,对所有用户共享),不过作为普通用户我们有权限进行写入,这里可以发现点击属性没有写入权限,点击高级查看却有写入权限
也许属性里的写入是指能不能修改文件夹下原本有的文件内容,而高级里的写入指的是能不能在该文件夹下新建文件,如果是这样倒是说得通。
SandboxEscaper说我们需要过滤C:\ProgramData\VMware\VMware CAF\pme\scripts\stop-listener.bat,因为vm tools的安装包在构造stop-listener.bat存在漏洞
我只过滤掉了C:\ProgramData\VMware\VMware CAF\pme\scripts,最后只剩下300多条 找到stop-listener.bat!
之后在操纵记录中可以找到两次Createfile失败,请注意,这是一个漏洞点。
继续观察,很明显,该目录下的其他文件也有这样的问题。
再次查看,这次能够更清楚的看到漏洞点
虽然我不明白这个.msi为何要在SetRenameInformationFile后调用Createfile为何失败,这波操作很奇怪,谁知道设计这个.mis的人怎么想的呢,但是漏洞点其实就是Createfile失败,如果我们能在Createfile失败之前创建相同的文件C:\ProgramData\VMware\VMware CAF\pme\scripts\stop-listener.bat 那么它会被设置属性成当前用户完全控制,也就是说我们创建的权限会被覆盖。 让我们看看SandboxEscaper是如何利用漏洞的 int main() { HANDLE thisthread = GetCurrentThread(); SetThreadPriority(thisthread, THREAD_PRIORITY_TIME_CRITICAL); HANDLE testhandle = NULL; do { CloseHandle(testhandle); testhandle = CreateFile(L"C:\\ProgramData\\VMware\\VMware CAF\\pme\\scripts\\stop-listener.bat", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); // no attr. template) } while (testhandle == INVALID_HANDLE_VALUE); CloseHandle(testhandle); return 0; } 触发过程,创建线程接着提升该线程权限,接着无线创建C:\ProgramData\VMware\VMware CAF\pme\scripts\stop-listener.bat,然后等待Createfile来覆盖C:\ProgramData\VMware\VMware CAF\pme\scripts\stop-listener.bat权限 最后获得stop-listener.bat权限,前面说到C:\ProgramData\VMware\VMware CAF\pme下的其他文件也有此类漏洞,所以它们也可以被利用。 关于利用SandboxEscaper谈到此文件没有办法被system进程执行,好吧,我也想不到,最后vmware修复了此漏洞,并且很有趣的是给了它一个本地提权的标识
一点感触: 为了解Process Monitor的特性,我决定好好记录下Process Monitor的一些使用方法以及操作描述,我尝试了访问菜单上的每个选项,下面是会有用的快捷键
开始记录: ctrl+e 至于 Process Monitor操作描述部分和详细部分这部分非常重要,但是有万能的Google大法。 继续跟踪SandboxEscaper的博客,发现一些策略。这是关于过滤器部分,它代表了您需要寻找什么。怎么寻找。
任意文件创建|任意文件写入
任意文件读取
任意文件删除 后面SandboxEscaper谈到了这有关一种利用方式https://www.cyberark.com/resources/threat-research-blog/follow-the-link-exploiting-symbolic-links-with-ease 这个家伙主要讲的目录链接+符号链接利用
在跟着操作到这时我接触到了目录链接(在网上有看到好多别名,也叫软链接和NTFS 交汇点)
创建一个123目录链接,如下图 它和符号链接类似,但只能用于本地上,只能链接到目录。
可以对没有访问权限的目录创建一个目录链接,但是该目录链接也会同样无法访问。 如果有对目标目录写的权限,那么对该目标目录创建的在目录链接下的做的任何文件操作都会影响到目标目录。 所以,无论怎么样目录链接都可以被创建除非目录链接所在的路径没有写入权限,另外,目录链接删除不会影响到原来的目录,但时对目录链接下的文件操作会影响到目标目录,这很有趣,不是吗? Process Monitor看目录链接的特性,我通过打开123下的文件操作,但是结果却只显示了链接的目标目录的信息 但在结果中有REPARSE显示
下面是它和符号链接以及硬链接的区别
如果在CreateFile时没有加上FILE_FLAG_OPEN_REPARSE_POINT 标值时,文件不会判断处理的文件是不是链接 #define FILE_FLAG_OPEN_REPARSE_POINT 0x00200000
在这里抛出一个问题,对于SandboxEscaper利用目录链接来利用这部分我未研究明白,即使把文件目录解析成文件目录链接又如何呢,向我前面所说的,如果对目标文件没有写入权限,那么对目录链接下的文件同样也没有写入权限,难道对目标目录的文件操作还能重新修改目录链接权限?
来自SandboxEscaper的结论: |