k31337/htb-cli

GitHub: k31337/htb-cli

一款非官方的 Hack The Box API 命令行工具,让用户在终端中完成靶机管理、flag 提交、VPN 配置和赛季追踪等操作。

Stars: 0 | Forks: 0

# htb-cli ![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg) ![Python](https://img.shields.io/badge/python-3.10%2B-blue?logo=python&logoColor=white) ![License](https://img.shields.io/badge/license-MIT-blue) ![Status](https://img.shields.io/badge/status-work%20in%20progress-yellow) ![Built with Typer](https://img.shields.io/badge/built%20with-Typer-009485?logo=python&logoColor=white) 一个非官方的命令行工具,用于查询 [Hack The Box](https://www.hackthebox.com/) API:浏览靶机和挑战,生成和管理你的活动实例,提交 flag,管理你的 VPN,追踪赛季和排行榜,以及查看你的个人资料,所有这些都可以在终端中完成。 基于 [Typer](https://typer.tiangolo.com/)、[Rich](https://rich.readthedocs.io/) 和 [httpx](https://www.python-httpx.org/) 构建。 ## 目录 - [功能](#features) - [环境要求](#requirements) - [安装](#installation) - [配置](#configuration) - [使用方法](#usage) - [故障排除](#troubleshooting) - [运行测试](#running-tests) - [项目结构](#project-structure) - [免责声明](#disclaimer) ## 功能 - 浏览活动和已退役的靶机,支持分页和带颜色的难度标识 - 查看单个靶机或挑战的完整详情 - 生成、重置和停止你的活动靶机 - 直接从终端提交 user/root flag - 按分类浏览挑战 - 查看你自己的 HTB 资料和统计数据 - 管理你的 VPN 连接:检查状态、列出服务器、切换服务器以及下载 `.ovpn` 文件 - 浏览 HTB 赛季:列出各个赛季、查看当前活动赛季的靶机、检查你的排名和进度 - 浏览排行榜:全球顶尖用户、团队、大学以及按国家/地区排名 - 在每个读取命令上支持原始 JSON 输出 (`--json`),方便用于脚本编写 ## 环境要求 - Python 3.10 或更高版本 - 一个 HTB API token ### 获取你的 HTB token 1. 登录 [hackthebox.com](https://www.hackthebox.com/) 2. 前往 **Settings > App Tokens** 3. 创建一个新 token 并复制它 请妥善保管此 token。任何持有它的人都可以在 API 上模拟你的身份进行操作。如果发生泄露,请立即在同一设置页面将其撤销,并创建一个新的 token。 ## 安装 ``` git clone https://github.com/k31337/htb-cli.git cd htb-cli ``` ### 选项 1:pipx(推荐) [pipx](https://pipx.pypa.io/) 会将 CLI 安装在其独立的隔离环境中,但能让 `htb` 命令在全局可用,无需激活任何环境。 ``` python -m pip install --user pipx python -m pipx ensurepath ``` 关闭并重新打开你的终端以使 `PATH` 更改生效,然后执行: ``` pipx install -e . ``` `-e`(可编辑)标志意味着 pipx 会直接链接到这个代码库,因此你拉取或做出的任何更改都会立即生效,无需重新安装。 ### 选项 2:虚拟环境 ``` python -m venv .venv pip install -e . ``` 激活虚拟环境(每次打开新终端时都要执行此操作): ``` source .venv/Scripts/activate # Git Bash .venv\Scripts\Activate.ps1 # PowerShell .venv\Scripts\activate.bat # CMD ``` ## 配置 你有两种身份验证方式: ### 选项 1:`htb login`(跨会话持久化) ``` htb login ``` 系统会提示你输入 token(输入会被隐藏)。它会保存到 `~/.htb-cli/config.json` 中,并且每次运行 CLI 时都会自动加载,即使关闭了终端也是如此。 要移除它: ``` htb logout ``` ### 选项 2:`HTB_TOKEN` 环境变量(仅限当前会话) ``` export HTB_TOKEN=your_token_here # Git Bash $env:HTB_TOKEN = "your_token_here" # PowerShell set HTB_TOKEN=your_token_here # CMD ``` 这仅在当前终端会话中有效,如果同时设置了两者,它的优先级高于已保存的登录信息。 ## 使用方法 ``` htb --help htb --help ``` ### 命令 | 命令 | 描述 | | -------------------------------------- | ------------------------------------------------------ | | `htb login` | 保存你的 API token,这样就无需再次设置 | | `htb logout` | 移除已保存的 API token | | `htb version` | 显示 CLI 版本 | | `htb machines [--retired] [--json]` | 列出活动或已退役的靶机 | | `htb machine [--json]` | 显示单个靶机的详细信息 | | `htb spawn ` | 生成靶机并等待获取其 IP | | `htb stop ` | 停止活动靶机 | | `htb reset ` | 重置活动靶机 | | `htb submit ` | 提交 user/root flag | | `htb challenges [--json]` | 列出挑战 | | `htb challenge [--json]` | 显示单个挑战的详细信息 | | `htb profile [--json]` | 显示你自己的 HTB 资料 | | `htb vpn status [--json]` | 显示你当前分配的 VPN 服务器 | | `htb vpn servers [--json]` | 列出可用的 VPN 服务器 | | `htb vpn switch ` | 切换到不同的 VPN 服务器 | | `htb vpn download [--tcp] [-o file]` | 下载服务器的 `.ovpn` 配置文件 | | `htb season list [--json]` | 列出所有 HTB 赛季 | | `htb season machines [--json]` | 列出当前活动赛季中的靶机 | | `htb season progress [--json]` | 显示你在当前活动赛季中的进度 | | `htb leaderboard users [--json]` | 全球顶尖黑客 | | `htb leaderboard teams [--json]` | 全球顶尖团队 | | `htb leaderboard universities [--json]` | 全球顶尖大学 | | `htb leaderboard country [--json]` | 特定国家/地区的顶尖黑客(例如 ES, US, DE) | 较长的列表每次会分页显示 15 条结果:按 `n` 键查看下一页,`p` 查看上一页,`q` 退出。向任何读取命令传递 `--json` 参数以获取原始 JSON 数据,从而方便通过管道传递给 `jq` 等工具。 ### 典型操作流程 ``` htb login htb vpn servers htb vpn switch 698 htb vpn download 698 -o lab.ovpn htb machines htb spawn 912 htb submit 912 32f7a3b1... htb stop 912 ``` ## 故障排除 - **`'htb' is not recognized as an internal or external command`**:如果你使用 pipx 安装,请确保你执行了 `pipx ensurepath` 并重新打开了终端,并且是从代码库文件夹中运行的 `pipx install -e .`。如果你使用的是 venv 方式,请按照上述说明激活虚拟环境。 - **`HTB token not found`**:运行 `htb login`,或者在当前终端会话中设置 `HTB_TOKEN` 环境变量。 - **`Invalid or expired token`**:从 Settings > App Tokens 生成一个新的 token,然后再次运行 `htb login`(或更新 `HTB_TOKEN`)。 - **`Not found. Check the ID or name and try again.`**:ID/名称不存在或输入错误——请在 HTB 网站上仔细核对。 - **生成/重置失败并提示关于 VIP 的信息**:启动大多数活动靶机需要订阅 HTB VIP。 ## 运行测试 测试使用 [respx](https://lundberg.github.io/respx/) 模拟 HTB API,因此不需要真实的 token 或网络访问权限。 ``` pip install -e ".[test]" pytest -v ``` ## 项目结构 ``` src/htb_cli/ ├── __init__.py ├── api.py # HTTP client for the HTB API ├── cli.py # Entry point: registers commands from each module below └── commands/ ├── _shared.py # Shared console, error handling, pagination, formatters ├── auth.py # version, login, logout ├── machines.py # machines, machine, spawn, stop, reset, submit ├── challenges.py # challenges, challenge ├── profile.py # profile ├── vpn.py # vpn status, vpn servers, vpn switch, vpn download ├── season.py # season list, season machines, season progress └── leaderboard.py # leaderboard users, teams, universities, country tests/ ├── conftest.py # Shared fixtures (fake token, isolated config file) ├── test_token_storage.py ├── test_api_client.py └── test_vpn_season_leaderboard.py ``` ## 免责声明 这是一个非官方的、由社区构建的工具,不附属于 Hack The Box,也未获得其认可。请仅使用你自己的账号和 API token 进行操作,并遵守 [Hack The Box 的服务条款](https://www.hackthebox.com/terms-and-conditions)。
标签:API集成, Hack The Box, Python, 可观测性, 安全, 安全规则引擎, 插件系统, 无后门, 网络信息收集, 网络调试, 自动化, 超时处理, 运行时操纵, 逆向工具