kost/dvcs-ripper

GitHub: kost/dvcs-ripper

一款用于爬取和重建 Web 可访问版本控制系统仓库(SVN/GIT/HG/BZR/CVS)的源码泄露利用工具,即使服务器禁用目录浏览也能正常工作。

Stars: 1773 | Forks: 316

[![Rawsec 的 CyberSecurity Inventory](https://inventory.rawsec.ml/img/badges/Rawsec-inventoried-FF5050_flat.svg)](https://inventory.rawsec.ml/tools.html#dvcs-ripper) [![GitHub stars](https://img.shields.io/github/stars/kost/dvcs-ripper.svg)](https://github.com/kost/dvcs-ripper/stargazers) [![GitHub license](https://img.shields.io/github/license/kost/dvcs-ripper.svg)](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安全, 信息安全, 安全可观测性, 安全防御评估, 开源安全工具, 搜索引擎查询, 数字签名, 数据提取, 数据泄露, 源码泄露, 版本控制, 网站备份, 网络安全, 蓝队分析, 请求拦截, 逆向工程平台, 隐私保护