繁体   English   中英

SQLi查询说明

[英]SQLi query explanation

我是SQL注入领域的初学者,如果您能帮助我,我很高兴。

场景:易受攻击的Web应用程序。

假设您有一个如下网址:

http://www.site1.com/cms/login.php

还假设为了访问该站点,您必须提供以下凭据:

用户名:foo,密码:bar

因此,上述网址变为:

http://www.site.com/cms/login.php?username=foo&password=bar

如果随后注入有效负载'OR'1'='1它将变为:

 http://www.site.com/cms/login.php?username=foo&password=bar'OR'1'='1

这对我来说已经足够清楚了,但是我担心的是,我被告知相应的SQL查询(由后端RDBMS处理发送的查询)应为:

SELECT userid
FROM CMSUsers
WHERE user = 'foo'AND password = 'bar' OR'1'='1';

该查询是重言式,因为'1'='1'始终为TRUE。

但是有效负载为'OR'1'='1 ,查询的条件语句似乎不同OR'1'='1'; (看一下' ,有效负载中的最后一个1后没有重音符号)

我的怀疑明智吗?

任何帮助将不胜感激。

容易受到这种攻击的应用程序将具有与以下类似的代码来构造SQL查询:

var query = "SELECT userid
FROM CMSUsers
WHERE user = '" + usernameValue + "' AND password = '" + passwordValue + "'";

请注意单引号的位置。 用户将通过passwordValue变量传递的所有内容都将插入到单引号内的该位置。

现在,要执行攻击,您需要及早关闭密码的单引号,以便能够添加始终为真的部分。 您将传递如下内容: bar' OR '1' = '1 请注意:在开头或结尾都没有单引号。 这些来自应用程序中的硬编码查询字符串。

在上面的passwordValue位置插入此值将产生以下结果:

... AND password = 'bar' OR '1' = '1'
<------- A --------><------- B ---->A
  • A :程序中的硬编码内容
  • B :通过passwordValue变量传递的内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM