Windows漏洞利用技巧:捕获虚拟内存访问(2025年更新)
早在2021年,我写了一篇博客文章,讨论了在Windows上构建虚拟内存访问陷阱原语的各种方法。目标是使虚拟内存地址的读取者或写入者暂停相当长的时间(例如1秒或更长时间),通常用于利用内核中的TOCTOU(Time-of-Check Time-of-Use)内存访问漏洞。
博客文章中提出的解决方案是映射远程服务器上的SMB文件,或滥用Cloud Filter API。本篇博客不会提供新的解决方案,而是想重点介绍Windows 11 24H2的一个新特性,该特性引入了直接在本地机器上滥用SMB文件服务器的能力,无需远程服务器。这一变化还引入了在本地利用所谓“虚假文件不可变性”漏洞类的能力。
所有变化请关注
这一变化至少据我所知,首次在这篇博客文章中公开。微软的博客文章描述了Windows Insider预览版中的这一变化,但随后已发布在普遍可用的Windows 11 24H2中。
简而言之,Windows上的SMB客户端现在支持从命令行的net命令指定目标TCP端口。例如,您可以通过命令net use \\localhost\c$ /TCPPORT:12345
强制SMB客户端使用端口12345。现在访问UNC路径\\localhost\c$\blah
将通过端口12345连接,而不是旧的固定端口445。此功能适用于任何用户,不需要管理员访问权限,因为它只影响当前用户的登录会话。
上一篇博客文章中遇到的问题是无法在不关闭本地SMB服务器的情况下将伪造的SMB服务器绑定到端口445。关闭服务器只能由管理员完成,这破坏了该漏洞利用技巧的大部分意义。通过将客户端端口更改为当前未使用的端口,我们可以通过伪造的SMB服务器打开文件,并在本地执行延迟,而无需使用Cloud Filter API。幸运的是,这仍然不允许该技术在沙箱中工作。
请注意,管理员可以通过组策略禁用此功能,但默认情况下它是启用的,非企业用户不太可能更改此设置。我个人认为默认启用是一个错误,将来会给Windows带来问题。
我已经更新了示例伪造SMB服务器,允许您绑定到不同的端口,以便在本地执行攻击。希望有人觉得它有用。