点亮代码审计中的组合利用链(一)
字数 1229 2025-08-25 22:58:46

代码审计中的组合利用链技术详解

1. 组合利用链概念

组合利用链是指将多个看似独立或低危的安全问题通过逻辑串联,形成一条完整的攻击路径,最终实现高危漏洞利用的技术。

核心思想

  • 单一漏洞可能无法直接利用或危害有限
  • 多个漏洞/功能点组合可能产生意想不到的效果
  • 需要深入理解系统业务流程和数据流向

2. 压缩包校验绕过案例

漏洞场景

某插件安装时的文件解压流程存在以下校验:

  1. 检查压缩包中是否存在manifest.xml文件
  2. 校验manifest配置信息
  3. 检查alias名称是否与之前重复

绕过方法

  1. 构造包含以下内容的恶意zip包:
    • 合法的manifest.xml文件(满足基础校验)
    • 恶意的PHP后门文件
  2. 由于系统只校验manifest.xml而忽略其他文件,恶意PHP文件会被解压到模板目录
  3. 直接访问解压后的PHP文件实现getshell

防御建议

  • 解压时校验所有文件类型和内容
  • 限制解压目录和文件权限
  • 使用白名单机制只允许特定文件类型

3. 文件下载逻辑缺陷案例

漏洞场景

文件下载功能存在以下问题:

  1. 检查文件名是否存在目录穿越符号(../),但检测后未终止程序
  2. 文件会被移动到安全目录(/ist/ist/web/data/hit_ips_pcap)
  3. 下载时信任该目录下的文件内容

组合利用步骤

  1. 第一次请求:提交包含目录穿越的文件名(如../../../etc/passwd)

    • 系统检测到../但未终止
    • 文件被移动到安全目录(实际移动的是/etc/passwd)
    • 安全目录中现在有passwd文件副本
  2. 第二次请求:直接请求下载passwd文件

    • 系统信任安全目录下的文件
    • 成功下载/etc/passwd内容

关键点

  • 利用移动文件操作的缺陷
  • 分步操作绕过直接路径穿越限制
  • 系统对"安全目录"的过度信任

防御建议

  • 发现非法路径时应立即终止流程
  • 对移动操作进行源文件和目标路径严格校验
  • 安全目录不应完全信任,仍需内容检查

4. 组合利用链的审计方法

审计技巧

  1. 业务流程跟踪:完整跟踪关键业务的数据流
  2. 操作序列分析:检查多步骤操作间的安全假设
  3. 信任边界识别:找出系统过度信任的环节
  4. 异常路径测试:尝试非正常操作序列

常见组合模式

  1. 上传+解析/解压组合
  2. 写入+包含组合
  3. 移动+下载组合
  4. 临时文件创建+竞争条件

5. 实际审计中的应用

WordPress案例参考

evil7作者在《拿WordPress开刀——点亮代码审计技能树》中提到的思想:

  1. 识别核心功能与插件间的交互
  2. 发现权限检查的缺失环节
  3. 组合多个低危问题实现权限提升
  4. 利用缓存机制绕过安全限制

6. 总结

组合利用链审计需要:

  1. 全面理解系统架构和业务流程
  2. 具备"攻击者思维",思考非常规路径
  3. 关注功能间的隐含信任关系
  4. 重视那些被标记为"已校验"或"安全"的环节
  5. 实践多步骤、多条件的联合测试

通过系统性地组合看似无关的安全问题,审计人员往往能发现深层次的漏洞,这也是高级代码审计的核心技能之一。

代码审计中的组合利用链技术详解 1. 组合利用链概念 组合利用链是指将多个看似独立或低危的安全问题通过逻辑串联,形成一条完整的攻击路径,最终实现高危漏洞利用的技术。 核心思想 单一漏洞可能无法直接利用或危害有限 多个漏洞/功能点组合可能产生意想不到的效果 需要深入理解系统业务流程和数据流向 2. 压缩包校验绕过案例 漏洞场景 某插件安装时的文件解压流程存在以下校验: 检查压缩包中是否存在manifest.xml文件 校验manifest配置信息 检查alias名称是否与之前重复 绕过方法 构造包含以下内容的恶意zip包: 合法的manifest.xml文件(满足基础校验) 恶意的PHP后门文件 由于系统只校验manifest.xml而忽略其他文件,恶意PHP文件会被解压到模板目录 直接访问解压后的PHP文件实现getshell 防御建议 解压时校验所有文件类型和内容 限制解压目录和文件权限 使用白名单机制只允许特定文件类型 3. 文件下载逻辑缺陷案例 漏洞场景 文件下载功能存在以下问题: 检查文件名是否存在目录穿越符号(../),但检测后未终止程序 文件会被移动到安全目录(/ist/ist/web/data/hit_ ips_ pcap) 下载时信任该目录下的文件内容 组合利用步骤 第一次请求 :提交包含目录穿越的文件名(如../../../etc/passwd) 系统检测到../但未终止 文件被移动到安全目录(实际移动的是/etc/passwd) 安全目录中现在有passwd文件副本 第二次请求 :直接请求下载passwd文件 系统信任安全目录下的文件 成功下载/etc/passwd内容 关键点 利用移动文件操作的缺陷 分步操作绕过直接路径穿越限制 系统对"安全目录"的过度信任 防御建议 发现非法路径时应立即终止流程 对移动操作进行源文件和目标路径严格校验 安全目录不应完全信任,仍需内容检查 4. 组合利用链的审计方法 审计技巧 业务流程跟踪 :完整跟踪关键业务的数据流 操作序列分析 :检查多步骤操作间的安全假设 信任边界识别 :找出系统过度信任的环节 异常路径测试 :尝试非正常操作序列 常见组合模式 上传+解析/解压组合 写入+包含组合 移动+下载组合 临时文件创建+竞争条件 5. 实际审计中的应用 WordPress案例参考 evil7作者在《拿WordPress开刀——点亮代码审计技能树》中提到的思想: 识别核心功能与插件间的交互 发现权限检查的缺失环节 组合多个低危问题实现权限提升 利用缓存机制绕过安全限制 6. 总结 组合利用链审计需要: 全面理解系统架构和业务流程 具备"攻击者思维",思考非常规路径 关注功能间的隐含信任关系 重视那些被标记为"已校验"或"安全"的环节 实践多步骤、多条件的联合测试 通过系统性地组合看似无关的安全问题,审计人员往往能发现深层次的漏洞,这也是高级代码审计的核心技能之一。