某CMS不顺畅的XXE漏洞

栏目: 编程语言 · XML · 发布时间: 7年前

内容简介:PHPSHE 商城系统是将商品管理、品牌管理、规格管理、促销管理、优惠券管理、在线购物、订单管理、支付管理、文章管理、会员管理、权限管理、通知管理、咨询评价、数据统计等功能相结合,并提供了简易的操作、实用的功能,快速让用户建立独立个性化的网上商店,为用户提供了一个低成本、高效率的网上商城建设方案。偶然间在看 seebug 平台时,发现了一个叫做 phpshe 的cms 的一个 XXE 漏洞。开发语言为 PHP 因为好久没有在 PHP 上看到 XXE 漏洞了,所以 down 了一份源码下来看了看。结果过程相当

*本文原创作者:sjy93812,本文属FreeBuf原创奖励计划,未经许可禁止转载

CMS 介绍

PHPSHE 商城系统是将商品管理、品牌管理、规格管理、促销管理、优惠券管理、在线购物、订单管理、支付管理、文章管理、会员管理、权限管理、通知管理、咨询评价、数据统计等功能相结合,并提供了简易的操作、实用的功能,快速让用户建立独立个性化的网上商店,为用户提供了一个低成本、高效率的网上商城建设方案。

偶然间在看 seebug 平台时,发现了一个叫做 phpshe 的cms 的一个 XXE 漏洞。开发语言为 PHP 因为好久没有在 PHP 上看到 XXE 漏洞了,所以 down 了一份源码下来看了看。结果过程相当曲折。

某CMS不顺畅的XXE漏洞

开始分析:

因为漏洞详情并没有开放。也没有其他的描述。并且这里的评级是高危。我一开始以为这里应该是无条件的 XXE 漏洞。结果发现并不是这样的。

我在本地安装完成之后,大概看了一下代码。代码并不是很多,既然是 XXE 漏洞,那就好说了。直接找和 xml 有关的代码段分析就好了。

大概翻了几个文件,找到这么一个文件 ihook/wechat.hook.php。这个文件的主要作用先看一下。

某CMS不顺畅的XXE漏洞 看了一下这个文件的内容,就是封装了一堆用于处理 xml 数据的函数。很好,这里肯定会用得到,先记录一下。   

在 PHP 语言中如果存在 XXE 漏洞,我们首先要关注的就是触发漏洞的函数。我们先定位到一个函数上,比如下面的这个函数。

某CMS不顺畅的XXE漏洞 这个函数的作用是很明显的,就是对 xml 数据进行处理。如果你不是针对一个特定的漏洞分析,想发现更多漏洞的话就每个文件都翻阅一下,说不定就会有意外的收获。

我打算看一下这个 CMS 的逻辑就接着往下翻,又找到一个文件 include/plugin/payment/wechat/notify_url.php。

某CMS不顺畅的XXE漏洞

打开看一下,这里调用到了之前我们找到的处理 xml 数据的函数,大概率漏洞就是在这里了。

某CMS不顺畅的XXE漏洞

以这里为入口开始跟进程序。首先跟进这个函数。

某CMS不顺畅的XXE漏洞 这里又调用了另外一个函数,接着往下。好了,这里我们看到一个经常出现漏洞的函数 simplexml,既然用到这个函数,这里就顺带说一下这个函数的作用。simplexml_load_string() 函数就是转换形式良好的 XML 字符串为 SimpleXMLElement 对象。   

某CMS不顺畅的XXE漏洞

再看这段代码,这里从前端接收数据,并且没有做任何处理。那么问题应该就是这里了。然后开始复现漏洞。

开始踩坑

3.1,这里我直接去访问这个路径。

某CMS不顺畅的XXE漏洞 空白什么都没有,正常,我们直接去看数据包。看起来没什么毛病。   

某CMS不顺畅的XXE漏洞

既然问题出在这里,直接扔一个 payload 过来试一试毕竟是高危应该利用起来不会太复杂。

某CMS不顺畅的XXE漏洞 这里构造一个向指定服务器发送 HTTP 请求的 payload。结果很意外,漏洞没有被触发。   

某CMS不顺畅的XXE漏洞

此时心情相当的复杂,返回又看了一眼代码。发现了一个问题,这里对前端传入的数据并不是使用的常见的 GET 或者是 POST 请求。而是使用的 file_get_contents,当使用 file_get_contents(“php://input”) 来获取前端传入的数据时,会对 Content-Type 有一些要求,不能是 multipart/form-data。这些情况下都是不能获取的。我猜想应该是这里的问题,然后更改 Content-Type:    text/xml。依然没有成功。

3.2 成功复现

此时我处在要抓头发的临界点,我又去咨询了一下大佬们,以为是我的 payload 的原因,扔给我了几个在别的地方实测有效的 payload。然后试了一下,依然如此,无法成功的触发漏洞。

某CMS不顺畅的XXE漏洞

就在我要放弃的时候,突然想起来会不会和 PHP 的版本有关系。果然,在我降低了几个 PHP 的版本之后神奇的事情发生了,漏洞触发了。

某CMS不顺畅的XXE漏洞

然后去找了一下原因,这个漏洞主要是因为 simplexml_load_string 这个函数导致的。这个是 PHP 的内置函数。相关的依赖包是 libxml。

某CMS不顺畅的XXE漏洞 在高版本的 PHP 中这个函数的底层对 XXE 进行了修复,但是在低版本的 PHP 中,这个问题依然存在。大概在 libxml2.8 之下的版本。会成功的触发这个漏洞。   

总结

漏洞利用条件:

PHPSHE 1.7 版本

无需登录

XXE 漏洞(libxml <2.9.0)

漏洞修复:对于 XXE 漏洞,可以升级 libxml2 库至 2.9.0 或以上版本,或者在 pe_getxml() 函数中加上 libxml_disable_entity_loader(true)。

*本文原创作者:sjy93812,本文属FreeBuf原创奖励计划,未经许可禁止转载


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python Algorithms

Python Algorithms

Magnus Lie Hetland / Apress / 2010-11-24 / USD 49.99

Python Algorithms explains the Python approach to algorithm analysis and design. Written by Magnus Lie Hetland, author of Beginning Python, this book is sharply focused on classical algorithms, but it......一起来看看 《Python Algorithms》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具