RAUDI(Regularly and Automatically Updated Docker Images)通过 GitHub Actions 自动生成并持续更新一系列 Docker 镜像,适用于那些开发者并未提供的工具。
RAUDI 能将你从手动创建和管理大量 Docker 镜像的繁琐工作中解放出来。每次软件更新时,若想使用最新功能或依赖不再兼容,都需要更新 Docker 镜像。
这既杂乱又耗时。
别再担心了,我们帮你搞定。
你可以 Fork 本仓库并自行使用 GitHub Workflow,也可以在本地使用(按你喜欢的方式管理执行)。
如果你想 Fork 本仓库,还需要设置一些 Secrets,以便将镜像推送到你的个人 Docker Hub 账户。必须设置两个 GitHub Secrets:
设置好这些 Secrets 后,你需要修改 tools/main.py 文件中的 organization 变量,因为默认配置是推送到 SecSI 的 Docker Hub。
就是这样:前往 Action,为你的 Fork 仓库启用,等到午夜,Workflow 就会自动完成繁重的工作!
本仓库也可以在本地执行。需要满足以下条件:
以下是使用 BuildX 的文档:https://docs.docker.com/buildx/working-with-buildx/
设置过程非常简单,只需执行以下命令:
git clone https://github.com/cybersecsi/RAUDI
cd RAUDI
pip install -r requirements.txt
准备就绪!
要运行测试,你需要安装 pytest,执行命令 pip install pytest(它不在 requirements.txt 中,因为仅用于测试目的),然后你可以运行:
pytest -s
或
python -m pytest -s
来执行测试。
RAUDI 可以构建并推送所有放在 tools 目录中的工具。运行时有不同的选项。在本地使用之前,你应该创建一个 .env 文件(你可以直接复制 .env.sample 文件)并添加你的 GitHub Personal Access Token,以避免速率限制。对于未认证用户,GitHub 允许每小时最多 60 次请求,而认证用户允许每小时最多 15,000 次请求。因此,我们建议你添加它!你也可以创建一个没有任何权限域的 Personal Access Token,因为我们所做的只是读取每个 GitHub 仓库的一些信息。
在此模式下,RAUDI 会尝试构建所有需要构建的工具。运行命令很简单:
python3 ./raudi.py --all
在此模式下,RAUDI 只尝试构建指定的工具。命令如下:
python3 ./raudi.py --single <tool_name>
tool_name 必须是 tools 文件夹内目录的名称。
由于工具配置结构中已经添加了 tests 参数,因此它可以用于测试插入的命令是否返回 0 状态码。测试特定工具的命令是:
python3 ./raudi.py --test <tool_name>
tool_name 必须是 tools 文件夹内目录的名称。
如果你想查看可用的工具,可以运行以下命令:
python3 ./raudi.py --list
如果你想基于现有模板快速添加新的工具文件夹,可以运行以下命令:
python3 ./raudi.py --bootstrap <new_tool_name>
| 选项 | 描述 | 默认值 |
|---|---|---|
| --push | 是否自动推送到 Docker Hub | False |
| --remote | 是否在构建前检查 Docker Hub(而不是本地 Docker) | False |
| --force | 如果已找到相同标签名称的镜像,是否仍要构建 | False |
以下是已添加的工具列表。这些工具均没有开发者提供的官方 Docker 镜像:
tools 目录中的每个工具至少包含两个文件:
如果你想添加一个新工具,只需在 tools 目录中为该工具创建一个文件夹。在此文件夹中,你需要放置 Dockerfile,并在其中定义 build args 以便定制和自动化构建。创建完 Dockerfile 后,你需要在同一目录中创建一个 config.py,其中包含一个名为 get_config(organization, common_args) 的函数。注意:函数必须以此命名,并且必须包含这两个参数(即使你不使用它们)。返回值是该工具的 config,其结构如下:
config = {
'name': organization+'/<name_of_the_image>',
'version': '', # 应该是一个辅助函数
'buildargs': {
},
'tests': []
}
四个键为:
完成以上步骤后,就可以开始了!只需注意工具的名称必须与放置其 Dockerfile 的目录名称相同。
版本号有一个命名约定:只能使用点和数字;因此请在对应的 config.py 中去掉版本号中所有开头的 'v'(具体示例请参考 tools/dirsearch/config.py)。
为了获取关于工具和基础镜像的最新版本及信息,实现了一组辅助函数。如果你想添加一个新工具,应使用这些辅助函数,以便 RAUDI 自动更新 Docker 镜像。
get_latest_pip_version此辅助函数用于获取 pip 包的最新版本。只需提供包名,返回版本号。示例:
VERSION = helper.get_latest_pip_version(package_name)
get_latest_npm_registry_version此辅助函数用于获取 npm 包的最新版本。只需提供包名,返回版本号。示例:
VERSION = helper.get_latest_npm_registry_version(package_name)
get_latest_github_release此辅助函数用于获取使用 Releases 且具有多种资产(例如针对不同操作系统的可执行文件)的 GitHub 仓库的信息。此辅助函数接受仓库(格式为 user/repo)和一个目标字符串,以便识别要下载的正确资产。返回一个包含两个键(url 和 version)的字典。示例:
VERSION = helper.get_latest_github_release("user/repo", "linux_amd64")
get_latest_github_release_no_browser_download此辅助函数用于获取使用 Releases 但仅有源代码(即只有 zipball 和 tarball)的 GitHub 仓库的信息。此辅助函数接受仓库(格式为 user/repo),返回一个包含两个键(url 和 version)的字典。示例:
VERSION = helper.get_latest_github_release_no_browser_download("user/repo")
get_latest_github_tag_no_browser_download此辅助函数用于获取使用 Tags 但仅有源代码(即只有 zipball 和 tarball)的 GitHub 仓库的信息。此辅助函数接受仓库(格式为 user/repo),返回一个包含两个键(url 和 version)的字典。示例:
VERSION = helper.get_latest_github_tag_no_browser_download("user/repo")
get_latest_github_commit此辅助函数用于获取不使用 Tags 或 Releases 的 GitHub 仓库的信息。这种情况下,目标是获取最新的提交。此辅助函数接受仓库(格式为 user/repo),返回一个字符串,表示最新提交的日期,格式为 YYYYYMMDD。
VERSION = helper.get_latest_github_commit("user/repo")
本节提供当前已添加的网络安全工具的示例。如你所见,这些镜像只提供工具本身,因此如果你需要使用词表,需要挂载它。
docker run -it --rm secsi/<tool> <command>
docker run -it --rm -v <wordlist_src_dir>:<wordlist_container_dir> secsi/dirb <url> <wordlist_container_dir>/<wordlist_file>
我们是意大利人,所以我们的发音可能和你不同。正确的发音(使用音标)如下:
/ˈraʊdi/
或者,想象一下著名电视剧《实习医生风云》中的填充狗:Rowdy
欢迎所有人贡献! 我们创建了一份非常详细的文档,描述 如何向 RAUDI 贡献。
RAUDI 由 @SecSI 自豪地开发,团队成员:
其他贡献者:
RAUDI 是一款开源免费软件,基于 GNU GPL v3 许可证发布。
| 名称 | Docker 镜像 | 来源 |
|---|