一、介绍
行云海CMS(XYHcms)是完全开源的一套CMS内容管理系统,使用简单,轻松建站。
1、企业建站、个人博客、个性网站的首选。系统简洁,高效,易用,一般的开发人员能够使用本系统以最低的成本、最少的人力投入,在最短的时间内架设一个功能齐全、性能优异的网站。
2、基于PHP+Mysql开发的网站内容管理系统,提供了单页模块,文章类模块,产品类模块,图片类模块,下载类模块等。在使用过程中可选择任意模块来建设网站。
3、同时集成电脑版及手机版网站,方便各种终端访问。
4、伪静态一键设置,简单实用。
5、静态缓存设置,缓解服务器压力。
二、环境搭建过程
环境下载搭建
网站源码版本:XYHCMS V3.6(2017-12-04 更新)
程序源码下载:http://www.xyhcms.com/Show/download/id/2/at/0.html
http://10.1.70.246/ldfx/xyhcms/Install/index.php
后台地址
http://10.1.70.246/ldfx/xyhcms/xyhai.php?s=/Login/index
后台界面显示如下
三、3.6版本后台getshell
漏洞成因:代码中使用黑名单过滤<?php却忘记过滤短标签,导致后台系统设置-网站设置处可使用短标签在站点表述处getshell。
PHP默认是开启PHP短标签的,即默认情况下short_open_tag=ON
<?=
,它和<? echo
等价, 从 PHP 5.4.0
起, <?=
是可用的。
也可以用php的其他风格绕过过滤
PHP代码风格:
标准风格:
ASP风格 :<% %>
长风格:<script language='php'></script>
利用文件监控工具可以发现这里的网站设置修改成功后是修改的 /App/Runtime/Data/config/site.php
文件内容
直接访问
http://10.1.70.246/ldfx/xyhcms/App/Runtime/Data/config/site.php
后台还有其他地方可以插入,比如客服QQ,这里可以直接写入一句话木马
四、3.5版本重定向漏洞
这里没有找到3.5
版本的源码,用3.2
的代替,因为两者对于重定向的漏洞点是一样的
漏洞文件位置:/App/Home/Controller/GoController.class.php
第30-46行
public function index()
{
$url = I('url', 0, '');
if (!empty($url)) {
redirect($url);
}
}
public function link()
{
$url = I('url', 0, '');
if (!empty($url)) {
$url = base64_decode($url);
redirect($url);
}
}
这段函数中对提交的url参数进行处理,未经任何验证,只是简单的判断url参数是否为空,然后传到目标函数redirect中执行,导致程序在实现上存在URL重定向漏洞,远程攻击者可通过特制的URL利用该漏洞将用户重定向到任意网站,实施钓鱼攻击
漏洞利用方式一:
通过这种方式,将把用户引导到百度首页
http://10.1.70.246/ldfx/xyhcms3.5/index.php?s=/Home/go/index/url/http:\www.baidu.com
漏洞利用方式二:
将http://www.baidu.com
进行base64
编码,这种攻击方式更隐蔽,用户不易发现,构造链接如下:
http://10.1.70.246/ldfx/xyhcms3.5/index.php?s=/Home/go/link/url/aHR0cDovL3d3dy5iYWlkdS5jb20=
修复建议
理论上讲,url重定向属于CSRF的一种,我们需要对传入的URL做有效性的认证,保证该URL来自于正确的地方,限制的方式同防止csrf一样可以包括:
1、referer
的限制
如果确定传递URL参数进入的来源,我们可以通过该方式实现安全限制,保证该URL的有效性,避免恶意用户自己生成跳转链接
2 、加入有效性验证Token
我们保证所有生成的链接都是来自于我们可信域的,通过在生成的链接里加入用户不可控的Token对生成的链接进行校验,可以避免用户生成自己的恶意链接从而被利用,但是如果功能本身要求比较开放,可能导致有一定的限制。
五、后台任意文件读取漏洞
这个漏洞对于3.6
、3.5
、3.2
都适用(暂时就实验了这几个版本)
漏洞利用
注意:必须要登录网站后台进行利用
数据库配置文件路径:
AppCommonConfdb.php
我们将这段组成相对路径
..\..\..\App\Common\Conf\db.php
然后进行base64编码
Li5cXC4uXFwuLlxcQXBwXFxDb21tb25cXENvbmZcXGRiLnBocA==
最后构造的链接形式如下:
http://10.1.70.246/ldfx/xyhcms3.5/xyhai.php?s=/Templets/edit/fname/Li5cXC4uXFwuLlxcQXBwXFxDb21tb25cXENvbmZcXGRiLnBocA==
通过url访问,成功获取到数据库敏感信息:
有了数据库的账号和密码我们就能进行更进一步的利用了
原文始发于微信公众号(守卫者安全):XYHCMS(行云海CMS)漏洞分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论