Chemin System Path inscriptible +Dll Hijacking Privesc
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Introduction
Si vous trouvez que vous pouvez écrire dans un dossier du System Path (notez que cela ne fonctionnera pas si vous pouvez écrire dans un dossier du User Path), il est possible que vous puissiez escalader les privilèges sur le système.
Pour cela vous pouvez abuser d’un Dll Hijacking où vous allez détourner une bibliothèque chargée par un service ou un processus ayant plus de privilèges que vous. Et comme ce service charge une Dll qui n’existe probablement même pas sur le système, il va tenter de la charger depuis le System Path où vous pouvez écrire.
Pour plus d’informations sur ce qu’est Dll Hijackig, consultez :
Privesc avec Dll Hijacking
Trouver une Dll manquante
La première chose dont vous avez besoin est d’identifier un processus s’exécutant avec plus de privilèges que vous et qui tente de charger une Dll depuis le System Path dans lequel vous pouvez écrire.
Le problème dans ce cas est que ces processus tournent probablement déjà. Pour trouver quelles Dlls manquent, vous devez lancer procmon le plus tôt possible (avant que les processus ne soient chargés). Donc, pour trouver les .dll manquantes, faites :
- Créez le dossier
C:\privesc_hijackinget ajoutez le cheminC:\privesc_hijackingà la variable d’environnement System Path. Vous pouvez le faire manuellement ou avec PS:
# Set the folder path to create and check events for
$folderPath = "C:\privesc_hijacking"
# Create the folder if it does not exist
if (!(Test-Path $folderPath -PathType Container)) {
New-Item -ItemType Directory -Path $folderPath | Out-Null
}
# Set the folder path in the System environment variable PATH
$envPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
if ($envPath -notlike "*$folderPath*") {
$newPath = "$envPath;$folderPath"
[Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine")
}
- Lancez
procmonet allez dansOptions–>Enable boot loggingpuis appuyez surOKdans l’invite. - Ensuite, redémarrez.
- Quand l’ordinateur a redémarré
procmoncommencera à enregistrer les événements dès que possible. - Une fois Windows démarré, exécutez
procmonà nouveau ; il vous indiquera qu’il a été en cours d’exécution et vous demandera si vous voulez enregistrer les événements dans un fichier. Dites yes et enregistrez les événements dans un fichier. - Après que le fichier est généré, fermez la fenêtre
procmonouverte et ouvrez le fichier d’événements. - Ajoutez ces filtres et vous trouverez toutes les DLL que certains processus ont tenté de charger depuis le dossier System Path inscriptible :
.png)
DLLs manquantes
En exécutant cela sur une machine Windows 11 virtuelle (vmware) gratuite j’ai obtenu ces résultats :
.png)
Dans ce cas les .exe sont inutiles, ignorez-les ; les DLL manquantes provenaient de :
| Service | Dll | Ligne CMD |
|---|---|---|
| Task Scheduler (Schedule) | WptsExtensions.dll | C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule |
| Diagnostic Policy Service (DPS) | Unknown.DLL | C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS |
| ??? | SharedRes.dll | C:\Windows\system32\svchost.exe -k UnistackSvcGroup |
Après avoir trouvé cela, je suis tombé sur ce billet de blog intéressant qui explique aussi comment abuse WptsExtensions.dll for privesc. C’est ce que nous allons faire maintenant.
Exploitation
Ainsi, pour escalader les privilèges nous allons détourner la librairie WptsExtensions.dll. Ayant le chemin et le nom il nous suffit de générer la DLL malveillante.
Vous pouvez try to use any of these examples. Vous pourriez exécuter des payloads tels que : obtenir un rev shell, ajouter un utilisateur, exécuter un beacon…
Warning
Notez que tous les services ne sont pas exécutés avec
NT AUTHORITY\SYSTEM; certains s’exécutent aussi avecNT AUTHORITY\LOCAL SERVICEqui a moins de privilèges et vous ne pourrez pas créer un nouvel utilisateur en abusant de ses permissions.
Cependant, cet utilisateur possède le privilègeseImpersonate, vous pouvez donc utiliser la potato suite to escalate privileges. Donc, dans ce cas un rev shell est une meilleure option que d’essayer de créer un utilisateur.
Au moment de la rédaction, le service Task Scheduler s’exécute avec Nt AUTHORITY\SYSTEM.
Après avoir généré la DLL malveillante (dans mon cas j’ai utilisé un x64 rev shell et j’ai obtenu une shell en retour mais defender l’a tuée car elle venait de msfvenom), enregistrez-la dans le System Path inscriptible sous le nom WptsExtensions.dll et redémarrez l’ordinateur (ou redémarrez le service ou faites ce qu’il faut pour relancer le service/programme affecté).
Quand le service redémarre, la dll devrait être chargée et exécutée (vous pouvez réutiliser l’astuce procmon pour vérifier si la librairie a été chargée comme prévu).
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
HackTricks

