LMXCMS 任意文件删除到重装系统 getshell 组合拳学习
字数 1045 2025-08-29 08:30:24
LMXCMS 任意文件删除到重装系统 getshell 组合拳教学文档
漏洞概述
本教学文档详细分析LMXCMS系统中存在的安全漏洞组合,通过三个步骤实现从任意文件删除到最终获取系统shell权限的攻击链:
- 任意文件删除漏洞
- 重装系统限制突破
- 配置文件写入导致命令执行
环境搭建要求
- PHP版本:必须低于5.6(建议尽可能调低PHP版本)
- 安装目录:
/install和/c/install(安装完成后必须删除) - 安装完成后需在后台首页删除安装目录
漏洞详细分析
第一步:任意文件删除漏洞
漏洞位置:后台数据备份恢复功能
漏洞分析:
- 后台提供数据备份和恢复功能
- 在恢复数据部分存在文件删除操作
- 代码直接获取文件名参数,未进行目录限制检查
攻击步骤:
- 构造恶意文件名参数,利用目录穿越技术
- 示例payload:
../../install/install.lock(删除安装锁定文件)
关键代码:
// 直接获取文件名并删除,无目录限制
$filename = $_GET['filename'];
unlink($filename);
第二步:突破重装系统限制
漏洞原理:
- 系统通过
install.lock文件判断是否已安装 - 删除该文件后可绕过安装限制
代码分析:
- 每次访问安装界面会调用构造函数
- 构造函数检查
install.lock文件是否存在 - 文件存在则弹出警告阻止再次安装
攻击利用:
- 通过第一步漏洞删除
install.lock文件 - 再次访问安装页面即可重新安装系统
第三步:控制文件内容getshell
漏洞位置:系统安装过程中的配置文件写入
攻击步骤:
- 在安装数据库步骤构造恶意payload
- 注意:数据库名必须以
_结尾(系统限制) - 示例payload:
test';phpinfo();//_
代码分析:
- 定位到
index_4方法中的updateConf方法 - 用户输入未经充分过滤直接写入配置文件
- 写入内容被包含在PHP配置文件中导致代码执行
关键代码:
function updateConf($data) {
$content = "<?php\nreturn ".var_export($data, true).";\n?>";
file_put_contents('config.php', $content);
}
完整攻击链
- 利用后台任意文件删除漏洞删除
install.lock - 重新访问安装页面绕过安装限制
- 在安装过程中构造恶意数据库名
- 恶意代码被写入配置文件
- 访问包含恶意代码的配置文件执行任意命令
防御措施
- 对所有文件操作进行严格的路径检查和过滤
- 安装完成后彻底删除安装目录
- 对写入配置文件的内容进行严格过滤和转义
- 使用最新版本的PHP环境
- 实施最小权限原则,限制Web服务器用户权限
免责声明
本教学文档仅供安全研究和学习使用,任何未经授权的攻击行为都是非法的。使用本文所述技术产生的任何后果由使用者自行承担。