James Forshaw发现的DiagHub DLL loading技术已经非常有名了 。每当你在windows或一些第三方软件中发现SYSTEM权限的任意文件写漏洞时 , 你就可以用这一招来造成任意代码执行 , 而且不用重启 。不幸的是这种方法在Windows 10 build 1903年被微软禁止 。Andrea Pierini在Twitter上简单地提到了这一点 。在这里 , 我想和大家分享一下我在最新版本的Windows上寻找DLL劫持弱点时发现的另一种加载dll的方法 。
前言在本文的开头 , 我想澄清一下:
这不算是一个漏洞 。正如我们所看到的 , 为了能够使用这个技巧 , 必须先将一个专门制作的DLL植入C:WindowsSystem32文件夹 , 当然只有 “SYSTEM” 权限的用户才能做到这一点 。
写在开始作为出发点 , 我决定寻找一些简单的例子 , 例如在以NT AUTHORITY/System运行的服务中的DLL劫持 。我的想法是监控那些可以被普通用户启动或至少是 “影响 “的服务 。为此 , 我做了一个非常简单的PowerShell脚本 , 每秒钟检查一个服务是否被启动或停止 。
文章插图
在Windows操作系统的后台 , 运行Process Monitor来记录文件系统操作 。我简单地配置了一个过滤器 , 只显示涉及*.dll文件的操作 , 如果找不到的话就返回NAME NOT FOUND错误代码 。然后 , 我试着在没有管理员权限的情况下 , 一次一次地启动所有能启动的服务 。不幸的是 , 我没有用这个方法发现任何东西 。不过我发现了以下内容 。
当 “Process Monitor “在后台运行时 , 它捕捉到一些定期打开 “windowscoredeviceinfo.dll “文件的操作 。频率不一 , 可能每小时发生一次 , 也可能每30分钟发生一次 。事件的属性显示了该进程的命令行 。通过查看事件的属性能够发现这个操作是由命令行”C:WINDOWS/System32/svchost.exe -k utcsvc -p”造成的 。
知道了这一点 , 就可以很容易地通过以下PowerShell命令找到相应的服务 , 例如 。在这种情况下 , 可以用DiagTrack命令 。
注:我也可以使用进程的PID , 例如在任务管理器中查找它 。这种方法的缺点是 , 你不知道它什么时候启动 , 在你检查的时候 , 进程可能并不在运行 。
我们的第一个目标“Process Monitor “中的事件属性显示了一些关于DLL如何被加载的信息 。Stack选项卡显示了导致这次操作的调用列表 。在这里 , 我们可以看到 , 初始调用是从diagtrack.dll进行的 。DiagTrack服务加载了FlightSettings.dll文件 , 它又使用了dcntel.dll中的GetCensusRegistryLocation()方法 , 最后 , 使用标准的LoadLibraryEx()WinApi调用加载了windowscoredeviceinfo.dll 。
文章插图
为了确定我的方向是正确的 , 我在IDA中打开最后一个DLL , 并查找windowscoredeviceinfo.dll的出现 。Strings标签页中能够清楚的找到这个dll的名字 。
注意:你必须配置视图以包含unicode字符串 , 这不是IDA的默认设置…… 。
文章插图
然后 , 我们可以直接到它在.rdata部分的位置 , 寻找Xrefs 。在这种情况下 , 只有一个 。这个字符串确实是在QueryWCOSDeviceInformation()方法中使用的 。好吧 , 说明我们的路线是对的!
文章插图
IDA生成的伪代码非常清晰 。我们发现前面看到的Process Monitor的LoadLibraryEx("windowscoredeviceinfo.dll")调用 。然后 , 如果库被成功加载 , 就会进行下面的调用 。GetProcAddress("QueryDeviceInformation") , 也就是说这个函数应该是windowscoredeviceinfo.dll的导出函数 。
文章插图
我们来总结一下情况 。目前 , 我们知道以下几点 。
- DiagTrack服务定期(每30分钟或每小时)运行一个未知任务 。
- 每次 , 它都会尝试加载一个名为 “windowscoredeviceinfo.dll “的DLL , 而这个DLL默认情况下并不存在 。
推荐阅读
- 英雄联盟特权服务15个皮肤有哪些?
- 哪些高速公路收费站和服务区关闭关停?何时开放?怎样绕行?公示汇总信息在这儿查
- 微服务核心技术——负载均衡
- 超简单本地备份服务器搭建攻略
- 花了17年!微软修复Windows DNS服务器漏洞
- 对DBA、开发、测试、产品同时友好 大规模多存储场景的数据库选型与服务平台建设
- 现代服务业包括哪些行业?
- linux下多线程与并发服务器设计方案及常见问题
- kali linux之应用层Dos
- 服务器|中科院回应停用知网:近千万续订费太贵 将用万方和维普替代