渗透系列之mysql时间盲注
学习思路点:
如何判断时间盲注
- 时间盲注函数介绍
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、漏洞点分析
某查询功能
使用bp抓包,正常查询如下
lastTime参数使用单引号测试,无结果返回
lastTime参数使用两个单引号闭合语句测试,有结果返回。
正常使用以下payload进行盲注
‘||1/1||’,正常返回,返回结果Content-Length:为846,时间为28秒
‘||1/0||’, 返回结果Content-Length:为846,时间为23秒
根据两个结果对比,目前无法使用基于布尔的盲注进行注入,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爆破用户名,结果如下:
其他东西也是使用相同手法跑,写个脚本即可。