某CMS代码审计思路分享
字数 1284 2025-08-05 11:39:37

某CMS代码审计思路与实战分析

前言

本文详细分析某CMS系统的代码审计过程,重点讲解从发现漏洞到最终GetShell的完整思路。通过这个案例,我们将学习如何结合白盒与黑盒审计方法,发现并利用CMS系统中的安全漏洞。

工具准备

  1. Vscode

    • 强大的代码搜索功能
    • 转到定义和引用功能
    • 支持正则表达式搜索
  2. Seay源代码审计系统

    • 快速定位危险函数
    • 辅助发现潜在漏洞
    • 提供SQL注入、XSS等漏洞提示

审计过程

1. 初步探测

  • 发现多个页面存在ID参数,可能存在SQL注入
  • 测试发现单引号被过滤,触发WAF防护

2. WAF分析

WAF位于Include/contorl.php文件中,工作原理:

  • 收集所有GET请求参数
  • 对每个参数进行正则匹配
  • 发现关键字则返回错误并退出

3. 后台功能审计

发现上传点,上传正常图片后分析请求:

  • 主要上传逻辑在Upfile.php文件中
  • 发现可以上传zip文件,联想到zip协议的文件包含漏洞

4. 文件包含漏洞分析

通过Seay审计发现关键函数:

file_get_contents('../'.$xxx)

关键点:

  • $mblujin不可控(写死或数据库获取)
  • $mb变量可控
  • 函数执行流程:
    1. 提取模板文件数据
    2. 替换<{Template}>内容为$mb的值
    3. 写入网站根目录

5. 路径遍历测试

利用../进行路径遍历:

  • index.phpTemplete/default/Include读取
  • .htaccessTemplete/default/Include/hta/d读取

6. 初始利用尝试

尝试直接修改index.php

<?php
include_once  '<{dirpaths}>Include/web_inc.php';
include_once  '<{dirpaths}>Templete/<{Template}>/Include/Function.php';
$file_url="<{dirpaths}>";
include_once  '<{dirpaths}>Templete/<{Template}>/Include/default.php';
?>

构造Payload:

index.php';eval($_POST[1]);//../default

失败原因:

  • Function.php依赖Include/contorl.php中的类定义
  • WAF会拦截单引号导致脚本退出

7. 替代方案:.htaccess利用

分析.htaccess内容:

RewriteEngine On
RewriteCond %{http_host} ^sem-cms.com [NC]
RewriteRule ^(.*)$ http://www.sem-cms.com/$1 [L,R=301]

<Files ~ "^.(htaccess|htpasswd)$">
deny from all
</Files>
...

构造Payload:

index.php%0aSetHandler application/x-httpd-php%0a%23/../../default

8. 完整利用步骤

  1. 上传图片马(如包含PHP代码的图片)
  2. 使用Payload修改.htaccess
    Top_include.php?CF=template&mb=index.php%0aSetHandler application/x-httpd-php%0a%23/../../default
    
  3. 访问上传的图片马,触发PHP解析

关键知识点总结

  1. WAF绕过

    • 理解WAF过滤机制
    • 寻找不受WAF保护的入口点
  2. 文件包含利用

    • 识别可控变量
    • 利用路径遍历(../)
    • 注意文件包含的上下文环境
  3. .htaccess利用

    • 使用换行符(%0a)添加新规则
    • 注释掉原有内容(%23)
    • SetHandler指令强制解析特定文件类型
  4. 上传漏洞组合利用

    • 结合文件修改和上传功能
    • 通过修改服务器配置实现代码执行

防御建议

  1. 对文件操作进行严格路径校验
  2. 禁用危险函数如eval()system()
  3. 限制.htaccess文件的修改权限
  4. 对上传文件进行内容检查而不仅是扩展名检查
  5. 实现更完善的WAF规则,包括换行符等特殊字符检测

结语

本案例展示了如何通过系统化的代码审计思路发现和利用CMS漏洞。关键在于:

  1. 全面了解系统功能
  2. 深入分析关键函数
  3. 灵活组合多种漏洞
  4. 不放过任何细节和可能性

这种审计方法可以应用于其他CMS系统的安全评估中。

某CMS代码审计思路与实战分析 前言 本文详细分析某CMS系统的代码审计过程,重点讲解从发现漏洞到最终GetShell的完整思路。通过这个案例,我们将学习如何结合白盒与黑盒审计方法,发现并利用CMS系统中的安全漏洞。 工具准备 Vscode : 强大的代码搜索功能 转到定义和引用功能 支持正则表达式搜索 Seay源代码审计系统 : 快速定位危险函数 辅助发现潜在漏洞 提供SQL注入、XSS等漏洞提示 审计过程 1. 初步探测 发现多个页面存在 ID 参数,可能存在SQL注入 测试发现单引号被过滤,触发WAF防护 2. WAF分析 WAF位于 Include/contorl.php 文件中,工作原理: 收集所有GET请求参数 对每个参数进行正则匹配 发现关键字则返回错误并退出 3. 后台功能审计 发现上传点,上传正常图片后分析请求: 主要上传逻辑在 Upfile.php 文件中 发现可以上传zip文件,联想到zip协议的文件包含漏洞 4. 文件包含漏洞分析 通过Seay审计发现关键函数: 关键点: $mblujin 不可控(写死或数据库获取) $mb 变量可控 函数执行流程: 提取模板文件数据 替换 <{Template}> 内容为 $mb 的值 写入网站根目录 5. 路径遍历测试 利用 ../ 进行路径遍历: index.php 从 Templete/default/Include 读取 .htaccess 从 Templete/default/Include/hta/d 读取 6. 初始利用尝试 尝试直接修改 index.php : 构造Payload: 失败原因: Function.php 依赖 Include/contorl.php 中的类定义 WAF会拦截单引号导致脚本退出 7. 替代方案:.htaccess利用 分析 .htaccess 内容: 构造Payload: 8. 完整利用步骤 上传图片马(如包含PHP代码的图片) 使用Payload修改 .htaccess : 访问上传的图片马,触发PHP解析 关键知识点总结 WAF绕过 : 理解WAF过滤机制 寻找不受WAF保护的入口点 文件包含利用 : 识别可控变量 利用路径遍历( ../ ) 注意文件包含的上下文环境 .htaccess利用 : 使用换行符( %0a )添加新规则 注释掉原有内容( %23 ) SetHandler 指令强制解析特定文件类型 上传漏洞组合利用 : 结合文件修改和上传功能 通过修改服务器配置实现代码执行 防御建议 对文件操作进行严格路径校验 禁用危险函数如 eval() 、 system() 等 限制 .htaccess 文件的修改权限 对上传文件进行内容检查而不仅是扩展名检查 实现更完善的WAF规则,包括换行符等特殊字符检测 结语 本案例展示了如何通过系统化的代码审计思路发现和利用CMS漏洞。关键在于: 全面了解系统功能 深入分析关键函数 灵活组合多种漏洞 不放过任何细节和可能性 这种审计方法可以应用于其他CMS系统的安全评估中。