使用codeql 寻找 ofcms 的新漏洞
字数 1225 2025-08-29 08:30:36
使用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点
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
漏洞利用链构建
-
信息收集:
- 识别所有文件操作功能点
- 标记用户可控参数
-
控制流分析:
- 从输入点到敏感操作的数据流
- 特别关注路径拼接操作
-
约束验证:
- 检查文件后缀限制
- 验证内容过滤机制
-
利用链组合:
- 结合多个功能点的弱点
- 例如:目录穿越+文件写入+文件解析
防御建议
- 对所有文件路径参数进行规范化处理
- 限制文件操作在特定目录内
- 对用户输入进行严格过滤
- 禁用XML外部实体解析
- 实施最小权限原则
总结
通过CodeQL可以系统性地分析OFCMS中的文件操作漏洞:
- expReport功能存在XXE风险
- createSql功能存在目录穿越
- 需要结合多个弱点才能实现有效攻击
- CodeQL查询能有效识别这类漏洞模式
关键点在于识别用户输入到敏感操作的完整数据流,并验证所有安全约束的有效性。