2010-08-10 7 views
8

Le site i travaillé a récemment tenté d'être piraté par le script d'injection SQLPouvez-vous expliquer cette injection SQL?

boys' and 3=8 union 
select 1, 
concat(0x232425,ifnull(`table_name`,0x30),char(9),ifnull(`table_rows`,0x30), char(9),0x252423), 
3,4,5,6,7,8,9 

from `information_schema`.`tables` 

where table_schema=0x62646B3032 limit 44,1 -- And '8'='8 

suite Cette injection retourne le nom de la table mysql. Cela a été signalé par le système de signalement des erreurs sur ce site Web et nous avons réussi à corriger cette partie, mais je ne suis pas en mesure de comprendre ce que signifie l'injection ci-dessus?

Quelqu'un peut-il expliquer cela?

Penuel

+0

Je regarde spécifiquement la signification de l'utilisation comme "0x232425", ifnull ('table_rows', 0x30) etc. dans l'injection ci-dessus. – Penuel

+4

http://xkcd.com/327/ –

Répondre

4

Selon le this concat MySQL()

Renvoie la chaîne qui résulte de concaténer les arguments. Peut avoir un ou plusieurs arguments. Si tous les arguments sont des chaînes non binaires, le résultat est une chaîne non binaire. Si les arguments incluent des chaînes binaires, le résultat est une chaîne binaire. Un argument numérique est converti en son sous forme de chaîne binaire équivalent

Alors 0x232425 est converti en # $%, ce qui est simplement ajouté au début et à la fin du champ nom_table. Peut-être juste pour leur faciliter le retrait des noms de tables plus tard en utilisant Regex.

Plus tard sur le char (9) est équivalent à un onglet que vous pouvez voir here et est juste là pour formater la sortie plus agréable. Le 3, 4, 5, 6, 7, 8, 9 est juste là pour que les colonnes correspondent à la table des garçons sur laquelle ils exécutent l'union.

+1

Merci et bonne explication. – Penuel

6

Ils utilisent une sélection des vues de schémas d'informations dans le serveur mysql:

http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

Ils utilisent des hacks astucieux pour mettre en déroute des techniques simples de prévention d'injection sql.

+0

Bien que vous utilisiez MySQL, les deux bases de données ont des tables information_schema (depuis MySQL 5). – SteveCav

+0

Ceci est MySQL. Notez les backticks. Mais oui, MySQL a aussi une "base de données" information_schema. – cHao

+0

Merci à tous, mais ce que je recherche spécifiquement des valeurs telles que 0x232425 dans la requête. Qu'est-ce que ça fait? – Penuel

3
Cette injection a renvoyé le nom de la table mysql.

Voulez-vous dire que votre site Web affiche le nom de la table lorsque vous lui avez donné cette entrée, ou que la requête renvoie celle-ci lorsqu'elle est exécutée à partir du client mysql? Si cela se voit sur votre site Web, l'attaquant a la possibilité d'injecter beaucoup plus de requêtes nuisibles. Vérifiez vos données.

+0

Il a montré le nom de la table sur notre site Web. Nous avons réalisé le sérieux et nous avons patché cette partie avec des filtres d'entrée.Nous travaillons également sur certains filtres d'entrée globaux, de sorte que même si les programmeurs ne vérifient pas l'entrée, cette entrée sera automatiquement ignorée par l'application, ce qui obligera les programmeurs à vérifier l'entrée. – Penuel