L'URL (Uniform Resource Locator) d'une application web est le vecteur permettant d'indiquer la ressource demandée. Il s'agit d'une chaîne de caractères ASCII imprimables qui se décompose en cinq parties :
Une URL possède la structure suivante :
| Protocole | Mot de passe (facultatif) | Nom du serveur | Port (facultatif si 80) |
Chemin |
| http:// | user:password@ | www.commentcamarche.net | :80 | /glossair/glossair.php3 |
L'URL peut permettre de transmettre des paramètres au serveur en faisant suivre le nom de fichier par un point d'interrogation, puis de données au format ASCII. Une URL est ainsi une chaîne de caractères selon le format suivant :
http://www.commentcamarche.net/forum/index.php3?cat=1&page=2
En manipulant certaines parties d'une URL, un pirate peut amener un serveur web à délivrer des pages web auxquelles il n'est pas censé avoir accès.
En effet, sur les sites web dynamiques les paramètres sont la plupart passés au travers de l'URL de la manière suivante :
http://cible/forum/index.php3?cat=2
Les données présentes dans l'URL sont créées automatiquement par le site et lors d'une navigation normale un utilisateur ne fait que cliquer sur les liens proposés par le site web. Ainsi, si un utilisateur modifie manuellement le paramètre, il peut essayer différentes valeurs, par exemple :
http://cible/forum/index.php3?cat=6
Si le concepteur n'a pas anticipé cette éventualité, le pirate peut éventuellement obtenir un accès à un espace normalement protégé.
Par ailleurs, le pirate peut amener le site à traiter un cas inattendu, par exemple :
http://cible/forum/index.php3?cat=***********Dans le cas ci-dessus, si le concepteur du site n'a pas prévu le cas où la donnée n'est pas un chiffre, le site peut entrer dans un état non prévu et révéler des informations dans un message d'erreur.
Un pirate peut éventuellement tester des répertoires et des extensions de fichier à l'aveugle, afin de trouver des informations importantes. Voici quelques exemples classiques :
http://cible/admin/ http://cible/admin.cgi
http://cible/phpinfo.php3
http://cible/index.php3.bak
http://cible/.bash_history http://cible/.htaccess
Les attaques dites « de traversement de répertoires » (en anglais directory traversal ou path traversal) consistent à modifier le chemin de l'arborescence dans l'URL afin de forcer le serveur à accéder à des sections du site non autorisées.
Dans un cas classique, l'utilisateur peut être amené à remonter progressivement l'arborescence, notamment dans le cas où la ressource n'est pas accessible, par exemple :
http://cible/base/test/ascii.php3 http://cible/base/test/ http://cible/base/
Sur les serveurs vulnérables, il suffit de remonter le chemin avec plusieurs chaînes du type « ../ » :
http://cible/../../../../repertoire/fichier
Des attaques plus évoluées consistent à encoder certains caractères :
http://cible/..%2F..%2F..%2Frepertoire/fichier
http://cible/..%u2216..%u2216repertoire/fichier
De nombreux sites dynamiques passent le nom des pages à afficher en paramètre sous une forme proche de la suivante :
http://cible/cgi-bin/script.cgi?url=index.htm
Pour peu qu'aucun contrôle ne soit réalisé, il est possible pour un pirate de modifier l'URL manuellement afin de demander l'accès à une ressource du site auquel il n'a pas accès directement, par exemple :
http://cible/cgi-bin/script.cgi?url=script.cgi
Afin de sécuriser un serveur web contre les attaques par manipulation d'URL, il est nécessaire d'effectuer une veille sur les vulnérabilités et d'appliquer régulièrement les correctifs fournis par l'éditeur du serveur web.
Par ailleurs, une configuration minutieuse du serveur web permet d'éviter à un utilisateur de naviguer sur des pages auxquelles il n'est pas censé avoir accès. Le serveur web doit ainsi être configuré en suivant les consignes suivantes :
Combien cela coûte-t-il au total ? Quelles aides apportent l'état et les acteurs du marché pour alléger cette charge non choisie ? Tous les détails sur Commentçamarche.net.