禅道二次 sql 注入分析
字数 1078 2025-08-22 12:23:19

禅道二次SQL注入漏洞分析与复现

漏洞概述

禅道项目管理软件存在二次SQL注入漏洞,攻击者可以通过精心构造的请求将恶意SQL语句存入数据库,然后在后续操作中触发执行,导致数据库信息泄露或更严重的后果。

环境要求

漏洞分析

注入点分析

  1. 初始注入点

    • 文件路径:app/zentao/module/my/control.php
    • 关键方法:对POST传入参数未做任何处理,直接传入setItem方法
  2. setItem方法分析

    • 文件路径:app/zentao/module/setting/model.php
    • 对value的处理:仅进行strval转换
    • 对key的处理:通过parseItemPath方法解析配置项路径
  3. parseItemPath方法

    • 创建一个stdClass对象
    • 解析owner、module、section、key等信息作为对象属性
    • 攻击者可控制key和value
  4. SQL执行流程

    • 处理后的结果传递给data方法
    • 使用quote方法转义单引号
    • 最终通过exec方法直接执行SQL语句,存入zt_config表

触发点分析

  1. 二次注入原理

    • 代码从zt_config表获取数据
    • 数据被拼接到其他表的where条件中
    • 关键点:不能经过链式操作函数(这些函数会转义数据)
  2. 查找方法

    • 搜索select[^\r\n]+_config正则表达式
    • 结合zt_config表字段和注入点条件:
      • owner、section、vision为空
      • module为common
      • key和value可控
  3. 关键调用链

    • 使用getSysAndPersonalConfig方法
    • $account为空时调用mergeConfig方法
    • mergeConfig将数据库配置项($dbConfig)合并到现有config对象

漏洞复现步骤

  1. 存储恶意SQL语句

    • 构造特殊请求将恶意SQL语句存入数据库
  2. 触发执行

    • 访问product页面或其他触发点
    • 恶意SQL语句被执行
  3. 验证方式

    • 直接查看数据库验证
    • 通过登录等操作观察效果

防御建议

  1. 对所有用户输入进行严格的过滤和转义
  2. 使用参数化查询或预处理语句
  3. 实施最小权限原则,限制数据库账户权限
  4. 及时更新到官方修复版本

总结

该漏洞展示了二次SQL注入的典型特征:攻击者首先将恶意代码存入数据库,然后在后续操作中触发执行。这种漏洞往往难以通过常规的代码审计发现,需要深入理解应用程序的数据流和控制流。

禅道二次SQL注入漏洞分析与复现 漏洞概述 禅道项目管理软件存在二次SQL注入漏洞,攻击者可以通过精心构造的请求将恶意SQL语句存入数据库,然后在后续操作中触发执行,导致数据库信息泄露或更严重的后果。 环境要求 禅道版本:特定受影响版本(需满足漏洞条件) 环境搭建参考: 禅道官方安装指南 漏洞分析 注入点分析 初始注入点 : 文件路径: app/zentao/module/my/control.php 关键方法:对POST传入参数未做任何处理,直接传入 setItem 方法 setItem方法分析 : 文件路径: app/zentao/module/setting/model.php 对value的处理:仅进行 strval 转换 对key的处理:通过 parseItemPath 方法解析配置项路径 parseItemPath方法 : 创建一个stdClass对象 解析owner、module、section、key等信息作为对象属性 攻击者可控制key和value SQL执行流程 : 处理后的结果传递给data方法 使用quote方法转义单引号 最终通过exec方法直接执行SQL语句,存入zt_ config表 触发点分析 二次注入原理 : 代码从zt_ config表获取数据 数据被拼接到其他表的where条件中 关键点:不能经过链式操作函数(这些函数会转义数据) 查找方法 : 搜索 select[^\r\n]+_config 正则表达式 结合zt_ config表字段和注入点条件: owner、section、vision为空 module为common key和value可控 关键调用链 : 使用 getSysAndPersonalConfig 方法 $account为空时调用 mergeConfig 方法 mergeConfig 将数据库配置项($dbConfig)合并到现有config对象 漏洞复现步骤 存储恶意SQL语句 : 构造特殊请求将恶意SQL语句存入数据库 触发执行 : 访问product页面或其他触发点 恶意SQL语句被执行 验证方式 : 直接查看数据库验证 通过登录等操作观察效果 防御建议 对所有用户输入进行严格的过滤和转义 使用参数化查询或预处理语句 实施最小权限原则,限制数据库账户权限 及时更新到官方修复版本 总结 该漏洞展示了二次SQL注入的典型特征:攻击者首先将恶意代码存入数据库,然后在后续操作中触发执行。这种漏洞往往难以通过常规的代码审计发现,需要深入理解应用程序的数据流和控制流。