XXE
XML外部实体(注入) 攻击者利用xml的性质可以获取本地/远程文件内容 (不同于其他语言 PHP中xml实体可以使用PHP伪协议)
最后更新于
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")