首页 » 漏洞 » 正文

某CMS不顺畅的XXE漏洞-互联网安全-漏洞

发表于: 知之为知 · 2019-4-15 ·  30 views  ·  0 replies 

*本文原创作者:sjy93812,

CMS 介绍

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

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

开始分析:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

开始踩坑

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

空白什么都没有,正常,我们直接去看数据包。看起来没什么毛病。   

空白什么都没有,正常,我们直接去看数据包。看起来没什么毛病。   

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

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

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

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

3.2 成功复现

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

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

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

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

在高版本的 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,

本文链接: http://www.znlrs.cn/3520.html
0 like+
«上一篇: :下一篇»

相关文章

内网穿透Windows(SMB)自认证的利用-互联网安全-漏洞

SMB又名网络文件共享文件,顾名思义其作用是用于用户与服务...

挖洞经验丨看我如何获取Facebook用户的隐私好友列表-互联网安全-漏洞

当拥有个人信息的组织机构发生数据失窃或遭受未授权访问行...

Oracle WebLogic远程命令执行漏洞预警-互联网安全-漏洞

2019年04月17日,国家信息安全漏洞共享平台(CNVD)官方发...

Spring Cloud Config目录遍历漏洞(CVE-2019-3799)预警-互联网安全-漏洞

近日,Spring官方团队在最新的安全更新中披露了一则Spring ...

看我如何揪出远控背后的幕后黑手-互联网安全-漏洞

*本文原创作者:日理万鸡, 0×01 前言 写这篇文章时,...

ThinkPHP 5.1框架结合RCE漏洞的深入分析-互联网安全-漏洞

前言 在前几个月,Thinkphp连续爆发了多个严重漏洞。由于框...

0 thoughts on “某CMS不顺畅的XXE漏洞-互联网安全-漏洞”

  1. 还没有任何评论,你来说两句吧

Leave a reply