Injection SQL et Rewriting
Salut à tous !
Bien réveillé ?
Bon aujourd’hui, je démarre suite à une demande un peu particulière ^^
Un pote qui me tanne pour que je lui donne des infos sur l’exploitation d’injection SQL malgré l’url rewriting …
Tout d’abord dans ce cas bien précis, il est important de bien maîtriser les 2 sujets rewriting et SQL!
Alors j’ai envie de vous mettre quelques idées un peu en vrac pour que vous voyez de quoi on parle (pour ceux à qui SQL et Rewriting parlent chinois …)
Le SQL est un langage permettant de manipuler une base de donnée, supprimer, récupérer, modifier, ajouter des données …
Alors voilà à quoi une requête peu ressembler :
SELECT login,password FROM users where id=1 limit 1
Le principe de l’injection SQL est donc de modifier ces requêtes via les variables mise à notre disposition par le développeur d’un site ou d’une application.
Admettons, par exemple que vous soyez sur un article dans un site dont l’url ressemble un à ça :
http://blog-de-fou.com/article.php?id=1
On est en droit d’imaginer que la requête SQL qui ira chercher l’article ressemblera à ça :
SELECT titre, corps FROM articles WHERE id=' ».$_GET[‘id’]. »‘ limit 1
soit :
SELECT titre, corps FROM articles WHERE id=’1‘ limit 1
Donc … le principe de l’injection est de manipuler cette requête pour faire ce que l’on veut :
http://blog-de-fou.com/article.php?id=1 ‘ union select ….– f
Soit :
SELECT titre, corps FROM articles WHERE id=’1‘ union select …. — f ‘ limit 1
Parlons maintenant un peu de l’url rewriting.
Si vous êtes un peu bilingue dans le fond, vous traduirez ceci par « Réécriture d’url »
L’objectif étant de dire à notre site qu’au lieu de passer par des urls comme ça :
http://blog-de-fou.com/article.php?id=1
Nous utiliserons des urls comme ça :
http://blog-de-fou.com/article-1.html
Et pour parvenir à ce résultat nous définirons un format pour nos urls dans un fichier htaccess.
Ce formatage des urls est déclaré un peu comme ça :
RewriteRule ^article-([0-9]+)\.html$ article.php?id=$1 [L]
Ici on indique donc que toute page « article-(des chiffres).html » sera redirigée vers « article.php?id=(des chiffres) ».
Grosso modo :
Voilà vous avez compris ce qu’était le SQL et les injections SQL, ainsi que l’url Rewriting.
Mais !
Maintenant nous allons rentrer dans le vif du sujet …
L’url rewriting sert pour certain au référencement de leurs sites web…
Il paraîtrait que certains moteurs de recherche n’aimeraient pas trop les sites avec des variables, mais préférerais des pages …
Du coup l’url rewriting fait croire que nous consultons pleins de page, alors qu’en réalité nous consultons la même, mais qui va chercher et affiche des données différentes ^^
L’url rewriting sert également pour sécuriser .. afin qu’un pirate ne connaisse pas les variables à injecter … cf. injection SQL
Du coup le pirate va essayer de faire des trucs comme ça :
http://blog-de-fou.com/article-1′ union select …. — f.html
Ce qui dans notre cas, ne servira à rien …
De la même manière qu’il est possible de se prémunir contre des injections SQL, il est possible de sécuriser son url rewriting …
Je vous détaillais un peu plus haut, un format sécurisant :
RewriteRule ^article-([0-9]+)\.html$ article.php?id=$1 [L]
Qui ne prend en compte qu’une variable numérique … donc dès lors que le pirate ajoute son injection avec des :
‘ union select …
ou
union select …
La variable devient alphanumérique voir plus si il ajoute des caractères spéciaux …
Le fichier article.php ne sera alors pas chargé ..
Cependant il est possible de faire des injections malgré le rewriting quand le développeur du site a … clairement la flemme de se prendre la tête … et fait une mauvaise configuration.
Par exemple :
RewriteRule ^article-(.*?)\.html$ article.php?id=$1 [L]
Cet exemple là, prend tout en compte, chiffres, lettres, caractères spéciaux, … sans limite de taille … vous pouvez donc faire une injection de 15 km si ça vous chante … (même si le serveur vous dira fuck au bout d’un certains temps…)
Mais bon ce genre de cas, par expérience, tombe relativement rarement …
Donc la seule manière possible d’exploiter l’url rewriting, reste les Googles Dorks …
Un développeur qui aurait mis son site en place quelques temps, avant de passer à la réécriture d’url, aura permit aux moteurs de recherches de connaitre les vielles urls …
Vous pourrez donc chercher sur Google :
inurl:blog-de-fou.com + .php? + id=
Google qui aura référencé il y a un certain temps, votre vielle url, vous retournera …
http://blog-de-fou.com/article.php?id=1
Et voilà, j’espère que cette article vous sera utile ^^