Le Directory Traversal
Définition
Le directory traversal (parfois appellé directory transversal) n'est pas réellement une faille spéciale mais une technique
de navigation qui peut souvent être exploitée (souvent spécifique des langages et du serveur Web). En fait, on se sert des liens symboliques . et .. qui
signifient respectivement "le dossier où je me trouve" et "le dossier parent de celui où je me trouve". Le but est
d'écrire des URLs utilisant cette technique de navigation et ainsi accéder
à du contenu inaccessible autrement, voire protégé. Puisque il n'y a pas d'exploitation particulière liée à cette
technique, nous ne pouvons pousser la théorie plus loin. En réalité, l'exploitation de cette technique intervient
souvent dans l'exploitation d'autres failles. Nous allons cependant vous clarifier cette technique dans un exemple
typique, les scripts de lecture de données prédéfinies (articles, images, etc..) qui peut facilement être détourné.
Un petit exemple
Nous avons repris l'exemple précédent de la faille de type injection SQL. Nous imaginons que le webmaster, s'étant aperçu
de sa bourde, a décidé de tout simplement changer son système de protection : il utilise désormait les fichiers .ht*
qui lui permettent de sécuriser parfaitement son site par mot de passe :
Intéressons nous maintenant à la page principale du site, composée pour l'instant de seulement deux pages : index.php, l'index du site,
apparemment destiné à contenir des articles, et bienvenue.txt, le premier et pour l'instant unique article :
<!-- index.php - Bases Hacking News -->
<html>
<head>
<div align="center"><h1>Serious Hacking News !</h1></div>
<title>Exploitation d'un directory transversal</title>
</head>
<body>
<?
if (@$_GET["article"] && file_exists("./".$_GET["article"]))
echo file_get_contents("./".$_GET["article"]);
else echo "Veuillez sélectionner un article dans la liste ci-desous :<br><ul><li><a href=\"./?article=bienvenue.txt\">Bienvenue</a></li></ul>";
?>
</body>
</html>
<!-- Maintenant, bienvenue.txt -->
Nous vous souhaitons la bienvenue sur notre site ! Ce système de news
est actuellement en construction, mais nous allons bientôt vous
présenter tout plein d'articles plus instructifs les uns ques les autres
!
Et maintenant, puisque le .htaccess est toujours à la racine des dossiers protégés, on peut essayer d'afficher en
demandant l'article ../admin/.htaccess :
Nous avons donc maintenant le positionnement du .htpasswd, fichier des mots de passe, essayons donc l'article
../admin/doss_mdp/.htpasswd et observons :
Comme prévu, le contenu du fichier ayant les mots de passes nous est révélé.
Cet exemple illustre comment grâce au directory transversal nous avons pu afficher des fichiers qui sont en théorie inaccessibles
(par défaut apache interdit d'afficher toutes les pages .ht*), ici nous demandons donc de lire le fichier en local, et ensuite
de l'afficher à l'écran.
On imagine ce qui aurait pu se passer quand, comme dans certains sites, il est possible de poster ses propres articles,
qui sont écrits dans un fichier du serveur avec comme nom de fichier le sujet de l'article. Il suffit alors de le nommer par exemple
../index.html pour "defacer" le site. Ceci dit, les CMS s'étant démocratisés, les vulnérabilités
aussi graves deviennent de plus en plus rares (actuellement, on les voit surtout sur du développement spécifique).
Le dirctory traversal n'est pas une vulnérabilité exposant le système ou le client comme les includes ou les failles XSS
mais elle permet une exploitation plus aisée d'autres vulnérabilités. Un court article de recommandations
de programmation Web sécurisée vous donnera plus
d'informations sur les bonnes pratiques permettant d'éviter ce genre de failles.