[英](sql injection)sqli-lab 15:ununderstandable behavior in where clause
我正在学习 sql 注入,并在我的计算机中设置了 sqli-lab 环境(windows+php+mysql 5.5.53)。
我在解决sqli-lab 15的时候遇到了两个问题,本题源码如下:
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
uname=1' or sleep(3)%23&password=2
提交给 url http://127.0.0.1/sqli-labs/Less-15/
秒时,响应延迟了大约 13.18 秒预期。为什么会这样?and
为真时,执行and
之后的语句。在发布数据uname=1' and sleep(3)%23&password=2
后,结果立即按预期返回。但是当我使用sqlmap 来测试这个 url,我发现 sqlmap 的有效载荷是这样的: uname=1' and (SELECT * FROM (SELECT(SLEEP(2)))IkiC)%23&passwd=2
,并且睡眠 function 被执行了。这发生了吗?(这不是用户表中的 unname 1。)我找到了问题2的答案:
SQL 先执行最里面的子查询,再执行下一级。 子查询的结果就是主查询的查询条件。 所以在这种情况下,查询顺序是子查询-> 主查询
答案来自: SQL引擎执行的查询和子查询是按什么顺序执行的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.