cognis-digital/peststack
GitHub: cognis-digital/peststack
一个纯 Bash 实现的声明式编排器,通过解析清单文件生成幂等的渗透测试工具安装脚本或 Dockerfile,帮助安全团队构建可复现的评估环境。
Stars: 0 | Forks: 0
# peststack
一个声明式编排器,用于组装**可复现的渗透测试/安全评估工具包环境**。你只需在一个纯文本的清单文件中声明所需的工具;peststack 会对其进行验证,生成一个幂等的安装脚本(或可复现的 Dockerfile),并允许你按类别列出工具包。
peststack 是纯 Bash 实现,包含一个模块化的 `lib/` 函数库和一个独立的测试套件。它自身不安装任何东西——它只**生成**安装产物,供你审查并在你控制的配置主机上运行。
- 维护者:**Cognis Digital**
- 许可证:**COCL 1.0**
## ⚠ 仅限授权使用
peststack **仅供**配置安全评估和渗透测试工具使用,且你**已获得明确授权**进行这些测试。它会验证清单、生成安装脚本和 Dockerfile,并列出工具。**它不会利用、攻击、扫描或访问任何系统。**
对你不拥有或未获得书面测试许可的系统使用安全工具可能是违法的。你需对自己是否在授权范围和适用法律内操作负全部责任。peststack 输出的每一份产物都会将此声明作为横幅携带。
## 安装说明
无需安装步骤——克隆仓库并使用 Bash 4+ 运行脚本即可:
```
bash peststack.sh --help
```
如果你愿意,也可以赋予其可执行权限:
```
chmod +x peststack.sh
./peststack.sh --help
```
## 快速开始
```
# 1. 验证 manifest(必填字段、已知方法、唯一名称)
bash peststack.sh validate --manifest examples/manifest.conf
# 2. 列出声明的 toolkit,可选择按类别
bash peststack.sh list --manifest examples/manifest.conf
bash peststack.sh list --manifest examples/manifest.conf --category recon
# 3. 生成幂等安装脚本
bash peststack.sh generate --manifest examples/manifest.conf --out setup.sh
# 4. ...或者生成一个可重现的 Dockerfile
bash peststack.sh generate --manifest examples/manifest.conf --dockerfile --out Dockerfile
```
## 命令
| 命令 | 用途 |
|------------|---------|
| `validate` | 检查清单中必填字段、已知的安装方法以及唯一的工具名称。出现任何错误将以非零状态退出。 |
| `generate` | 输出一个幂等的 bash 安装程序(默认),或者使用 `--dockerfile` 输出一个可复现的 Dockerfile。除非指定了 `--out`,否则将输出写入 stdout。 |
| `list` | 列出按类别分组的工具,或仅列出单个 `--category` 中的工具。 |
| `--help` | 显示用法,包括授权使用声明。 |
## 清单格式
清单是一个纯文本文件,由**以空行分隔的记录**组成。记录中的每一行都是一个 `KEY = VALUE` 键值对(键不区分大小写)。以 `#` 开头的行是注释。该文件完全使用 Bash 解析——其内容永远不会被 `eval` 或 source。
| 键 | 必填 | 含义 |
|------------|:--------:|---------|
| `name` | ✓ | 唯一的简短标识符(字母、数字、`. _ + -`),例如 `nmap`。 |
| `category` | ✓ | 阶段/分组标签,例如 `recon`、`scanning`、`web`、`reporting`。格式不限。 |
| `method` | ✓ | 安装后端:`apt`、`pip`、`go`、`git` 之一。 |
| `package` | | 包 / 模块 / 导入路径 / 仓库 URL。默认为 `name`。 |
| `version` | | 锁定的版本(apt `=ver`,pip `==ver`,go `@ver`,git 分支/标签)。 |
| `desc` | | 人类可读的描述。 |
记录示例:
```
name = subfinder
category = recon
method = go
package = github.com/projectdiscovery/subfinder/v2/cmd/subfinder
version = v2.6.6
desc = Passive subdomain enumeration
```
查看 [`examples/manifest.conf`](examples/manifest.conf) 获取一个完整的、涵盖多个类别的手写清单。
## 生成的产物是什么样的
**安装程序(`generate`)** — 一个包含 `set -euo pipefail` 的 bash 脚本,它会:
- 以注释形式在开头加入授权使用横幅,
- 如果声明了任何 apt 工具,则刷新一次 apt 索引,
- 为每个工具定义并调用一个 `install_` 函数,
- 在每次安装前执行**存在性检查**,以确保重新运行是幂等的
(`command -v`、`python3 -c "import ..."` 或克隆目录检查),
- 输出遵循任何锁定版本的特定安装方法的安装命令。
**Dockerfile(`generate --dockerfile`)** — 一个可复现的镜像,它会:
- 以 `FROM debian:stable-slim` 开始,
- 仅安装清单实际需要的基础依赖,
- 将 apt 工具批量合并到单个层中,
- 为每个 pip / go / git 工具添加一个 `RUN`。
## 安装方法
| 方法 | 安装形式 | 存在性检查 |
|--------|--------------|----------------|
| `apt` | `apt-get install -y --no-install-recommends pkg[=ver]` | `command -v name` |
| `pip` | `pip3 install --no-cache-dir pkg[==ver]` | 可导入的模块 / 控制台脚本 |
| `go` | `go install pkg@{ver,latest}` | `command -v name` |
| `git` | `git clone --depth 1 [--branch ver] url $PESTSTACK_SRC/name` | 克隆目录包含 `.git` |
## 项目布局
```
peststack/
├── peststack.sh # CLI entrypoint (validate / generate / list)
├── lib/
│ ├── common.sh # logging, authorized-use banner, helpers
│ ├── manifest.sh # pure-bash manifest parser -> PS_* arrays
│ ├── validate.sh # required/known/unique field validation
│ ├── generate.sh # installer + Dockerfile emitters
│ └── list.sh # category-grouped inventory rendering
├── examples/
│ └── manifest.conf # authored example toolkit manifest
├── tests/
│ └── run.sh # self-contained test suite (installs nothing)
├── .github/workflows/ci.yml
├── .gitignore
└── README.md
```
## 测试
该套件是纯 Bash 实现,且**不安装任何东西**——它仅对精心构建的清单执行 validate / generate / list 逻辑,并对输出的文本进行断言。
```
bash tests/run.sh
```
它会打印一行 `RESULT: N passed, M failed`,并在出现任何失败时以非零状态退出。
## 持续集成
[`.github/workflows/ci.yml`](.github/workflows/ci.yml) 在 Ubuntu 上运行:当 ShellCheck 可用时,它会对脚本进行 shellcheck,然后运行测试套件。
## 许可证
许可证:**COCL 1.0**。请参阅随 Cognis Digital 套件分发的权威 COCL 文本。
标签:Bash, Docker, 反取证, 安全评估, 安全防御评估, 应用安全, 特权提升, 环境编排, 自动化部署, 请求拦截