2017-04-22 1 views
-1

je teste un WAF.and je saisis mon SQL dans la console Mysql:Vous avez une erreur dans votre syntaxe SQL; A propos de Mysql injection SQL

select * from test where id='-1' union select table_name,1,1 from/*/*/**/information_schema.tables limit 0,1;  

la syntaxe SQL est correcte, et montrer la nom_table mais si vous entrez dans la syntaxe SQL ci-dessous.

http://localhost/test.php?id=-1' union select table_name,1,1 from/*/*/**/information_schema.tables limit 0,1%23 

dans votre navigateur, vous pouvez voir l'erreur ci-dessous.

You have an error in your SQL syntax;check the manual that corresponds to your MySQL server version for the right syntax to user near **/information_schema.tables limit 0,1# 

et c'est même environnement de test est question version.The pourquoi Mysql Conole peut analysable la syntaxe, mais navigateur non.

donc, Qu'est-ce qui ne va pas et pourquoi l'erreur apparaît seulement dans Brower, mais la console MySQL peut gérer? Comment réparer

+2

À quoi servent tous ces slashs et ces étoiles? Est-ce que vous essayez de créer un commentaire? De plus, UNION ne devrait-il pas passer entre deux instructions select? Pourquoi essayez-vous de mettre fin à la déclaration avec un symbole de hachage? – kojow7

+0

Désolé, la syntaxe de ma console sql est la suivante: select * from test où id = '- 1'union select nom_table, 1,1 from/*/*/**/information_schema.tables limite 0,1; pas de hachage, et le commentaire est de travailler pour contourner le WAF –

+0

Une copie de votre code PHP pourrait être agréable de déchiffrer ce qui se passe. – kojow7

Répondre

0

Tout d'abord, votre clause syndicale au début de l'instruction SQL n'a pas de sens comme UNION doit apparaître entre deux instructions SELECT.

Je suis un peu confus avec ce que votre code essaie de faire, mais l'ouverture/* et la fermeture */indique un commentaire qui est ignoré par l'analyseur SQL. Briser tout ça, tout sur la deuxième ligne ci-dessous sera ignoré et traité comme un commentaire

union select table_name,1,1 from 
    /*/*/ 
**/information_schema.tables limit 0,1# 

Par conséquent, votre troisième ligne avec **/n'a pas de sens.

Il n'est pas clair comment vous testez ceci dans votre navigateur ou si deux parseurs SQL différents sont impliqués. Cependant, ce que fait votre code consiste à fermer un commentaire à l'intérieur d'un commentaire. En d'autres termes, vous avez un commentaire partiellement imbriqué.

De la documentation MySQL 5.7:

« commentaires emboîtés ne sont pas pris en charge (sous certaines conditions, pourraient être autorisés commentaires imbriqués, mais ne sont généralement pas, et les utilisateurs doivent les éviter.). »

MySQL 5.0 documentation dit simplement:

"Les commentaires imbriqués ne sont pas supportés."

Je ne suis pas sûr si c'est juste la formulation qui a changé ici ou si la façon dont les commentaires sont analysés a réellement changé.

+0

Désolé, la partie SELECT me manque. C'est la même version de l'environnement de test. La question est pourquoi Mysql conole peut analyser la syntaxe, mais pas le navigateur. –