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 命令执行漏洞(数据库备份功能)

漏洞位置:数据库备份功能点

分析过程

  1. 定位到actionBackup()方法
  2. 调用databaseBackup()方法
  3. 通过Env::getRequest获取filename参数
  4. multivol分支中参数拼接后传递到危险函数

关键代码

$dumpFile = $backupFileName; // 参数可控
// ... 后续拼接执行命令

复现步骤

  1. 访问数据库备份功能
  2. 在备份文件名处插入恶意命令
  3. 触发备份操作执行命令

2.2 SQL注入漏洞(报表功能)

漏洞位置:报表功能点

分析过程

  1. 通过Api控制器调用GetList
  2. getListCondition()方法返回部分SQL语句
  3. getReportByCondition()方法形成完整SQL语句
  4. 参数未过滤导致注入

复现步骤

  1. 访问报表功能
  2. 添加特殊字符触发报错
  3. 构造SQL注入payload获取数据

2.3 SQL注入漏洞(文件柜下载功能)

漏洞位置:文件柜下载功能

分析过程

  1. 调用actionAjaxEnt()方法接收op参数
  2. 调用BaseControllerdownload()方法
  3. 通过buildQuery()方法构建SQL语句
  4. 参数未过滤导致注入

复现步骤

  1. 访问文件柜下载功能
  2. fied参数后添加SQL注入payload
  3. 成功注入获取数据库名

2.4 文件上传绕过漏洞

漏洞位置:文件上传功能

分析过程

  1. 调用actionadd()方法
  2. 先执行actionIndex()获取配置参数
  3. self::$dangerTags变量过滤危险后缀
  4. upload()方法调用CommonAttach类的chechExt()方法

绕过方法

  • 利用配置逻辑缺陷绕过.php后缀过滤

复现步骤

  1. 构造特殊格式的.php文件
  2. 通过上传点上传
  3. 绕过过滤成功上传webshell

2.5 任意文件删除漏洞

漏洞位置DatabaseController.php

分析过程

  1. 通过POST接收key参数
  2. 简单判断是否为文件后直接删除
  3. 路径完全可控

关键代码

if (file_exists($key)) {
    unlink($key); // 直接删除
}

复现步骤

  1. 构造恶意请求指定系统关键文件路径
  2. 发送请求删除指定文件

2.6 命令执行漏洞(计划任务功能)

漏洞位置CronController.php

分析过程

  1. actionIndex()方法存在漏洞
  2. getRealCronFile()形成完整文件路径
  3. 文件名过滤不严导致命令注入

关键代码

$realFile = $this->getRealCronFile(); // 可控路径
// 过滤不严导致命令执行

复现步骤

  1. 访问计划任务功能
  2. 构造恶意文件名包含命令
  3. 触发命令执行

2.7 XSS漏洞(邮件功能)

漏洞位置:邮件发送功能

分析过程

  1. 使用creaturl方法处理输入
  2. 未对用户输入进行过滤
  3. 导致邮件内容中可执行XSS

复现步骤

  1. 在邮件功能处构造XSS payload
  2. 发送邮件触发XSS

三、安全建议

  1. 输入验证

    • 对所有用户输入进行严格过滤
    • 使用白名单机制验证文件类型和路径
  2. SQL防护

    • 使用预处理语句
    • 实现参数化查询
  3. 命令执行防护

    • 避免直接拼接用户输入到系统命令
    • 使用escapeshellarg()等函数处理参数
  4. 文件操作防护

    • 限制文件操作路径范围
    • 检查文件操作权限
  5. XSS防护

    • 对所有输出进行HTML实体编码
    • 实现CSP策略
  6. 框架升级

    • 升级到Yii框架最新安全版本
    • 应用官方安全补丁

四、总结

通过对IBOS OA系统的代码审计,我们发现该系统存在多种类型的安全漏洞,包括命令执行、SQL注入、文件上传绕过、任意文件删除和XSS等。这些漏洞大多源于对用户输入缺乏充分验证、直接拼接SQL语句和系统命令、以及不安全的文件操作。开发人员应重视安全编码实践,对所有用户输入保持怀疑态度,并实施多层防御措施。

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 分支中参数拼接后传递到危险函数 关键代码 : 复现步骤 : 访问数据库备份功能 在备份文件名处插入恶意命令 触发备份操作执行命令 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 参数 简单判断是否为文件后直接删除 路径完全可控 关键代码 : 复现步骤 : 构造恶意请求指定系统关键文件路径 发送请求删除指定文件 2.6 命令执行漏洞(计划任务功能) 漏洞位置 : CronController.php 分析过程 : actionIndex() 方法存在漏洞 getRealCronFile() 形成完整文件路径 文件名过滤不严导致命令注入 关键代码 : 复现步骤 : 访问计划任务功能 构造恶意文件名包含命令 触发命令执行 2.7 XSS漏洞(邮件功能) 漏洞位置 :邮件发送功能 分析过程 : 使用 creaturl 方法处理输入 未对用户输入进行过滤 导致邮件内容中可执行XSS 复现步骤 : 在邮件功能处构造XSS payload 发送邮件触发XSS 三、安全建议 输入验证 : 对所有用户输入进行严格过滤 使用白名单机制验证文件类型和路径 SQL防护 : 使用预处理语句 实现参数化查询 命令执行防护 : 避免直接拼接用户输入到系统命令 使用escapeshellarg()等函数处理参数 文件操作防护 : 限制文件操作路径范围 检查文件操作权限 XSS防护 : 对所有输出进行HTML实体编码 实现CSP策略 框架升级 : 升级到Yii框架最新安全版本 应用官方安全补丁 四、总结 通过对IBOS OA系统的代码审计,我们发现该系统存在多种类型的安全漏洞,包括命令执行、SQL注入、文件上传绕过、任意文件删除和XSS等。这些漏洞大多源于对用户输入缺乏充分验证、直接拼接SQL语句和系统命令、以及不安全的文件操作。开发人员应重视安全编码实践,对所有用户输入保持怀疑态度,并实施多层防御措施。