【发布时间】:2021-04-05 18:34:24
【问题描述】:
我正在学习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提交到urlhttp://127.0.0.1/sqli-labs/Less-15/时,响应延迟了大约13.18秒,预计3秒。为什么会这样? - 据我所知,当
and之前的条件为真时,会执行and之后的语句。在发布数据uname=1' and sleep(3)%23&password=2之后,结果如预期一样立即返回。但是当我使用sqlmap进行测试时这个url,我发现sqlmap的payload是这样的:uname=1' and (SELECT * FROM (SELECT(SLEEP(2)))IkiC)%23&passwd=2,并且sleep函数被正确执行了。那为什么会出现这种情况呢?(这不是users表中的unname 1。)
【问题讨论】:
-
需要更多数据。
sleep(13)是延迟 23 秒还是其他什么? -
sqli-labs 网站:github.com/Audi-1/sqli-labs
-
我在mysql前面执行了sql语句
select * from users where username=1 or sleep(13) and password=1 limit 0,1;,但是查询很久后无法返回,状态栏一直显示“Execute Query...”。 -
等了2点49分,结果返回了,一头雾水。 :-( @tadman
-
也许我部分找到了第一个问题的答案。在用户表中,有14条记录。我在mysql前面重新运行了sql
select * from users where username=1 or sleep(3) and password=1 limit 0,1;,花了39秒。(14 * 3 =预计 42 秒。)所以也许答案是 sql 语句 select 被执行了 13 次。但为什么不是 14 次呢?如果我删除 12 条记录并在表中保留 2 条,则执行时间将是预期的 6 秒。
标签: php mysql sql-injection sqlmap