点亮代码审计中的组合利用链(一)
字数 1229 2025-08-25 22:58:46
代码审计中的组合利用链技术详解
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. 总结
组合利用链审计需要:
- 全面理解系统架构和业务流程
- 具备"攻击者思维",思考非常规路径
- 关注功能间的隐含信任关系
- 重视那些被标记为"已校验"或"安全"的环节
- 实践多步骤、多条件的联合测试
通过系统性地组合看似无关的安全问题,审计人员往往能发现深层次的漏洞,这也是高级代码审计的核心技能之一。