DLL欺骗(DLL劫持)

大家好。目前,OTUS已为更新后的逆向工程课程的4月启动开放了一套课程预期课程的开始,我们通常会准备一份有趣的材料的翻译本。




在Windows操作系统中,应用程序和服务在启动时会寻找其正常运行所必需的DLL。如果找不到这些DLL或以不安全的方式实现它们的加载(调用DLL而不使用完整路径),则可以通过强制应用程序下载和执行恶意DLL文件来增加特权。

应该注意的是,当应用程序需要下载DLL时,将按以下顺序进行搜索:

  • 从中下载应用程序的目录
  • C:\ Windows \ System32
  • C:\ Windows \系统
  • C:\ Windows
  • 当前工作目录
  • 用户PATH环境变量中的目录
  • PATH系统环境变量中的目录

步骤1-缺少DLL的进程


第一步是找到在SYSTEM上运行的进程,然后尝试加载丢失的DLL。可以使用Sysinternals Process Monitor通过应用以下列出的过滤器来完成此操作


Procmon过滤器以搜索下载缺少的DLL的

进程Process Monitor将识别应用程序试图加载的缺少的DLL,并显示正在搜索该DLL的实际路径。


缺少DLL的进程

在此示例中,一个进程没有Bginfo.exe几个可用于提升特权的.dll文件。

第2步-文件夹权限


如果软件安装目录C:\,而不是C:\Program Files,则默认情况下身份验证的用户将有此目录的写入权限。另外,通常将诸如Perl,Python,Ruby等的软件添加到PATH变量。这使增加特权成为可能,因为用户可以将恶意DLL写入此目录,该目录将在下次进程启动时加载并获得该进程的权限。


文件夹权限不足

步骤3-替代DLL


使用Metasploit,您可以将有效载荷DLL生成为具有服务特权的会话。


恶意DLL的生成

该进程是Bginfo.exe在SYSTEM下启动的,因此,重新启动之后,恶意DLL将具有相同的特权,因为该进程将加载并执行该DLL。


该进程在SYSTEM下启动,

如上所述,找不到该进程Riched32.dll,因此pentestlab.dll必须将其重命名为Riched32.dll。这会混淆应用程序,并会尝试加载DLL,因为它认为它是合法的DLL。必须将恶意DLL放在Windows在其中寻找DLL文件的文件夹之一中。


重命名并托管了恶意DLL

如下所示,当您使用欺骗性DLL重新启动服务时,将打开具有SYSTEM特权的Meterpreter会话。


Metasploit-通过欺骗DLL升级特权

Powersploit


可以通过PowerSploit完成替换DLL的过程,其中有三个模块可帮助查找缺少DLL的服务,查找具有修改权限的文件夹以及生成DLL。

该模块Find-ProcessDLLHijack将找到系统中试图加载丢失的DLL的所有进程。


PowerSploit-检测缺少DLL

进程下一步是确定用户可以在其中修改内容的文件夹。将在应该抛出恶意DLL的位置找到文件夹。


查找具有修改权限的文件夹

最后一步是在具有“修改(M)”权限的文件夹之一中创建恶意DLL。


在权限弱的文件夹中创建DLL

结论


为了能够通过欺骗性DLL提升特权,必须满足以下条件:

  • 写入系统文件夹的权限
  • 在默认目录以外的目录中安装软件
  • 在SYSTEM下运行并尝试加载缺少的DLL的服务
  • 服务重启

查找未安装的应用程序Program Files并不困难,因为除了不强制沿着此路径安装的第三方应用程序之外,在这些受保护的文件夹之外还有各种自定义软件程序。此外,还有许多Windows服务,例如带有缺少DLL(wlbsctrl.dll)的IKEEXT(IKE和AuthIP IPsec密钥模块),可以手动或自动使用。IKEEXT有一个特殊的Metasploit模块:

exploit/windows/local/ikeext_service



.



All Articles