你的SQL语法有错误;关于MySQL SQL注入

问题描述:

我测试WAF.and我在MySQL控制台输入我的SQL:你的SQL语法有错误;关于MySQL SQL注入

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

的SQL语法是正确的,并显示表名 但如果你输入下面的SQL语法。

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

在您的浏览器中,您可以看到下面的错误。

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# 

和这是相同的测试环境版本。问题是为什么Mysql conole可以解析语法,但浏览器不是。

那么,什么是错的?并且为什么错误只出现在布劳尔但MySQL的控制台可以处理呢?如何解决这个问题

+2

这些斜线和星星是什么?你想创建评论吗?另外,UNION不应该在两个select语句之间?你为什么试图用散列符号结束语句? – kojow7

+0

对不起,我的sql控制台的语法是:select * from test where id =' - 1'union select table_name,1,1 from/*/*/**/information_schema.tables limit 0,1;没有散​​列,并且评论是绕过WAF的工作 –

+0

您的PHP代码的副本可能很好解释发生了什么。 – kojow7

首先,在你的SQL语句没有意义的开始你的工会条款因为UNION应该出现在两个SELECT语句之间。

我对你的代码试图做什么感到有点困惑,但是打开/ *和关闭* /表示一个被SQL解析器忽略的注释。这打破了,下面第二行的一切都将被忽略,并视为注释

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

因此你有** /无厘头第三行。

这是有点不清楚你是如何在浏览器中测试这个或者是否涉及两个不同的SQL解析器。但是,您的代码正在做的是在评论中关闭评论。换句话说,你有一个部分嵌套的评论。

MySQL 5.7文档:

“嵌套注释不支持(在某些情况下,嵌套的评论可能会被允许的,但通常都没有了,用户应该避免)。”

MySQL的5.0文档简单地说:

“不支持嵌套注释。”

我不确定这是否仅仅是在这里改变的措辞,或者解析评论的方式是否已经发生变化。

+0

对不起,我错过了SELECT部分​​。这是相同的测试环境版本。问题是为什么Mysql conole可以解析语法,但浏览器不是。 –