[15]-SQL注入之时间盲注
一、时间盲注
1.定义
- 物理反馈
- 注入特定语句
- 通过物理反馈(如时间)判断注入是否成功
- 适用场景
- 无回显
2.原理示意
载荷构造
原始语句如下,?
是需要用户输入的:select * from user where id = '?'
构造载荷即在
?
处构造,如:select * from user where id = '1' and sleep(2) # '
这里构造的
?
为1' and sleep(2) #
,这样,当user表中存在id=1的用户时,就会执行sleep(2)
,休眠2秒。注意
- 这里的
sleep()
函数为mysql自带函数。- 执行
sleep()
函数后,等待睡眠时间结束才会返回给前端响应。
3.时间盲注常用函数
substr(a, b, c)
从a字符串的第b位开始截c个字符count()
返回符合指定条件的行数ascii()
返回特定字符的 ASCII 值length()
left(a, b)
sleep(n)
- 其他函数
找数据库官网的reference学习,挖掘可以利用的函数。
二、时间盲注应用
1.靶场环境
bwapp
low
SQL Injection - Blind - Time-Based
2.盲注实战
正常访问,分析注入方式
正常访问,无回显,报错注入、布尔盲注等均无法获得反馈,因此可以尝试时间盲注。
判断时间盲注是否存在
利用sleep()
函数和or
的方式判断是否存在注入漏洞# 1.可执行的payload,注意字符型,要单引号闭合;注释符号--后面有空格;or而不是and http://192.168.20.130/sqli_15.php?title=t' or sleep(5) -- &action=search # 2.采用#号注释无法执行 http://192.168.20.130/sqli_15.php?title=t' or sleep(5) # &action=search # 3.询问师傅,师傅猜测#号可能被转义,使用%23尝试,发现能够触发延时
不断调整payload,实现盲注效果。
尝试手工利用时间盲注----
length()
函数使用
例:判断数据库长度,思路如下:
利用and
逻辑连接的特性,只要有一个不为true
则整个sql语句无法被执行,因此可以在sleep()
函数前加入判断语句即可。注意这里需要已知一个电影名称,World War Z
。http://192.168.20.130/sqli_15.php?title=World War Z' and sleep(2)-- &action=search
关于这里电影名称的获取方式,老师提供可使用
' or 1=1 #
获取,即通过前几篇文章攻击拿到一个电影名称。
采取一定的策略,快速判断数据库长度,得到长度为5,payload如下http://192.168.20.130/sqli_15.php?title=World War Z' and length(database())=5 and sleep(3)-- &action=search
进一步获取信息----
substr(a,b,c)
函数使用
至此,我们已经获取到了数据库长度,通过上述获取思路,同样可以尝试利用其他mysql函数获取数据库内详细信息。
构造payload:http://192.168.20.130/sqli_15.php?title=World War Z' and substr(database(),1,1)='b' and sleep(3)-- &action=search
本段payload,利用
substr()
函数截取了数据库名称的第1位(从第1位开始截取1个),并判断改位是否为字符b,如果是,则会执行sleep()
函数,若否则不会。
因此,通过返回时间可以一个一个的判断出数据库的表名。
ASCII()
利用依据该函数的功能,结合ascii表可知,该函数需要结合ascii表使用,我们可以改造4中payload为:
http://192.168.20.130/sqli_15.php?title=World War Z' and ascii(substr(database(),1,1))=98 and sleep(3)-- &action=search
这里之所以是
98
因为,b
字符对应的ascii为98之所以介绍该函数,为下一步编写自动化脚本铺垫。
自动化脚本编写、利用
课程源码:https://github.com/geektime-geekbang/WebSecurity/blob/master/Chapter_2_code/sqlInjection-time_py3.py
request.session()
:http://t.csdn.cn/MYCizpython格式化,占位符:http://t.csdn.cn/XNe4M
3.课后作业
- 描述
- 完善自动化脚本,以获得登录用户名和密码
- 源码
- 思路
- 代码
4.总结
- 技能
- 时间盲注原理
- 时间盲注利用方式
- python自动化脚本撰写
- 思路
- 无回显处理
- 字符型判断
- 注释符号切换
- 自动化及脚本撰写代替手工
- 漏洞挖掘思路,系统/语言自身函数为我所用,官方的reference就是最好的东西。
- 收获
- 要多尝试,不断的尝试,漏洞是试出来的
- 勇敢者游戏,坚持总会挖出漏洞
- 渗透从不是独立于开发的,渗透的基础在于对目标系统的熟练程度、逻辑思维的缜密程度
本文来自博客园,作者:缪白(Miubai),转载请注明原文链接:https://www.cnblogs.com/Miubai-blog/articles/17265745.html