本章节内容主要是介绍工具git-all-secret,用于搜索github仓库。但笔者在测试的时候docker环境中的工具无法解析dns,而且不能挂起docker进入到bash,使用起来较为困难。
文章内容主要摘自某红队系列丛书,将市面上现在流传的 redteam 系列书籍进行一个学习记录。
Git-all-secret功能描述
- 克隆多个某组织的 public/private 有仓库并扫描;
- 克隆多个某组织用户的 public/private 仓库扫描;
- 克隆一个某组织的 public/private 仓库并扫描;
- 克隆一个某用户的 public/private 仓库并扫描;
- 克隆一个某用户的 public/secret gist (代码片段管理服务)并扫描;
- 克隆一个某组织团队的仓库并扫描;
- 克隆和扫描Github企业仓库还有gists;
扫描过程需要借助的开源工具
- truffleHog - 扫描高熵值字符串和用户提供的正则表达式;
- repo-supervisor扫描在js和json文件中的高熵值字符串;
所有工具中的输出文件最终会合并为一个输出文件
新手入门使用
下载docker
运行Git-all-secrets最简便的方法是使用Docker
获取Docker:apt install docker docker-compose
下载Git-all-secrets
git clone https://github.com/anshumanbh/git-all-secrets.git
运行git-all-secrets
运行 docker run –rm -it abhartiya/tools_gitallsecrets –help 查看帮助信息
运行 docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> 扫描组织
运行 docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> -toolName=<> 选择待定工具,toolName=thog or repo-supervisor
运行 docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> -toolName=thog -thogEntropy truffleHog 的默认正则和高熵设置
当容器完成运行,输入 docker ps -a 返回容器ID
获得容器ID以后,输入 docker cp :/root/results.txt 来获取结果文件
标志/选项
- -token= Github访问令牌。如果未授权请求Github API会被限速
- -org= 组织扫描。他会扫描组织中的所有公共仓库,以及用户的gists。如果你使用的是该组织用户的token,他还会克隆并扫描该用户的所有私密gitsts,以及所有该用户有权限访问的私有仓库
- -user= 用户扫描。他会扫描当前用户的所有仓库和gists,扫描私有仓库请使用scanPrivateReposOnly标志,以及SSHkey
- -repoURL= httpsURL 仓库扫描。他只会扫描当前仓库。如果你希望扫描私有仓库,请提供SSH URL和SSHkey,以及scanPrivateReposOnly标志
- -gistURL= httpsURL Gist扫描。他只会扫描Gist。如果你知道私密gist的httpsURL,他也能够访问
- -output= 输出结果文件,默认是result.txt
- -cloneForks= 这是一个布尔标志。默认设置为0,不克隆forks,如果设置为1,他就会克隆forks
- -orgOnly= 这也是一个布尔标志。默认设置为0。如果只扫描组织仓库而不扫描用户的仓库,请将它设置为1
- -toolName= 这是规范扫描工具的标志。默认他使用all,thog和repo-supervisor
- -scanPrivateReposOnly= 这是规范是否扫描用户私有仓库的标志。他只能工作在user、repoURL、org标志
- -enterpriseURL= 企业GithubURL的标志,如果你希望扫描企业仓库,就选这个
- -threads= 默认线程10
- -thogEntropy= 开启高熵提取,默认是false。设置为true会有大量的垃圾信息,在比较大的目标上,不建议开启。如果设置为false,则意味着truffleHog只会提取基于rules.json文件中的正则结果
- -blacklist= 不需要扫描的仓库名称,以逗号分割
注意事项
Token选项不能为空
Org user repoURL gistURL 不能都设置为空,至少需要提供一个选项。如果你提供了多个选项,他的顺序是org>user>repoURL>gistURL。如果你只需要运行在特定用户上,那就不需要提供org选项
当定义scanPrivateReposOnly标志时:
1.必须将包含的SSH-key的卷载入到Docker容器中,使用 -v 选项
2.他应该在扫描私有仓库时使用,使用SSH url,而不是https url
3.确保使用了私有仓库/gist的用户token,否则会报错
4.如果你想在没有手动干扰的情况下运行,请不要设置SSH key的密钥密码
当定义teamName标志的时候,提供一个团队成 员的token非常重要,否则可能会出现意外结果
当定义enterpriseURL标志的时候,即使你提供了http URL,他也始终会考虑ssh key。所有企业克隆/扫描都是通过ssh url,而不是https url
综上,请确保使用了SSH key,并且没有设置密钥密码
扫描
扫描私有仓库
扫描私有仓库最稳妥的方法是使用SSH URL克隆。实现这个你需要将SSH key添加到Github用户。
用户配置参考:https://help.github.com/en/articles/adding-a-new-ssh-key-to-your-github-account
确保这个key没有密码设置。有了SSH key以后,将它挂载到Docker容器中,运行如下命令:
docker run -it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -user=<> -scanPrivateReposOnly
OR
docker run -it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -repoURL=<> -scanPrivateReposOnly
将本地的personal SSH-key存储到Docker内部容器 /root/.ssh/id_rsa,git-all-secrets会试图通过存储在 /root/.ssh/id_rsa 的ssh key来克隆仓库
扫描组织团队
Github API限制了私有仓库环境。尝试使用非管理员用户扫描组织,需要给用户添加仓库的访问权限。如果非要扫描组织团队,可以运行:
docker run –it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -org=<> -teamName <>
扫描企业Github
git-all-secrets支持扫描企业仓库,使用enterpriseURL选项:
实例1
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token
实例2
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token
实例3
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token
特性
可以添加自己的正则表达式,在docker run的时候使用-v $(pwd)/rules.json:/root/truffleHog/rules.json。可以使用默认正则表达式,如果需要,也可以用truffleHog提供的高熵字符串。可以通过repo-supervisor工具搜索.js和.json中的高熵字符串。可以搜索用户的Gist,大多数工具都没这个功能。有新工具可以很容易地集成到git-all-secrets。支持扫描企业Github orgs/uesrs/repos/gists。大多数工具只扫描单个仓库,git-all-secrets可以一次扫描多个。