某CMS不顺畅的XXE漏洞

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

内容简介: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原创奖励计划,未经许可禁止转载


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

查看所有标签

猜你喜欢:

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

JavaScript语言精粹

JavaScript语言精粹

Douglas Crockford / 赵泽欣、鄢学鹍 / 电子工业出版社 / 2009-4 / 35.00元

本书通过对JavaScript语言的分析,甄别出好的和坏的特性,从而提取出相对这门语言的整体而言具有更好的可靠性、可读性和可维护性的JavaScript的子集,以便你能用它创建真正可扩展的和高效的代码。 雅虎资深JavaScript架构师Douglas Crockford倾力之作。 向读者介绍如何运用JavaScript创建真正可扩展的和高效的代码。一起来看看 《JavaScript语言精粹》 这本书的介绍吧!

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

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换