PHP代码审计-IBOS
字数 1937 2025-08-24 07:48:10
IBOS OA系统PHP代码审计与漏洞分析教学文档
一、项目介绍
1.1 IBOS系统概述
IBOS是一个基于PHP开发、Yii框架的免费开源协同办公管理系统,具有以下特点:
- 开发始于2012年,旨在简化企业协同应用开发
- 秉承简洁实用的设计原则
- 注重易用性、扩展性和性能优化
- 已成为国内用户体验最好和最具影响力的协同办公管理系统之一
1.2 Yii框架介绍
IBOS使用的Yii框架特点:
- 完全面向对象(OOP),没有全局函数或变量
- 实现了MVC设计模式
- models目录包含所有模型类
- views目录包含所有视图脚本
- controllers目录包含所有控制器类
- 版本信息:
- Yii 1.1.14 (2013年8月11日发布)
- Yii 2.0.0 (2014年10月12日发布)
- 1.X版本存在一些已知的SQL注入和XSS漏洞
二、漏洞分析与复现
2.1 命令执行漏洞(数据库备份功能)
漏洞位置:数据库备份功能点
分析过程:
- 定位到
actionBackup()方法 - 调用
databaseBackup()方法 - 通过
Env::getRequest获取filename参数 - 在
multivol分支中参数拼接后传递到危险函数
关键代码:
$dumpFile = $backupFileName; // 参数可控
// ... 后续拼接执行命令
复现步骤:
- 访问数据库备份功能
- 在备份文件名处插入恶意命令
- 触发备份操作执行命令
2.2 SQL注入漏洞(报表功能)
漏洞位置:报表功能点
分析过程:
- 通过Api控制器调用
GetList类 getListCondition()方法返回部分SQL语句getReportByCondition()方法形成完整SQL语句- 参数未过滤导致注入
复现步骤:
- 访问报表功能
- 添加特殊字符触发报错
- 构造SQL注入payload获取数据
2.3 SQL注入漏洞(文件柜下载功能)
漏洞位置:文件柜下载功能
分析过程:
- 调用
actionAjaxEnt()方法接收op参数 - 调用
BaseController的download()方法 - 通过
buildQuery()方法构建SQL语句 - 参数未过滤导致注入
复现步骤:
- 访问文件柜下载功能
- 在
fied参数后添加SQL注入payload - 成功注入获取数据库名
2.4 文件上传绕过漏洞
漏洞位置:文件上传功能
分析过程:
- 调用
actionadd()方法 - 先执行
actionIndex()获取配置参数 self::$dangerTags变量过滤危险后缀upload()方法调用CommonAttach类的chechExt()方法
绕过方法:
- 利用配置逻辑缺陷绕过.php后缀过滤
复现步骤:
- 构造特殊格式的.php文件
- 通过上传点上传
- 绕过过滤成功上传webshell
2.5 任意文件删除漏洞
漏洞位置:DatabaseController.php
分析过程:
- 通过POST接收
key参数 - 简单判断是否为文件后直接删除
- 路径完全可控
关键代码:
if (file_exists($key)) {
unlink($key); // 直接删除
}
复现步骤:
- 构造恶意请求指定系统关键文件路径
- 发送请求删除指定文件
2.6 命令执行漏洞(计划任务功能)
漏洞位置:CronController.php
分析过程:
actionIndex()方法存在漏洞getRealCronFile()形成完整文件路径- 文件名过滤不严导致命令注入
关键代码:
$realFile = $this->getRealCronFile(); // 可控路径
// 过滤不严导致命令执行
复现步骤:
- 访问计划任务功能
- 构造恶意文件名包含命令
- 触发命令执行
2.7 XSS漏洞(邮件功能)
漏洞位置:邮件发送功能
分析过程:
- 使用
creaturl方法处理输入 - 未对用户输入进行过滤
- 导致邮件内容中可执行XSS
复现步骤:
- 在邮件功能处构造XSS payload
- 发送邮件触发XSS
三、安全建议
-
输入验证:
- 对所有用户输入进行严格过滤
- 使用白名单机制验证文件类型和路径
-
SQL防护:
- 使用预处理语句
- 实现参数化查询
-
命令执行防护:
- 避免直接拼接用户输入到系统命令
- 使用escapeshellarg()等函数处理参数
-
文件操作防护:
- 限制文件操作路径范围
- 检查文件操作权限
-
XSS防护:
- 对所有输出进行HTML实体编码
- 实现CSP策略
-
框架升级:
- 升级到Yii框架最新安全版本
- 应用官方安全补丁
四、总结
通过对IBOS OA系统的代码审计,我们发现该系统存在多种类型的安全漏洞,包括命令执行、SQL注入、文件上传绕过、任意文件删除和XSS等。这些漏洞大多源于对用户输入缺乏充分验证、直接拼接SQL语句和系统命令、以及不安全的文件操作。开发人员应重视安全编码实践,对所有用户输入保持怀疑态度,并实施多层防御措施。