使用codeql 寻找 ofcms 的新漏洞
字数 1225 2025-08-29 08:30:36

使用CodeQL寻找OFCMS新漏洞 - 详细教学文档

前言

本教学文档基于先知社区文章《使用codeql 寻找 ofcms 的新漏洞》,旨在详细讲解如何通过CodeQL分析OFCMS系统中的潜在漏洞,特别是目录穿越和文件操作相关的安全问题。

漏洞分析总览

文章分析了OFCMS系统中的三个潜在漏洞点:

  1. expReport - 报表导出功能中的XXE潜在风险
  2. createSql - SQL文件创建功能中的目录穿越
  3. process - 文件处理功能

1. expReport漏洞分析

漏洞点定位

  • sink点:报表导出功能中的jrxmlFileName参数
  • 该参数用户可控但带有固定后缀限制

攻击面分析

  1. 通过抓包调试确认参数可控
  2. 文件会被系统解析,但无法直接用于上传下载攻击
  3. 关键点:文件内容可控且可写入任意目录

XXE潜在利用

  • 结合之前分析的目录穿越漏洞,可实现:
    1. 写入恶意XML文件
    2. 触发文件解析导致XXE
    3. 通过DNS记录验证外连

漏洞验证步骤

  1. 构造包含恶意内容的文件
  2. 利用目录穿越写入服务器
  3. 触发解析并监控DNS请求

2. createSql漏洞分析

漏洞点定位

  • sink点file.createNewFile()
  • 功能:根据表名、模块名等生成SQL相关代码文件

参数控制分析

  1. 所有参数均可通过HTTP请求控制
  2. 关键参数:
    • modulename:控制文件路径
    • 其他参数影响文件内容

目录穿越验证

  1. 测试../modulename中的使用:
    • 确认可以跳转上级目录
    • 可创建多级目录结构
  2. 文件创建限制:
    • 有固定后缀限制
    • 内容模板化,限制较大

利用限制

  1. 无法创建无后缀文件
  2. 文件内容受模板限制
  3. 只能创建特定类型的代码文件

3. process功能分析

代码审查

  1. 需要控制file参数
  2. 调用链分析显示参数不可控
  3. 与前面功能关联性低

结论

  • 该功能利用价值低
  • 缺乏直接可控的输入点

CodeQL分析建议

基于上述手动分析,可以构建以下CodeQL查询:

1. 查找文件操作sink点

from FileCreation fc
select fc

2. 查找用户输入到文件操作的路径

from RemoteFlowSource source, FileCreation fc
where source.flowsTo(fc)
select source, fc

3. 查找路径遍历漏洞

from RemoteFlowSource source, FileCreation fc
where source.flowsTo(fc.getAPathArgument())
and fc.getAPathArgument().toString().matches("%\\.\\./%")
select source, fc

漏洞利用链构建

  1. 信息收集

    • 识别所有文件操作功能点
    • 标记用户可控参数
  2. 控制流分析

    • 从输入点到敏感操作的数据流
    • 特别关注路径拼接操作
  3. 约束验证

    • 检查文件后缀限制
    • 验证内容过滤机制
  4. 利用链组合

    • 结合多个功能点的弱点
    • 例如:目录穿越+文件写入+文件解析

防御建议

  1. 对所有文件路径参数进行规范化处理
  2. 限制文件操作在特定目录内
  3. 对用户输入进行严格过滤
  4. 禁用XML外部实体解析
  5. 实施最小权限原则

总结

通过CodeQL可以系统性地分析OFCMS中的文件操作漏洞:

  1. expReport功能存在XXE风险
  2. createSql功能存在目录穿越
  3. 需要结合多个弱点才能实现有效攻击
  4. CodeQL查询能有效识别这类漏洞模式

关键点在于识别用户输入到敏感操作的完整数据流,并验证所有安全约束的有效性。

使用CodeQL寻找OFCMS新漏洞 - 详细教学文档 前言 本教学文档基于先知社区文章《使用codeql 寻找 ofcms 的新漏洞》,旨在详细讲解如何通过CodeQL分析OFCMS系统中的潜在漏洞,特别是目录穿越和文件操作相关的安全问题。 漏洞分析总览 文章分析了OFCMS系统中的三个潜在漏洞点: expReport - 报表导出功能中的XXE潜在风险 createSql - SQL文件创建功能中的目录穿越 process - 文件处理功能 1. expReport漏洞分析 漏洞点定位 sink点 :报表导出功能中的 jrxmlFileName 参数 该参数用户可控但带有固定后缀限制 攻击面分析 通过抓包调试确认参数可控 文件会被系统解析,但无法直接用于上传下载攻击 关键点:文件内容可控且可写入任意目录 XXE潜在利用 结合之前分析的目录穿越漏洞,可实现: 写入恶意XML文件 触发文件解析导致XXE 通过DNS记录验证外连 漏洞验证步骤 构造包含恶意内容的文件 利用目录穿越写入服务器 触发解析并监控DNS请求 2. createSql漏洞分析 漏洞点定位 sink点 : file.createNewFile() 功能:根据表名、模块名等生成SQL相关代码文件 参数控制分析 所有参数均可通过HTTP请求控制 关键参数: modulename :控制文件路径 其他参数影响文件内容 目录穿越验证 测试 ../ 在 modulename 中的使用: 确认可以跳转上级目录 可创建多级目录结构 文件创建限制: 有固定后缀限制 内容模板化,限制较大 利用限制 无法创建无后缀文件 文件内容受模板限制 只能创建特定类型的代码文件 3. process功能分析 代码审查 需要控制 file 参数 调用链分析显示参数不可控 与前面功能关联性低 结论 该功能利用价值低 缺乏直接可控的输入点 CodeQL分析建议 基于上述手动分析,可以构建以下CodeQL查询: 1. 查找文件操作sink点 2. 查找用户输入到文件操作的路径 3. 查找路径遍历漏洞 漏洞利用链构建 信息收集 : 识别所有文件操作功能点 标记用户可控参数 控制流分析 : 从输入点到敏感操作的数据流 特别关注路径拼接操作 约束验证 : 检查文件后缀限制 验证内容过滤机制 利用链组合 : 结合多个功能点的弱点 例如:目录穿越+文件写入+文件解析 防御建议 对所有文件路径参数进行规范化处理 限制文件操作在特定目录内 对用户输入进行严格过滤 禁用XML外部实体解析 实施最小权限原则 总结 通过CodeQL可以系统性地分析OFCMS中的文件操作漏洞: expReport功能存在XXE风险 createSql功能存在目录穿越 需要结合多个弱点才能实现有效攻击 CodeQL查询能有效识别这类漏洞模式 关键点在于识别用户输入到敏感操作的完整数据流,并验证所有安全约束的有效性。