Windows Exploitation Tricks: Trapping Virtual Memory Access (2025 Update)

访问原始链接 Google 翻译

作者:James Forshaw,Google Project Zero

早在2021年,我写过一篇博客文章,介绍了在Windows上构建虚拟内存访问陷阱原语的多种方法。其目标是使虚拟内存地址的读取者或写入者暂停相当长(例如1秒或更长时间)的时间,通常是为了利用内核中的TOCTOU内存访问漏洞。

那篇博文中提出的解决方案是映射远程服务器上的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服务器,允许你绑定到不同的端口,以便在本地执行攻击。希望有人觉得它有用。