大家好。目前,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
.