试图找到sql注入源

时间:2016-01-27 22:33:21

标签: php mysql sql code-injection

我的网站遭到sql注入攻击,我试图找到注射源......

发送的查询是:

SELECT * 
FROM settings
WHERE user =  'x'
XOR SLEEP( 15 ) 
LIMIT 1 #'

我是注射新手,但我认为他们正在标记我的一个查询的结尾?

我可以做些什么来找出它的来源,我想也许这是我的登录页面,但我的登录页面在任何查询中都没有访问设置表。

非常感谢提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

SELECT的错误;第二个'之后的所有内容都很糟糕。

您可能有类似这样的PHP示例:

$user = $_POST['user'];
$query = "SELECT * FROM settings WHERE user = '$user'";

(其他语言的概念相同,但您没有说出您正在使用的语言。)

利用这一点很容易;只需在'表单字段中传递user的内容即可。在您的示例中,攻击者使用timing attack查看用户名x是否存在。然后,他们使用#将该行的其余部分转换为注释,从而避免在最终'上出现语法错误。

要防止这种情况,请使用预准备语句。您也需要阅读OWASP SQL Injection Prevention Cheat Sheet

答案 1 :(得分:0)

如果登录页面没有使用设置表,则无关紧要,例如:

而不是输入电子邮件,有人将其输入到输入 -

 x'; SELECT * FROM settings WHERE user =  'x' XOR SLEEP( 15 ) LIMIT 1

然后您的登录查询看起来像

SELECT * FROM members WHERE password = 'x' and email ='x'; SELECT * FROM settings WHERE user =  'x' XOR SLEEP( 15 ) LIMIT 1 #';

这两个查询都被解雇了。

几年前我被sql注入了......经验教训。 我现在总是使用pdo和预备语句。