我的网站遭到sql注入攻击,我试图找到注射源......
发送的查询是:
SELECT *
FROM settings
WHERE user = 'x'
XOR SLEEP( 15 )
LIMIT 1 #'
我是注射新手,但我认为他们正在标记我的一个查询的结尾?
我可以做些什么来找出它的来源,我想也许这是我的登录页面,但我的登录页面在任何查询中都没有访问设置表。
非常感谢提供的任何帮助。
答案 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和预备语句。