XXE-知识点
XXE
原理
XXE(XML External Entity Injection) 全称为 XML 外部实体注入 如果使用的php中libxml低于2.9.1,或设置了libxml_disable_entity_loader(FALSE),就会造成XXE漏洞
危害和方法
当允许引用外部实体时,可通过构造恶意的XML内容,导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等后果。一般的XXE攻击,只有在服务器有回显或者报错的基础上才能使用XXE漏洞来读取服务器端文件,但是也可以通过Blind XXE的方式实现攻击。
XML相关
- DTD:document type definition
- 实体:
- 内部实体:定义方法
<!ENTITY xxe "test" >
- 外部实体:定义方法
<!ENTITY xxe SYSTEM "file:///c:/test.dtd" >
- 通用实体:用
&实体名;
引用的实体,他在DTD 中定义,在 XML 文档中引用 - 参数实体:使用
% 实体名
在 DTD 中定义,并且只能在 DTD 中使用%实体名;
引用
1.只有在 DTD 文件中,参数实体的声明才能引用其他实体
2.和通用实体一样,参数实体也可以外部引用
3.定义:<!ENTITY % remote-dtd SYSTEM "http://somewhere.example.org/remote.dtd">
- 内部实体:定义方法
XXE 利用
- 读取本地文件:
有回显:可以使用
<![CDATA[XXX]]>
来包裹含特殊字符的文本防止乱码无回显:采用发起请求的方式外带数据
test.dtd
1 |
|
payload:
1 |
|
- HTTP内网主机探测
- 文件上传:jar:{url}!{path}
- RCE:PHP 如果安装了这个expect 扩展我们就能直接利用 XXE 进行 RCE
如何防御:
- 在PHP中:libxml_disable_entity_loader(true);
- 在java中:
1 |
|
1 |
|
- 黑名单过滤关键词
XXE-知识点
https://coutcin-xw.github.io/2022/04/23/XXE-知识点/