kost/dvcs-ripper
GitHub: kost/dvcs-ripper
一款用于爬取和重建 Web 可访问版本控制系统仓库(SVN/GIT/HG/BZR/CVS)的源码泄露利用工具,即使服务器禁用目录浏览也能正常工作。
Stars: 1773 | Forks: 316
[](https://inventory.rawsec.ml/tools.html#dvcs-ripper)
[](https://github.com/kost/dvcs-ripper/stargazers)
[](https://github.com/kost/dvcs-ripper/blob/master/LICENSE)
# dvcs-ripper
爬取 Web 可访问的(分布式)版本控制系统:SVN、GIT、Mercurial/hg、bzr 等。
即使在目录浏览被关闭的情况下,它也能爬取仓库。
请确保将你自己定位在一个空目录中,该目录是你希望将仓库下载/克隆到的位置。
## 环境要求
- Perl
- Perl 模块:
- 必需:LWP, IO::Socket::SSL
- 用于较新的 SVN:DBD::SQlite 和 DBI
- 用于更快的 GIT:Parallel::ForkManager、Redis 和 Algorithm::Combinatorics
- 你想要爬取的 (D)VCS 客户端(cvs, svn, git, hg, bzr 等)
### Debian/Ubuntu 上的环境要求
你可以轻松安装 perl 的依赖项:
`sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl`
可选依赖项(用于更快的 git 爬取):
`sudo apt-get install libparallel-forkmanager-perl libredis-perl libalgorithm-combinatorics-perl`
如果你需要所有支持的客户端:
`sudo apt-get install cvs subversion git bzr mercurial`
## Docker
如果你只想要 Docker 版本,它在这里:
https://github.com/kost/docker-webscan/tree/master/alpine-dvcs-ripper
只需输入类似这样的命令:
`docker run --rm -it -v /path/to/host/work:/work:rw k0st/alpine-dvcs-ripper rip-git.pl -v -u http://www.example.org/.git`
# GIT
运行示例(针对 git):
`rip-git.pl -v -u http://www.example.com/.git/`
它会自动执行 `git checkout -f`
或者如果你想忽略 SSL 证书验证(使用 -s):
`rip-git.pl -s -v -u http://www.example.com/.git/`
# Mercurial/HG
运行示例(针对 hg):
`rip-hg.pl -v -u http://www.example.com/.hg/`
它会自动执行 `hg revert `
或者如果你想忽略 SSL 证书验证(使用 -s):
`rip-hg.pl -s -v -u http://www.example.com/.hg/`
# Bazaar/bzr
运行示例(针对 bzr):
`rip-bzr.pl -v -u http://www.example.com/.bzr/`
它会自动执行 `bzr revert`
或者如果你想忽略 SSL 证书验证(使用 -s):
`rip-bzr.pl -s -v -u http://www.example.com/.bzr/`
# SVN
它支持较旧和较新版本的 svn 客户端格式。较旧的版本在每个目录中都有 .svn 文件,而较新的版本只有一个单独的 .svn 目录以及该 .svn 目录下的 wc.db。它会自动检测目标上使用的是哪种格式。
运行示例(针对 SVN):
`rip-svn.pl -v -u http://www.example.com/.svn/`
它会自动执行 `svn revert -R .`
# CVS
运行示例(针对 CVS):
`rip-cvs.pl -v -u http://www.example.com/CVS/`
这不会爬取 CVS,但会显示有用的信息。
## 高级用法示例
关于如何使用它的一些示例
### 输出处理
将 git 树下载到特定输出目录:
`rip-git.pl -o /my/previously/made/dir -v -u http://www.example.com/.git/`
将 git 树下载到特定输出目录(为 url 自动创建目录 `http__www.example.com_.git_`):
`rip-git.pl -m -o /dir -v -u http://www.example.com/.git/`
### Docker 中 Redis 的使用
创建 Redis docker 容器:
`docker run --rm --name myredis -it -v /my/host/dir/data:/data:rw k0st/alpine-redis`
在另一个终端中,只需链接 redis 容器并输入类似这样的命令:
`docker run --rm --link=myredis:redis -it -v /path/to/host/work:/work:rw k0st/alpine-dvcs-ripper rip-git.pl -e docker -v -u http://www.example.org/.git -m -o /work`
### 使用 redis 恢复爬取工作
创建 Redis docker 容器:
`docker run --name redisdvcs -it -v /my/host/dir/data:/data:rw k0st/alpine-redis`
在另一个终端中,只需链接 redis 容器并输入类似这样的命令:
`docker run --link=redisdvcs:redis -it -v /path/to/host/work:/work:rw k0st/alpine-dvcs-ripper rip-git.pl -n -e docker -v -u http://www.example.org/.git -m -o /work`
### 利用 redis 进行大规模并行任务
创建全局 NFS 并在每个客户端上挂载 /work。创建全局 Redis docker 容器:
`docker run --name redisdvcs -it -v /my/host/dir/data:/data:rw k0st/alpine-redis`
在另一个终端中,在第一个客户端上只需链接 redis 容器并输入类似这样的命令:
`docker run -it -v /path/to/host/work:/work:rw k0st/alpine-dvcs-ripper rip-git.pl -n -e global.docker.ip -v -u http://www.example.org/.git -t 10 -c -m -o /work`
在另一个终端中,在第二个客户端上只需链接 redis 容器并输入类似这样的命令:
`docker run -it -v /path/to/host/work:/work:rw k0st/alpine-dvcs-ripper rip-git.pl -n -e global.docker.ip -v -u http://www.example.org/.git -t 10 -c -m -o /work`
以此类推...
当然,你需要在最后自己执行 `git checkout -f`!
## 未来
欢迎自由实现任何功能并发送 pull request。欢迎随时提出任何功能建议。实际上许多功能都是通过请求实现的。
### 待办事项
- [ ] 识别在 SVN/CVS 中返回 200 状态码的 404 页面
- [ ] 在前一个技巧成功后尝试重复每个技巧
- [ ] 进度条
### 已完成
- [x] 支持暴力破解 pack 名称
- [x] 智能猜测 packed refs
- [x] 支持来自 https://www.kernel.org/pub/software/scm/git/docs/gitrepository-layout.html 的 objects/info/packs
- [x] 识别返回 200 状态码的 404 页面
- [x] 在 SVN/CVS 中引入忽略 SSL/TLS 验证功能
- [x] Bzr 支持
标签:BZR, CVE, CVS, Docker, Git, HG, meg, Mercurial, Perl, SVN, Web安全, 信息安全, 安全可观测性, 安全防御评估, 开源安全工具, 搜索引擎查询, 数字签名, 数据提取, 数据泄露, 源码泄露, 版本控制, 网站备份, 网络安全, 蓝队分析, 请求拦截, 逆向工程平台, 隐私保护