常见漏洞验证121 条

.svn 目录暴露检查

SVN 工作副本残留可暴露源码与提交信息;核查常见元数据路径,确认后建议清理部署产物。

.svn 目录暴露是什么

用 SVN 管理源码时,工作副本里会保留版本控制元数据:SVN 1.6 及更早版本在每个目录下生成 .svn/entries,1.7 起只在工作副本根目录保留 .svn(含 wc.db 数据库与 pristine 原始文件副本)。如果把工作副本直接部署成网站目录,这些元数据就可能通过 Web 被读取,源码与提交信息随之泄露。

基本信息

核查对象.svn 下的 entries、wc.db、pristine 等路径
风险源码、目录结构与提交者信息泄露
修复层面清理部署产物 + Web 层拦截 + 发布流程改造
关联问题.git/.hg 残留、备份文件、编辑器临时文件
验证方式对目标路径发起匿名请求,比对返回差异

典型使用场景

  • 上线前检查:确认发布包里没有夹带版本控制目录
  • 存量排查:对已知站点批量探测常见元数据路径
  • 修复验证:清理后复测,确认返回 404 或 403
  • 部署流程评审:确认发布方式是导出而非直接复制工作副本
  • 历史资产巡检:多年未重整的老站点残留概率更高

检查方式

检查方式
curl -s -o /dev/null -w "%{http_code}\n" https://target.example/.svn/entries
curl -s -o /dev/null -w "%{http_code}\n" https://target.example/.svn/wc.db
curl -s https://target.example/.svn/entries | head -n 20   # 1.6 版本含文件名与版本
curl -s -o /dev/null -w "%{http_code}\n" https://target.example/.svn/all-wcprops
# 判读:200 且内容为 SVN 格式即存在暴露;404/403 为正常
# 只做只读验证,不批量拉取源码内容

常见路径与含义

路径含义暴露后果
.svn/entries1.6 及更早的文件清单与版本号文件名、目录结构、提交版本泄露
.svn/wc.db1.7 起的 SQLite 工作副本数据库文件清单与校验信息可被解析
.svn/pristine/原始文件副本(.svn-base 后缀)配合数据库可还原源码
.svn/all-wcprops属性文件,含部分文件名辅助推测项目结构
不同客户端版本残留形态差异明显:老站点常是每目录一个 .svn,新版本只在根目录有一个 .svn 目录,因此检查要覆盖常见路径,清理要覆盖整个部署目录树。
漏洞等级取决于泄露内容:仅目录结构通常为中危,能还原完整业务源码或含凭据的配置文件时属于高危,定级要以后续验证结果为准。

易错点

  • 只检查根目录,漏掉子目录残留:部分路径仍可访问,源码继续泄露;按部署目录树逐层排查
  • 把 Web 层拦截当作清理完成:本源目录文件仍在,其他方式或配置变更后可能重新暴露;清理加拦截双做
  • 用复制工作副本的方式发布:每次上线都重新引入残留;改用导出方式生成发布包并加发布前检查
  • 验证时批量拉取源码作为证据:超出必要范围且加重客户风险;只保留最小可证明的响应片段

数据来源与参考

  • 通用部署安全实践
  • CWE-538(File/Directory Information Exposure)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌