渗透系列之mysql时间盲注

学习思路点:

如何判断时间盲注

 

  1. 时间盲注函数介绍

Mysq里面延时注入需要使用到的函数为sleep()

一般使用以下语句进行注入判断,if(exp1,exp2,exp3) 含义就是:如果exp1为真,那么执行exp2,否则执行exp3

 

简单使用延时注入测试数据库的用户长度,poc为: and if(length(user()>1),1,sleep(5))

exp1= if(length(user()>1 , exp2=1 ,exp3=sleep(5)

 

含义就是:如果用户长度大于1,测试正常返回,无延时

              如果小于1,测试会执行延时操作.根据二分法不断精确其用户长度即可。

2、漏洞点分析

某查询功能

渗透系列之mysql时间盲注

 

使用bp抓包,正常查询如下

渗透系列之mysql时间盲注

 

lastTime参数使用单引号测试,无结果返回

渗透系列之mysql时间盲注

 

lastTime参数使用两个单引号闭合语句测试,有结果返回。

 

正常使用以下payload进行盲注

 

‘||1/1||’,正常返回,返回结果Content-Length:为846,时间为28秒

渗透系列之mysql时间盲注

 

 

‘||1/0||’, 返回结果Content-Length:为846,时间为23秒

 

渗透系列之mysql时间盲注

 

根据两个结果对比,目前无法使用基于布尔的盲注进行注入,payload为’||1/(ascii(substr(user(),1,1))=95)||’;

但是可以看到使用两种方法请求之后,服务器响应时间有差异。

故可以使用基于时间的盲注进行注入,payload为:

‘and if(ascii(substr(user(),1,1))=95,1,sleep(5))   含义就是,如果exp1= ascii(substr(user(),1,1))=95成功,那么执行exp2=1,属于正常查询。

如果exp1= ascii(substr(user(),1,1))=95 错误,那么执行sleep(5) ,页面返回结果会出现延时,具体看bp返回包的右下角的时间参数

 

Bp**用户名,结果如下:

 

渗透系列之mysql时间盲注

渗透系列之mysql时间盲注

 

其他东西也是使用相同手法跑,写个脚本即可。

 

 

相关文章: