user0x1337/htb-operator
GitHub: user0x1337/htb-operator
htb-operator 是一款非官方的 Hack The Box 命令行工具,通过自动化 API 交互帮助用户高效管理靶机实例、VPN 连接、flag 提交等日常工作流。
Stars: 50 | Forks: 7
# HTB-Operator - Hack The Box 的 CLI



# Windows 上的限制
Windows 具有特定于平台的限制,因此并非所有功能都受支持。
不支持的功能/命令:
- VPN 启动和停止
# 安装
HTB-Operator 使用 Python 编写。通常,它可以在任何安装了 Python 的操作系统上运行。它主要在 Linux (Kali, Ubuntu) 上进行了测试,目前在 Windows 上存在一些限制。
强烈建议使用虚拟环境。使用 [pipx](https://pipx.pypa.io/latest/)(它会自动创建隔离的 Python 环境)来安装 `htb-operator`:
```
pipx install htb-operator
```
# 配置
你需要一个 HTB API token:
1. 访问:[https://app.hackthebox.com/account-settings](https://app.hackthebox.com/account-settings)
2. 点击 **Create App Token**。
3. 创建 token。
4. 保存 token。
5. 运行:
```
htb-operator init -api YOUR_API_TOKEN
```
API token(及其他设置)本地存储在:
- Linux: `$HOME/.config/htb-operator/config.ini`
- Windows: `%APPDATA%\htb-operator\config.ini`
# 安全提示
HTB-Operator 是一款非官方的命令行工具,用于自动化合法的 Hack The Box 工作流。它仅适用于在你自己的 Hack The Box 账户和授权的 HTB 实验室环境中使用。
该工具会在用户的配置目录中存储本地配置值,包括 HTB API token。请对此文件保密,切勿将 API token、VPN 文件、日志、flag、配置文件或与挑战相关的密钥提交到公开仓库。
某些功能可能需要提升权限,例如启动或停止 VPN 连接,或修改本地 hosts 文件。在执行前请仔细检查这些操作。
自动化功能(如自定义脚本)在你的系统本地执行。仅运行你理解并信任的脚本。
HTB-Operator 不隶属于 Hack The Box,也未获得其认可或官方支持。
# 命令
该工具是基于命令的。你可以在任何层级使用 `-h` 或 `--help` 来显示帮助信息。当你在不带参数的情况下运行程序时,会显示顶层命令:
```
htb-operator
```

# 初始化
`init` 应该是你运行的第一个命令。如上所述,使用它来注册你的 API token:
```
htb-operator init -api YOUR_API_TOKEN
```

`init` 也支持备用 HTB API URL。仅在谨慎且 HTB 更改 API URL 时才使用此项。
# 信息
`info` 命令获取用户信息。如果未指定用户,它会显示已认证用户的信息。
```
htb-operator info
```
### `-s` / `--username`
使用 `-s USERNAME` 或 `--username USERNAME`,你可以显示 `USERNAME` 的个人资料。示例:
```
htb-operator info -s HTBBot
```

### `-a` / `--activity`
默认情况下,活动限制为最近的 20 条记录。使用 `-a` 或 `--activity` 显示完整的活动历史记录。
```
htb-operator info -a
```
`-s` / `--username` 也可以与此标志一起使用:
```
htb-operator info -a -s HTBBot
```

# 证书
你可以列出或下载已获得的结业证书。
### `-l` / `--list`
列出所有已获得的结业证书:
```
htb-operator certificate --list
```

### 下载
使用 `download` 子命令,你可以下载证书。使用 `--id` 指定证书 ID(例如,来自 `--list`),并使用 `-f` / `--filename` 设置目标路径和文件名。

# 机器
`machine` 命令提供了用于列出靶机、显示详细信息以及启动、停止或重置靶机的子命令。
## 列表
列出活动靶机和已封存靶机。你可以添加过滤标志来优化输出。使用 `htb-operator machine list -h` 查看可用标志。
```
htb-operator machine list
```

即将封存的活动靶机被标记为 `✘/✔`。
### `--limit`
默认情况下,显示最近的 20 台靶机。使用 `--limit ` 更改此值。示例:
```
htb-operator machine list --limit 10
```

### `--retired`
如果设置了 `--retired`,则仅显示已封存的靶机。
```
htb-operator machine list --retired
```

### `--active`
如果设置了 `--active`,则仅显示活动靶机。
```
htb-operator machine list --active
```
### `--group-by-os`
更改结果集的分组方式。输出不再按 `Retired` 和 `Active` 分组,而是按操作系统分组。
```
htb-operator machine list --group-by-os
```

## 启动
启动靶机实例。如果另一台靶机已在运行,系统会询问你是否在启动新靶机之前停止它。请指定 `--id` 或 `--name`。
```
htb-operator machine start --id 620
```

### `--start-vpn`
如果设置,将根据配置的 VPN 服务器自动建立 VPN 连接。此操作需要 **root/sudo/admin** 权限。在 Linux 上,系统会提示你输入 sudo 密码。
```
htb-operator machine start --id 620 --start-vpn
```

### `--update-hosts-file`
如果设置,将更新 `/etc/hosts` (Linux) 或 `/drivers/etc/hosts` (Windows,未经测试) 中的 hosts 文件。系统会添加靶机主机名加上后缀 `htb`(例如 `HOSTNAME.htb`)以及分配的 IP 地址。此操作需要 **root/sudo/admin** 权限。在 Linux 上,系统会提示你输入 sudo 密码。
```
htb-operator machine start --id 620 --update-hosts-file
```

### `--wait-for-release`
仅适用于已计划发布的靶机。启动会暂停,直到靶机到达其发布日期/时间并对整个社区开放可用。如果你想争夺一血 (first blood),这会很有用。
```
htb-operator machine start --id 620 --wait-for-release
```
### `--script `
在完成所有先前步骤(例如 IP 分配和可选的 VPN 设置)后,执行自定义 Bash 脚本。`htb-operator` 会设置这些环境变量:
- `$HTB_MACHINE_IP` -> 分配的 IP
- `$HTB_MACHINE_NAME` -> 靶机名称(例如 `Sea`)
- `$HTB_MACHINE_OS` -> 靶机操作系统 (`Linux`, `Windows`, `FreeBSD`, ...)
- `$HTB_MACHINE_DIFFICULTY` -> 靶机难度(例如 `Easy`)
- `$HTB_MACHINE_INFO` -> HTB 提供的信息
- `$HTB_MACHINE_HOSTNAME` -> 主机名(例如 `sea.htb`)
#### 示例
示例脚本:
```
#!/usr/bin/bash
echo "Starting script, assigned IP $HTB_MACHINE_IP and hostname $HTB_MACHINE_HOSTNAME"
nmap "$HTB_MACHINE_HOSTNAME" -p 80 --open
```
命令(可以组合标志以实现自动化):
```
htb-operator machine start --id 620 --script /tmp/example.sh --start-vpn --update-hosts-file
```

在此示例中,由于 VPN 连接已在运行,因此出现了警告。这是提示信息,通常可以忽略。
## 停止
停止当前活动的靶机。
```
htb-operator machine stop
```

### `--stop-vpn`
停止靶机后,停止所有正在运行的 HTB VPN 连接。此操作需要 **root/sudo/admin** 权限。在 Linux 上,系统会提示你输入 sudo 密码。
```
htb-operator machine stop --stop-vpn
```
### `--clean-hosts-file`
从你的 hosts 文件中删除与靶机名称匹配的主机名。此操作需要 **root/sudo/admin** 权限。在 Linux 上,系统会提示你输入 sudo 密码。
```
htb-operator machine stop --clean-hosts-file
```
### 示例
你可以组合上面显示的 `stop` 标志:
```
htb-operator machine stop --stop-vpn --clean-hosts-file
```

## 重置
重置当前活动的靶机。
```
htb-operator machine reset
```
### `--update-hosts-file`
更新 hosts 文件,其工作方式与 `machine start --update-hosts-file` 完全相同。
```
htb-operator machine reset --update-hosts-file
```
## 延长
延长靶机的到期时间。
```
htb-operator machine extend
```
## 状态
返回有关当前活动靶机的信息。

## 信息
显示有关通过 `--id` 或 `--name` 指定的靶机的详细信息。
```
htb-operator machine info --id 620
```

## 提交
提交当前活动靶机的 flag。使用 `--user-flag` 提交普通用户 flag,使用 `--root-flag` 提交 root flag。你还需要使用 `-d` 来进行难度评分(从 `1` = `Piece of Cake` 到 `10` = `Brainfuck`)。
```
htb-operator machine submit --user-flag -d
```
## ssh-grab
建立到目标主机的 SSH 连接。然后尝试从 `/home/USERNAME/user.txt` (非 root 用户) 或 `/root/root.txt` (root 用户) 读取 flag,并将其提交给 HTB 以用于当前活动的靶机。你还需要使用 `-d` 提供难度评分(从 `1` = `Piece of Cake` 到 `10` = `Brainfuck`)。
```
htb-operator machine ssh-grab -u -p -i -d
```
# 挑战
`challenge` 命令提供了用于列出挑战、显示详细信息、下载文件/writeup、启动挑战实例以及提交 flag 的子命令。示例:下载文件、解压并使用单条命令启动实例:
```
htb-operator challenge download --name "Hunting License" --unzip -s
```
## 搜索
使用 `search` 查找包含搜索词的挑战。`--name` 是必需的。
_BLOCK_31/>

### `--unsolved`
仅显示未解决的挑战。如果同时提供了 `--solved` 和 `--unsolved`,则返回未解决的挑战。
### `--solved`
仅显示已解决的挑战。如果同时提供了 `--solved` 和 `--unsolved`,则返回未解决的挑战。
### `--todo`
仅显示设置了 `TODO` 标志的挑战。
### `--category`
仅显示指定类别的挑战。你可以提供多个用逗号分隔的类别。示例:
```
htb-operator challenge search --name Spook --category Web,Crypto,Pwn
```

### `--difficulty`
仅显示符合指定难度的挑战。
# Prolabs
`prolabs` 命令提供了用于列出所有 ProLabs 以及获取特定 ProLab 详细信息的子命令。
## 列表
列出所有 ProLabs。
```
htb-operator prolabs list
```

## 信息
获取有关通过 `--id` 或 `--name` 指定的 ProLab 的详细信息。
```
htb-operator prolabs info --name APTLabs
```

`info` 已经包含了 ProLab 的 flag 和靶机。要进行专注于特定内容的查看,请使用以下专用子命令:
## flags
仅列出 ProLab 的 flag。
```
htb-operator prolabs flags --name APTLabs
```
## 机器
仅列出 ProLab 的靶机。
```
htb-operator prolabs machines --name APTLabs
```
## 进度
显示归属/证书进度以及里程碑状态。
```
htb-operator prolabs progress --name APTLabs
```
## changelog
显示 ProLab 的更新日志记录。默认情况下,显示最新的 20 条记录。
```
htb-operator prolabs changelog --name APTLabs --limit 20
```
## 重置状态
显示重置状态以及上次重置的时间戳(如果有)。
```
htb-operator prolabs reset-status --name APTLabs
```
## 提交
使用 `submit` 提交 ProLab 的 flag。示例:
```
htb-operator prolabs submit --name "PROLAB" --flag 'HTB{FAKE_FLAG}'
```
# VPN
**在 Windows 上不起作用。**
你可以启动和停止 HTB VPN 连接、查看 VPN 状态、下载 OpenVPN 文件,并针对所有或选定的 VPN 服务器运行基准测试。
## 列表
列出 VPN 服务器。你可以按位置或服务器类型(实验室、prolabs 等)进行筛选。标志可以组合使用。使用帮助命令获取详细信息。
```
htb-operator vpn list --location US
```

## 下载
下载给定 VPN 服务器 ID 的 OpenVPN 文件。你可以从 `list` 子命令中获取该 ID。使用帮助命令获取详细信息。
```
htb-operator vpn download --id --path /tmp/test.ovpn
```
## 启动
启动给定服务器的 VPN 连接。如果未分配区域或“VPN Access”(由 HTB 定义),`htb-operator` 会在请求确认后尝试切换到相应的“VPN Access”。此操作需要 root/admin 权限。
```
htb-operator vpn start --id 35
```

## 停止
停止所有正在运行的 HTB VPN 连接。此操作需要 root/admin 权限。
```
htb-operator vpn stop
```

## 切换
切换可访问的 VPN 服务器。使用 `--id` 指定目标服务器。
```
htb-operator vpn switch --id 28
```

## benchmark
对所有 VPN 服务器或选定的子集运行基准测试。使用帮助命令来细化测试集。这可能需要耗费大量时间,具体取决于你的互联网连接和测试规模。
```
htb-operator vpn benchmark --only-accessible
```

# Seasons
你可以使用 `list` 子命令显示当前或过去赛季的结果。使用 `info` 获取更多详细信息。
```
htb-operator seasons list
```

## 信息
`info` 子命令提供 `--ids` 以仅显示选定的赛季。它还支持 `--username` 以查看其他用户的结果。你可以组合使用 `--ids` 和 `--username`。
```
htb-operator seasons info --username HTBBot
```

# 徽章
你可以使用 `badge list` 显示所有 HTB 徽章。
```
htb-operator badge list
```

你还可以使用 `--open` 筛选未解锁的徽章(尚未获得的徽章)。使用 `--category` 按类别筛选。你还可以使用 `--username` 显示其他用户的徽章状态。标志可以组合使用。
```
htb-operator badge list --username HTBBot --category Rank,Challenge
```

# Pwnbox
如果你有一个正在运行的 Pwnbox 实例,你可以检查状态、无需手动处理凭据即可建立 SSH 连接、在默认浏览器中打开 Pwnbox 桌面,或者终止正在运行的实例。由于 HTB 实现的限制,目前无法通过 `htb-operator` 启动新的 Pwnbox 实例。
## 状态
读取正在运行的 Pwnbox 实例的状态。
```
htb-operator pwnbox status
```

## ssh
**在 Windows 上不起作用。**
建立到正在运行的 Pwnbox 实例的 SSH 连接。你的系统上必须安装 `sshpass`。
```
htb-operator pwnbox ssh
```

## 打开
在默认浏览器中打开 Pwnbox 桌面。
```
htb-operator pwnbox open
```
## 终止
终止正在运行的 Pwnbox 实例。
```
htb-operator pwnbox terminate
```




Tests
OS


Architecture
-supported-success)
Misc
### Hack The Box 工作流的非官方 CLI 自动化工具
HTB-Operator 由 [user0x1337](https://github.com/user0x1337) 开发和维护。它与流行的网络安全培训平台 [Hack The Box](https://www.hackthebox.com/) API 交互。其主要目标是节省使用 HTB 的时间。
OS
Architecture
Misc
3. 创建 token。
4. 保存 token。
5. 运行:
```
htb-operator init -api YOUR_API_TOKEN
```
API token(及其他设置)本地存储在:
- Linux: `$HOME/.config/htb-operator/config.ini`
- Windows: `%APPDATA%\htb-operator\config.ini`
# 安全提示
HTB-Operator 是一款非官方的命令行工具,用于自动化合法的 Hack The Box 工作流。它仅适用于在你自己的 Hack The Box 账户和授权的 HTB 实验室环境中使用。
该工具会在用户的配置目录中存储本地配置值,包括 HTB API token。请对此文件保密,切勿将 API token、VPN 文件、日志、flag、配置文件或与挑战相关的密钥提交到公开仓库。
某些功能可能需要提升权限,例如启动或停止 VPN 连接,或修改本地 hosts 文件。在执行前请仔细检查这些操作。
自动化功能(如自定义脚本)在你的系统本地执行。仅运行你理解并信任的脚本。
HTB-Operator 不隶属于 Hack The Box,也未获得其认可或官方支持。
# 命令
该工具是基于命令的。你可以在任何层级使用 `-h` 或 `--help` 来显示帮助信息。当你在不带参数的情况下运行程序时,会显示顶层命令:
```
htb-operator
```

# 初始化
`init` 应该是你运行的第一个命令。如上所述,使用它来注册你的 API token:
```
htb-operator init -api YOUR_API_TOKEN
```

`init` 也支持备用 HTB API URL。仅在谨慎且 HTB 更改 API URL 时才使用此项。
# 信息
`info` 命令获取用户信息。如果未指定用户,它会显示已认证用户的信息。
```
htb-operator info
```
### `-s` / `--username`
使用 `-s USERNAME` 或 `--username USERNAME`,你可以显示 `USERNAME` 的个人资料。示例:
```
htb-operator info -s HTBBot
```

### `-a` / `--activity`
默认情况下,活动限制为最近的 20 条记录。使用 `-a` 或 `--activity` 显示完整的活动历史记录。
```
htb-operator info -a
```
`-s` / `--username` 也可以与此标志一起使用:
```
htb-operator info -a -s HTBBot
```

# 证书
你可以列出或下载已获得的结业证书。
### `-l` / `--list`
列出所有已获得的结业证书:
```
htb-operator certificate --list
```

### 下载
使用 `download` 子命令,你可以下载证书。使用 `--id` 指定证书 ID(例如,来自 `--list`),并使用 `-f` / `--filename` 设置目标路径和文件名。

# 机器
`machine` 命令提供了用于列出靶机、显示详细信息以及启动、停止或重置靶机的子命令。
## 列表
列出活动靶机和已封存靶机。你可以添加过滤标志来优化输出。使用 `htb-operator machine list -h` 查看可用标志。
```
htb-operator machine list
```

即将封存的活动靶机被标记为 `✘/✔`。
### `--limit`
默认情况下,显示最近的 20 台靶机。使用 `--limit 标签:Blue Team, Python, 应用安全, 效率工具, 无后门, 网络安全训练, 网络调试, 自动化, 逆向工具