PrintNightmare打域控漏洞的一次艰难利用
本文由
创作,已纳入「FreeBuf原创奖励计划」,未授权禁止转载
一、前言
PrintNightmare这个打域控的漏洞利用中遇到很多坑,从dll加载失败,再到权限校验失败一步一步debug深入分析解决。虽然坑多,但是毕竟能够打域。
二、本地测试
通过使用管理员账号测试远程加载dll发现失败了,但是确实发现系统上dll上传了
于是再将dll指向本地,发现了如下报错。
三、为什么加载dll失败了
然后使用Promonitor进行监控,到底怎么报了其他程序占用dll文件,从而导致文件无法被加载的问题。
问题就出现在这个调用栈,
于是windbg进行直接附加
通过u命令反汇编对应的字节码,寻找到上一个call,bp下断点。
u 0x7ffdee15092b-10 0x7ffdee15092b+10
打断点捕获到MoveFileExW函数在移动C:\Windows\System32\spool\drivers\x64\3\x643.dll,
https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-movefileexw
然后rax返回0,表示失败了。
通过查询资料得知,MoveFileExW移动文件的的要求:
一个文件在打开时使用了 FILE_SHARE_DELETE 标志,MoveFileExW 函数可以移动或重命名该文件,即使文件已经被另一个进程打开。
四、spoolsv.exe如何加载dll的?
通过procmonitor发现在前面确实已经对C:\Windows\System32\spool\drivers\x64\3\x643.dll进行了CreateFile了,而且重复CreateFile,我们来看下是如何打开文件的?
还是同样直接下断点打开
发现CreateFile第三个参数的值为1,也就是dwShareMode为1,是以共享读方式FILE_SHARE_REA
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐