记一次白盒审计解决CTF题目
字数 885 2025-08-23 18:31:18

白盒审计解决CTF题目:CMS后台漏洞分析与利用

漏洞背景

在一次CTF比赛中遇到一个CMS渗透题目,通过www.zip泄露了源代码,需要进行现场代码审计发现漏洞。该漏洞存在于后台系统中,通过在网站设置写入恶意语句并在工具首页生成处重新生成PHP文件来实现攻击。

代码结构分析

首先分析后台路由结构,位于admin/index.php

// 路由参数
$model = $_GET['m'];  // 控制功能点对应的文件
$action = $_GET['c']; // 控制文件中的具体函数

漏洞定位

通过抓包分析,定位到关键文件config.class.php中的save_action()功能:

// config.class.php
public function save_action() {
    $this->model->setConfig($_POST);  // 关键点1:POST数据传入setConfig方法
    $this->cache->index_action();     // 关键点2:触发index_action方法
}

关键点1:setConfig方法分析

config.model.php中:

public function setConfig($data) {
    // 查询admin_config表中name列
    $config = $this->db->select('admin_config', 'name');
    
    $allList = array();
    foreach($config as $v) {
        $allList[] = $v['name'];  // 将现有配置名存入数组
    }
    
    foreach($data as $k => $v) {
        if(in_array($k, $allList)) {
            // 更新存在的配置
            $this->db->update('admin_config', array('value'=>$v), "name='$k'");
        } else {
            // 新增不存在的配置
            $this->db->insert('admin_config', array('name'=>$k, 'value'=>$v));
        }
    }
}

关键点2:index_action方法分析

cache.class.php中:

public function index_action() {
    if(isset($_GET['make_index_url'])) {
        $this->webindex();  // 关键函数调用
    }
}

private function webindex() {
    $path = 'index.php';  // 路径可控点
    $content = $this->template->render('index');  // 模板渲染内容
    
    // 文件写入操作
    file_put_contents($path, $content);
}

漏洞利用链

  1. 通过后台配置功能向admin_config表插入/更新数据
  2. 数据会被模板渲染后写入index.php文件
  3. 通过控制配置值实现任意代码写入

安全限制与绕过

global.php中存在安全过滤:

// 敏感词过滤
$filter_words = array('eval', 'system', 'exec', 'passthru', ...);
// 英文括号转中文括号
$content = str_replace(array('(', ')'), array('(', ')'), $content);

绕过方法:

  • 使用非过滤的函数如assertcreate_function
  • 使用其他PHP特性如反引号执行、include
  • 使用编码或混淆技术绕过关键词检测

完整利用步骤

  1. 访问后台配置页面(如admin/index.php?m=config&c=index
  2. 提交恶意配置数据(POST请求):
    malicious_param=<?php phpinfo(); ?>
    
  3. 触发文件生成(访问admin/index.php?m=cache&c=index&make_index_url=1
  4. 生成的index.php将包含恶意代码
  5. 访问首页执行代码

防御建议

  1. 严格过滤用户输入,特别是配置数据
  2. 限制文件写入的路径和内容
  3. 禁用危险函数
  4. 对模板渲染内容进行安全检查
  5. 使用内容安全策略(CSP)等额外防护措施

总结

该漏洞是一个典型的二次注入+文件写入漏洞,通过:

  1. 不安全的配置存储
  2. 不安全的模板渲染
  3. 不安全的文件写入操作
    三个环节的组合实现了任意代码执行。在代码审计时需要特别关注数据流经的所有环节,特别是从用户输入到敏感操作(如文件操作、数据库操作、命令执行等)的完整路径。
白盒审计解决CTF题目:CMS后台漏洞分析与利用 漏洞背景 在一次CTF比赛中遇到一个CMS渗透题目,通过 www.zip 泄露了源代码,需要进行现场代码审计发现漏洞。该漏洞存在于后台系统中,通过在网站设置写入恶意语句并在工具首页生成处重新生成PHP文件来实现攻击。 代码结构分析 首先分析后台路由结构,位于 admin/index.php : 漏洞定位 通过抓包分析,定位到关键文件 config.class.php 中的 save_action() 功能: 关键点1:setConfig方法分析 在 config.model.php 中: 关键点2:index_ action方法分析 在 cache.class.php 中: 漏洞利用链 通过后台配置功能向 admin_config 表插入/更新数据 数据会被模板渲染后写入 index.php 文件 通过控制配置值实现任意代码写入 安全限制与绕过 在 global.php 中存在安全过滤: 绕过方法: 使用非过滤的函数如 assert 、 create_function 使用其他PHP特性如反引号执行、 include 等 使用编码或混淆技术绕过关键词检测 完整利用步骤 访问后台配置页面(如 admin/index.php?m=config&c=index ) 提交恶意配置数据(POST请求): 触发文件生成(访问 admin/index.php?m=cache&c=index&make_index_url=1 ) 生成的 index.php 将包含恶意代码 访问首页执行代码 防御建议 严格过滤用户输入,特别是配置数据 限制文件写入的路径和内容 禁用危险函数 对模板渲染内容进行安全检查 使用内容安全策略(CSP)等额外防护措施 总结 该漏洞是一个典型的二次注入+文件写入漏洞,通过: 不安全的配置存储 不安全的模板渲染 不安全的文件写入操作 三个环节的组合实现了任意代码执行。在代码审计时需要特别关注数据流经的所有环节,特别是从用户输入到敏感操作(如文件操作、数据库操作、命令执行等)的完整路径。