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 ^^
Merci pour les information , j’au eux ma reponse grace a votre article
Content d’avoir pu t’aider ;)
Bonjour,
j’ai une petite question, lors d’un url rewrinting, est qu’en mettant (.*) cela laisse une faille pour les injection ?
C’est pas hyper sécure, ça laisse à l’utilisateur, la possibilité d’y mettre des caractères spéciaux & potentiellement de réaliser certains types d’attaques, dont, entre autres, les injections sql ;)
genre :
/page-(.*)\.html index.php?p=$1
hop un hacker peut se tenter un :
site.com/page- » union select … — f.html
ou
site.com/page-« >
BOuuuuu !
.html
merci pour votre article tres impretionant!
Uploader un fichier