XML外部实体(注入) 攻击者利用xml的性质可以获取本地/远程文件内容 (不同于其他语言 PHP中xml实体可以使用PHP伪协议)

XXE

XML外部实体是XML的一个特性 XML可以使用外部实体引用来包含和解析其他文档

当然XML还有其他实体 详细内容可以参考这个DTD教程

这里就不详细将利用技巧了

审计时如果发现使用了文末列表的函数 就要检查是否禁用了外部实体

libxml_disable_entity_loader(true); //禁用外部实体使用到的函数 参数为true时禁用

注意: php环境中libxml 版本>=2.9.0时外部实体默认禁用 (PHP版本 >=8.0时 就开始使用>=2.9.0版本的libxml libxml_disable_entity_loader函数被完全废弃 使用该函数会抛出错误)

漏洞常见处: 支付等回调api

函数 描述
DOMDocument::
loadXML
加载解析XML <?php $xml=file_get_contents(‘php://input’);
$dom=new DOMDocument(); $dom->loadXML($xml); $xml=simplexml_import_dom($dom); $xxe=$xml->xxe; echo $xxe; ?>
simplexml_load_string 加载解析XML字符串 $xml=simplexml_load_string($_REQUEST[‘xml’]); print_r($xml);
simplexml_load_file 读取文件作为XML文档解析 simplexml_load_file(“1.xml”)