time-based sql injection

目标:获取数据库名长度,数据库名
1、情况描述,无论输入什么信息都是回复如下,
image
2、猜测sql语句大概为 select * from movies where moviename = '?';
3、构造sql语句判断是否为注入点(判断为注入点)
select * from movies where moviename = '?123' or sleep(1)#如果执行sleep,那么就为注入点
image
4、找到一个准确的moviename,这一步非常重要,sleep()要想作为判断的条件,只能放在最后,这样就是A and B and C的格式了,只有A和B都为真的时候,C才能执行(C才能作为条件),在其他关卡可以找到有个电影的名字为Iron Man,所以构造的sql为Iron Man' and length(database())>3 and sleep(1)#
这里的length(database()) > 3,选择>或者<更有利于缩小范围。最终判断=5的时候sleep(1)生效。
image
5、猜测数据库名称,依次猜测出数据库5位长度的各个字符
Iron Man' and substr(database(),1,1)='a' and sleep(1)#

posted @ 2026-03-20 22:21  SmileXi  阅读(16)  评论(0)    收藏  举报