MENU

Phantom DLLs Hijacking

January 9, 2018 • Security

一个老生常谈的话题

缺失DLL的进程

使用Sysinternals进程监控工具的Procmon Filters功能来检查缺失DLL的进程:

procmon-filters.png

process-with-missing-dll.png

别的一些工具:

071316_2200_DLLHijackin2.png

rattler.png

rattler2.png

示例

环境

  • Windows7 x64
  • Windows Server 2008 R2
  • 其余自测

文件

C:\Windows\System32\msfte.dll

利用Windows系统隔几秒就会自动加载的DLL,这个DLL是缺失的,传过去就会自动加载

SearchProtocolHost.exe进程会自动加载msfte.dll,SearchProtocolHost.exe的父进程是SearchIndexer.exe服务名为WSearch

更多

例如:IKEEXT

MetaSploit模块:

exploit/windows/local/ikeext_service

应用

1.MySQL可以导出为这个DLL文件达到提权的目的

2.遇到映射磁盘上3389的情况时,可以直接move msfte.dll \\TSCLIENT\C\windows\system32\msfte.dll达到立即上线的目的

工具利用

MetaSploit

DLL需要自己生成

generating-malicious-dll.png

DLL种植之后服务重启获得Meterpreter session

malicious-dll-renamed-and-planted.png

metasploit-privilege-escalation-via-dll-hijacking.png

PowerSploit

Find-ProcessDLLHijack模块

发现缺少DLL的进程

powersploit-discovery-of-process-with-missing-dlls.png

识别路径

powersploit-dicovery-of-paths-with-weak-permissions.png

写入DLL

powersploit-write-dll.png

问题

UAC

就算是管理员在UAC的情况下也无法在System32目录写入文件

那么,一般服务器上都可能会装一些软件,例如:

  • Python为C:\Python27
  • Perl为C:\Perl64
  • Ruby为C:\Ruby200-x64
  • QT为C:\Qt
  • 等等

这些软件有一个共同点,一般都是默认在C盘根目录另一子目录里安装,而且安装好了以后需要将目录(一般是其下的bin目录)加入Windows环境变量里

再说一点,Windows加载DLL的顺序:

  1. 应用程序所在的路径
  2. Windows SYSTEM目录。通过调用GetSystemDirectory函数可以获取这个目录的路径
  3. 16位系统的目录并没有函数可以获取这个目录的路径,但是它会被查找
  4. Windows目录。通过调用GetWindowsDirectory函数可以获取这个目录的路径
  5. 当前目录
  6. PATH环境变量指定的路径

folder-permissions.png

第六点也就是说,如果我们将DLL放在PATH中的某个目录内,Windows在搜索前5项都搜索不到的情况下,就会加载PATH中的DLL。所以我们没必要将msfte.dll放在System32目录下,有时候只要一个普通权限的用户,只要能写入例如C:\Python27\bin这种PATH目录即可。通过这个技巧可以绕过UAC,甚至提权(前提你的DLL得是以System权限运行)。

Archives QR Code
QR Code for this page
Tipping QR Code