union select语句如何输出易受攻击的列

时间:2014-02-10 15:55:46

标签: sql sql-injection

考虑一个SQL易受攻击的网站。

让查询中的列数为3.

声明如此,www.test.com?php.id=-1' union select 1,2,3 --+-

我对这句话的理解是这样的。

  1. 有2个陈述
  2. Union用于加入两个语句。
  3. ( - )用于使第一个语句的值为空。
  4. '用于中断查询并输入第二个语句,--+-用于注释掉语句的其余部分。
  5. 输入此声明后,网站会将2和3显示为易受攻击的列。

    我没有得到的是select语句如何显示易受攻击的列。

1 个答案:

答案 0 :(得分:1)

假设您的后端代码执行了类似的操作:

sql = "SELECT UserId, UserName, Password from Users where UserID = " + id + " AND password = '" + password + "'"

因此,如果用户ID和密码匹配,它只会返回结果。

然后“注入”上面的代码将导致SQL语句

SELECT UserId, UserName, Password from Users 
where UserID = -1 union select 1,2,3 --+- AND password = 'anything'

据推测,用户界面可能会在“用户名”和“密码”字段中显示12,将其标识为“易受攻击”

这是一种用于确定如何在后端代码中构建SQL语句的技术,以便定义真正的SQL注入攻击以检索敏感数据。