[英]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.