正在尝试定位 sql 注入源

Trying to locate sql injection source

我的站点受到了 sql 注入攻击,我正在尝试定位注入源..

正在发送的查询是这样的:

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

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

我该怎么做才能找出它的来源,我想可能是我的登录页面,但我的登录页面在任何查询中都无法访问设置 table。

如有任何帮助,我们将不胜感激。

你的 SELECT 出了点问题;第二个 ' 之后的一切都不好。

你可能有这样的东西PHP例子:

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

(这个概念在其他语言中是相同的,但你没有说你使用的是哪种语言。)

利用这个很容易;只需在 user 表单字段中传递带有 ' 的内容。在您的示例中,攻击者使用 timing attack 查看用户名 x 是否存在。然后他们使用 # 将行的其余部分变成注释,避免最后的 '.

出现语法错误

为防止这种情况,请使用准备好的语句。您也会想阅读 OWASP SQL Injection Prevention Cheat Sheet

如果登录页面未使用设置 table,则无关紧要,例如:

有人没有输入电子邮件,而是在输入中输入了这个 -

 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 和准备好的语句。