DVWA sql注入

时间:2017-03-12 11:43:43

标签: sql sql-injection

我有一个关于注释掉SQL查询的问题。 sql查询的格式为$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
所以我尝试了1' or 1=1; #,我得到了所有用户和密码,但是当我使用--代替#时,我收到语法错误。为什么会这样?
你能解释一下sql在每种情况下是如何形成的吗?
我也注意到1' or 1=1 #也有效。 #符号没有注释掉; ?

1 个答案:

答案 0 :(得分:2)

您可以阅读mysql manual

  

在MySQL中, - (双破折号)注释样式要求第二个破折号后跟至少一个空格或控制字符(例如空格,制表符,换行符等)

仅在输入中添加--时,后面没有空格或控制字符。您的综合查询将如下所示:

SELECT first_name, last_name FROM users WHERE user_id = '1' or 1=1--';

正如您所见,;后面的会立即 ,这会导致语法错误,因为它不被视为评论。

尝试在结尾处放入--(尾随空格)

对于;:在向服务器发出的查询中没有必要。这只是 来分隔不同的语句,但根本不需要单个语句。

mysql命令行客户端不会将该字符发送到服务器,而是将其视为"执行指令"。