M507/RamiGPT
GitHub: M507/RamiGPT
RamiGPT 是一个利用 AI 大模型在 SSH 目标上自动完成 Linux 权限提升并对多模型进行基准对比的攻击性安全 agent。
Stars: 861 | Forks: 191
# RamiGPT
**RamiGPT** 是一个由 AI 驱动的攻击性安全 agent,旨在攻破 root 账户。借助 [PwnTools](http://github.com/Gallopsled/pwntools) 和 OpwnAI 的能力,RamiGPT 成功闯过了 [VulnHub](https://www.vulnhub.com/) 中多个系统的权限提升场景,并在不到一分钟的时间内获得了 root 访问权限。
## 协作基准测试结果
**仅实时数据** —— 以下部分根据 [`data/benchmark/results/`](data/benchmark/results/) 下的真实运行记录(单次运行的 `result.json` 记录表 + [`master.json`](data/benchmark/results/master.json))重新生成。当你想与团队共享结果时,请提交更新后的记录表(无自动 git 操作)。
各场景的详细分类(配置 · 角色 · 目标 · 工具)以及相同的整体/配置表也位于 [`benchmark.md`](benchmark.md) 中。
**协作合并原理:** 每次运行都是 `data/benchmark/results/` 下的一个记录表。当主表重新构建时,如果运行之间共享以下条件,它们将**合并到相同的统计数据中**:
- **模型 `key_name`** —— 权重 + modelfile 参数(注册表位于 [`data/benchmark/models/`](data/benchmark/models/))
- **硬件实验室配置** —— `.env` 中的 `BENCHMARK_GPU_*`(GPU 名称、VRAM MiB、驱动程序、CUDA)
- **场景** —— 角色、目标和工具
`BENCHMARK_GPU_POWER_LIMIT` 会记录在每次运行记录表上,但**不会**影响合并键(相同的 GPU 实验室配置即使在功率上限不同时也会合并)。
**计入通过率的指标:** 仅包含**获得 root** 和**实际运行超时**。像 `ai_provider_error`、`max_requests`、工具上传失败以及其他基础设施/设置错误等中止情况会被记录,但从通过率和平均耗时中排除。
可见的 **profile**(配置)标签格式为 `key_name · GPU · VRAM · …`。相同的配置 + 场景 → 合并统计。不同的模型配置或 GPU 实验室 → 独立的配置行。
示例文件格式(未合并到实时主表中):[`data/benchmark/examples/`](data/benchmark/examples/)。
_最后更新:2026-07-29T13:32:28.551768+00:00 · 41 次运行 · [完整 JSON](data/benchmark/results/master.json)_
**目录:** 10 个模型 key,10 个配置(模型 + 硬件),1 个角色,285 个目标,1 个工具,2 个硬件配置
_身份标识:**模型 `key_name`** = 权重 + modelfile 参数(注册表)。**配置** = 模型 `key_name` · GPU 实验室(`BENCHMARK_GPU_*`)。当配置 + 角色 + 目标 + 工具全部匹配时,运行记录将进行合并。_
#### 整体情况 — openrouter-deepseek-deepseek-v3.2 · Online AI Service
| 指标 | 数值 |
|--------|------:|
| 观测次数 | 23 |
| 运行次数 | 3 |
| 通过率 (尝试) | 46.7% |
| 获得 root 率 | 63.6% |
| 获得 root 计数 | 7 |
| 中位耗时 (s) | 181.077 |
| 平均耗时 (s) | 116.223 |
| 达到 root 平均 token 数 | 6,148 |
| 达到 root 中位 token 数 | 3,027 |
| 达到 root 平均耗时 | 42.034 |
| 达到 root 平均 AI 请求数 | 5.429 |
| 达到 root 平均命令数 | 2.143 |
| 达到 root 每秒 token 数 | 146.273 |
#### 整体情况 — openwebui-deepseek-r1-14b · Online AI Service
| 指标 | 数值 |
|--------|------:|
| 观测次数 | 82 |
| 运行次数 | 6 |
| 通过率 (尝试) | 15.4% |
| 获得 root 率 | 15.8% |
| 获得 root 计数 | 12 |
| 中位耗时 (s) | 181.090 |
| 平均耗时 (s) | 222.133 |
| 达到 root 平均 token 数 | 4,921 |
| 达到 root 中位 token 数 | 5,229 |
| 达到 root 平均耗时 | 396.196 |
| 达到 root 平均 AI 请求数 | 1.417 |
| 达到 root 平均命令数 | 1.083 |
| 达到 root 每秒 token 数 | 12.421 |
#### 整体情况 — openwebui-openai-gpt-3.5-turbo-latest · Online AI Service
| 指标 | 数值 |
|--------|------:|
| 观测次数 | 153 |
| 运行次数 | 12 |
| 通过率 (尝试) | 54.5% |
| 获得 root 率 | 55.3% |
| 获得 root 计数 | 42 |
| 中位耗时 (s) | 80.691 |
| 平均耗时 (s) | 96.735 |
| 达到 root 平均 token 数 | 0 |
| 达到 root 中位 token 数 | 0 |
| 达到 root 平均耗时 | 65.773 |
| 达到 root 平均 AI 请求数 | 7.095 |
| 达到 root 平均命令数 | 5.690 |
| 达到 root 每秒 token 数 | 0.000 |
#### 整体情况 — openwebui-openai-gpt-4-turbo-latest · Online AI Service
| 指标 | 数值 |
|--------|------:|
| 观测次数 | 59 |
| 运行次数 | 3 |
| 通过率 (尝试) | 31.2% |
| 获得 root 率 | 33.3% |
| 获得 root 计数 | 5 |
| 中位耗时 (s) | 181.183 |
| 平均耗时 (s) | 134.288 |
| 达到 root 平均 token 数 | 0 |
| 达到 root 中位 token 数 | 0 |
| 达到 root 平均耗时 | 31.030 |
| 达到 root 平均 AI 请求数 | 5.400 |
| 达到 root 平均命令数 | 4.400 |
| 达到 root 每秒 token 数 | 0.000 |
#### 整体情况 — openwebui-openai-gpt-4o-latest · Online AI Service
| 指标 | 数值 |
|--------|------:|
| 观测次数 | 38 |
| 运行次数 | 2 |
| 通过率 (尝试) | 100.0% |
| 获得 root 率 | 100.0% |
| 获得 root 计数 | 11 |
| 中位耗时 (s) | 5.009 |
| 平均耗时 (s) | 27.955 |
| 达到 root 平均 token 数 | 0 |
| 达到 root 中位 token 数 | 0 |
| 达到 root 平均耗时 | 27.955 |
| 达到 root 平均 AI 请求数 | 4.182 |
| 达到 root 平均命令数 | 1.455 |
| 达到 root 每秒 token 数 | 0.000 |
#### 整体情况 — openwebui-openai-gpt-4o-mini-latest · Online AI Service
| 指标 | 数值 |
|--------|------:|
| 观测次数 | 57 |
| 运行次数 | 3 |
| 通过率 (尝试) | — |
| 获得 root 率 | — |
| 获得 root 计数 | 0 |
| 中位耗时 (s) | — |
| 平均耗时 (s) | — |
| 达到 root 平均 token 数 | — |
| 达到 root 中位 token 数 | — |
| 达到 root 平均耗时 | — |
| 达到 root 平均 AI 请求数 | — |
| 达到 root 平均命令数 | — |
| 达到 root 每秒 token 数 | — |
#### 整体情况 — openwebui-openai-gpt-5-latest · Online AI Service
| 指标 | 数值 |
|--------|------:|
| 观测次数 | 58 |
| 运行次数 | 3 |
| 通过率 (尝试) | 25.0% |
| 获得 root 率 | 25.8% |
| 获得 root 计数 | 8 |
| 中位耗时 (s) | 61.037 |
| 平均耗时 (s) | 96.697 |
| 达到 root 平均 token 数 | 0 |
| 达到 root 中位 token 数 | 0 |
| 达到 root 平均耗时 | 64.496 |
| 达到 root 平均 AI 请求数 | 1.375 |
| 达到 root 平均命令数 | 1.250 |
| 达到 root 每秒 token 数 | 0.000 |
#### 整体情况 — openwebui-openai-gpt-5-mini-latest · Online AI Service
| 指标 | 数值 |
|--------|------:|
| 观测次数 | 19 |
| 运行次数 | 1 |
| 通过率 (尝试) | 0.0% |
| 获得 root 率 | 0.0% |
| 获得 root 计数 | 0 |
| 中位耗时 (s) | 181.084 |
| 平均耗时 (s) | 181.105 |
| 达到 root 平均 token 数 | — |
| 达到 root 中位 token 数 | — |
| 达到 root 平均耗时 | — |
| 达到 root 平均 AI 请求数 | — |
| 达到 root 平均命令数 | — |
| 达到 root 每秒 token 数 | — |
#### 整体情况 — openwebui-openai-gpt-5.2-latest · Online AI Service
| 指标 | 数值 |
|--------|------:|
| 观测次数 | 326 |
| 运行次数 | 4 |
| 通过率 (尝试) | 24.9% |
| 获得 root 率 | 25.0% |
| 获得 root 计数 | 60 |
| 中位耗时 (s) | 181.209 |
| 平均耗时 (s) | 153.241 |
| 达到 root 平均 token 数 | 0 |
| 达到 root 中位 token 数 | 0 |
| 达到 root 平均耗时 | 68.189 |
| 达到 root 平均 AI 请求数 | 6.317 |
| 达到 root 平均命令数 | 2.983 |
| 达到 root 每秒 token 数 | 0.000 |
#### 整体情况 — openwebui-qwen3-14b · Online AI Service
| 指标 | 数值 |
|--------|------:|
| 观测次数 | 76 |
| 运行次数 | 4 |
| 通过率 (尝试) | 2.8% |
| 获得 root 率 | 3.0% |
| 获得 root 计数 | 2 |
| 中位耗时 (s) | 181.197 |
| 平均耗时 (s) | 189.360 |
| 达到 root 平均 token 数 | 5,145 |
| 达到 root 中位 token 数 | 5,145 |
| 达到 root 平均耗时 | 138.554 |
| 达到 root 平均 AI 请求数 | 1.000 |
| 达到 root 平均命令数 | 1.000 |
| 达到 root 每秒 token 数 | 37.134 |
#### 配置
| 配置 | n | 通过 | 获得 root | 中位耗时 | Token→root | 耗时→root | AI 请求→root |
|---------|--:|-----:|---------:|-----------:|------------:|-----------------:|------------:|
| openwebui-openai-gpt-4o-latest · Online AI Service | 38 | 100.0% | 100.0% | 5.009 | 0 | 27.955 | 4.182 |
| openwebui-openai-gpt-3.5-turbo-latest · Online AI Service | 153 | 54.5% | 55.3% | 80.691 | 0 | 65.773 | 7.095 |
| openrouter-deepseek-deepseek-v3.2 · Online AI Service | 23 | 46.7% | 63.6% | 181.077 | 6,148 | 42.034 | 5.429 |
| openwebui-openai-gpt-4-turbo-latest · Online AI Service | 59 | 31.2% | 33.3% | 181.183 | 0 | 31.030 | 5.400 |
| openwebui-openai-gpt-5-latest · Online AI Service | 58 | 25.% | 25.8% | 61.037 | 0 | 64.496 | 1.375 |
| openwebui-openai-gpt-5.2-latest · Online AI Service | 326 | 24.9% | 25.0% | 181.209 | 0 | 68.189 | 6.317 |
| openwebui-deepseek-r1-14b · Online AI Service | 82 | 15.4% | 15.8% | 181.090 | 4,921 | 396.196 | 1.417 |
| openwebui-qwen3-14b · Online AI Service | 76 | 2.8% | 3.0% | 181.197 | 5,145 | 138.554 | 1.000 |
| openwebui-openai-gpt-5-mini-latest · Online AI Service | 19 | 0.0% | 0.0% | 181.084 | — | — | — |
| openwebui-openai-gpt-4o-mini-latest · Online AI Service | 57 | — | — | — | — | — | — |
#### Token 效率最高的配置(达到 root 平均 token 数最低)
| 配置 | Token→root | 获得 root | n |
|---------|------------:|---------:|--:|
| openwebui-openai-gpt-3.5-turbo-latest · Online AI Service | 0 | 55.3% | 153 |
| openwebui-openai-gpt-4-turbo-latest · Online AI Service | 0 | 33.3% | 59 |
| openwebui-openai-gpt-4o-latest · Online AI Service | 0 | 100.0% | 38 |
| openwebui-openai-gpt-5-latest · Online AI Service | 0 | 25.8% | 58 |
| openwebui-openai-gpt-5.2-latest · Online AI Service | 0 | 25.0% | 326 |
| openwebui-deepseek-r1-14b · Online AI Service | 4,921 | 15.8% | 82 |
| openwebui-qwen3-14b · Online AI Service | 5,145 | 3.0% | 76 |
| openrouter-deepseek-deepseek-v3.2 · Online AI Service | 6,148 | 63.6% | 23 |

上图展示了**完整 AI** 循环:RamiGPT 从会话上下文中构建权限提升 prompt,请求已配置的 provider 给出下一个 shell 命令,通过 SSH 执行它,将输出反馈到历史记录中,并不断重复,直到检测到 root 或请求预算耗尽。
## Web 工作区
RamiGPT 以**多会话工作区**的形式打开 —— 包含一个侧边栏清单和针对每个 SSH 目标的服务器工作区。创建会话,准备好后连接,然后使用 **Terminal** 标签页进行交互式 shell 和 AI 工具操作。

| 区域 | 功能描述 |
|------|----------------|
| **侧边栏** | 收藏夹、最近的会话以及可拖拽的分组(Production、Staging、Benchmark 等)。 |
| **会话工作区** | 连接 / 断开连接、终端 I/O、Facts / Hints / Avoid 队列以及 Full AI 面板。 |
| **顶部栏** | 搜索、**Benchmark**、**New Session**、**AI Settings**、**App Settings** 以及日志清理。 |
### 典型工作流
1. **配置 AI** —— 顶部栏 → 机器人图标(**AI Settings**)。选择 provider、模型和最大 Full AI 请求数。
2. **创建或选择会话** —— **New Session** 或点击侧边栏中的条目。凭据会根据 `user@host:port` 记住。
3. **连接** —— 打开会话并点击 **Connect**。输出将在 Terminal 标签页中流式显示。
4. **运行 Full AI** —— 点击 **Full AI** 启动自主权限提升循环,或者从工具下拉菜单中选择 **BeRoot** / **LinPEAS**(可选勾选 **AI** 复选框以串联至 Full AI)。
5. **引导模型** —— 在右侧面板中添加 Facts、Hints 或 Avoid 条目;使用 **Import** / **Export** 在会话之间共享 prompt 上下文。

## 配置:AI Providers
RamiGPT 支持多个 AI 后端。通过 **Settings**
按钮(机器人图标)进行配置。API key 来自 `.env`;provider、模型、URL 和 UI 选择
保存在 `data/ai_settings.json` 中。

### 支持的 providers
| Provider | `AI_PROVIDER` 值 | 备注 |
|----------|---------------------|-------|
| Ollama | `ollama` (默认) | 原生 Ollama OpenAI 兼容 API |
| Open WebUI | `openwebui` | Open WebUI OpenAI 兼容 API |
| OpenAI | `openai` | 官方 OpenAI Chat Completions API |
| OpenRouter | `openrouter` | 官方 OpenRouter SDK(多模型网关) |
| Cursor | `cursor` | Cursor Cloud Agents API |
### 快速设置
1. **复制示例环境变量文件:**
cp .env.example .env
2. **Ollama** —— 指向你的 Ollama 主机(OpenAI 兼容的 `/v1`):
AI_PROVIDER=ollama
OLLAMA_BASE_URL=http://127.0.0.1:11434
OLLAMA_API_KEY=ollama
OLLAMA_MODEL=qwen3:8b
3. **Open WebUI** —— 指向你的实例(`/api`):
AI_PROVIDER=openwebui
OPENWEBUI_BASE_URL=http://localhost:3000
OPENWEBUI_API_KEY=your_openwebui_token
OPENWEBUI_MODEL=llama3.1
4. **OpenAI** —— 设置你的 key(以及可选的模型):
AI_PROVIDER=openai
OPENAI_API_KEY=your_api_key_here
OPENAI_MODEL=gpt-5-mini
5. **OpenRouter** —— 设置你的 OpenRouter key(以及可选的模型):
AI_PROVIDER=openrouter
OPENROUTER_API_KEY=your_openrouter_api_key
OPENROUTER_MODEL=openai/gpt-4o-mini
6. **Cursor API** —— 设置你的 Cursor API key(以及可选的模型):
AI_PROVIDER=cursor
CURSOR_API_KEY=your_cursor_api_key
CURSOR_MODEL=composer-2.5
7. 在运行的应用程序中,点击 **AI Settings** 更改 provider、模型、key 和
最大 AI 请求数。保存时会将非机密选择写入
`data/ai_settings.json`,并将 API key 写入 `.env`。**Reload from disk** 会重新加载
这两个文件。在进行 benchmark 或 Full AI 运行前,使用 **Test connection** 验证当前活动的 provider。
### 应用程序设置
**App Settings**(滑块图标)控制运行时行为,与 provider 选择一起保存在 `data/ai_settings.json` 中:

| 设置 | 用途 |
|---------|---------|
| **角色 / 目标** | prompt 的起始角色设定(来自 `ramigpt/config/role_objectives.json`)。 |
| **每次 prompt 轮换角色** | 在 Full AI 轮次中循环遍历所有 JSON 角色。 |
| **升级版 Session v2** | 更好的命令提取和 PTY 处理(密码提示、编辑器、嵌套 shell)。 |
| **在终端显示 AI prompt** | 在每次 AI 请求前打印 `[DEBUG] About to send prompt:`。 |
| **在 AI 历史记录中包含命令输出** | 将选定的 shell 输出发送回模型(不仅仅是先前的命令)。 |
| **终端工具** | 在 Terminal 下拉菜单中显示或隐藏 BeRoot / LinPEAS / LinEnum。 |
### 获取 OpenAI API Key
1. 访问 [OpenAI](https://www.openai.com/) 并注册 / 登录。
2. 在 API 控制面板中创建一个 API key。
3. 将其放入 `.env` 作为 `OPENAI_API_KEY`,或将其粘贴到 Settings 窗口中。
### Ollama 注意事项
- Base URL 是 Ollama 主机(例如 `http://127.0.0.1:11434`);RamiGPT 会自动附加 `/v1`。
- 模型名称必须与该主机上的 `ollama list` 匹配。
- 在 **AI Settings** 中使用刷新图标从主机获取实时模型列表。
### Open WebUI 注意事项
- 在 Open WebUI 的 **Settings → Account** 下创建 API key。
- 完全按照模型在 Open WebUI 中显示的格式使用模型 ID(Ollama、OpenAI 或自定义模型)。
- Base URL 应为 Open WebUI 源地址(例如 `http://localhost:3000`);RamiGPT 会自动为兼容的 completions endpoint 附加 `/api`。
### OpenRouter 注意事项
- 在 [openrouter.ai/keys](https://openrouter.ai/keys) 创建 API key。
- 模型 ID 使用 `provider/model` 格式(例如 `openai/gpt-4o-mini`、`anthropic/claude-sonnet-4`)。
- 使用官方 `openrouter` Python SDK;将 `OPENROUTER_BASE_URL` 留空即可使用 `https://openrouter.ai/api/v1`。
- 在 **AI Settings** 中使用刷新图标获取实时的模型目录。
## 使用 Docker 运行
### 前置条件
在运行项目之前,请确保你已安装:
- [Docker](https://docs.docker.com/get-docker/)
- [Docker Compose](https://docs.docker.com/compose/install/)
- 一个 AI 后端(OpenAI key、Ollama 主机、Open WebUI、OpenRouter 或 Cursor API key)
### 设置
克隆仓库并启动 Docker 容器:
```
git clone https://github.com/M507/RamiGPT.git
cd RamiGPT
cp .env.example .env # edit with your provider + keys
docker compose -f docker/docker-compose.yml up -d
```
访问应用程序:[https://127.0.0.1:8443](https://127.0.0.1:8443)
在 Docker 的 `.env` 中设置 `APP_RELOAD=0`,以便容器不会监视源文件进行重载。
## 本地运行
### 前置条件
确保已安装以下内容:
- Python 3 和 pip
- 一个 AI 后端(Ollama、Open WebUI、OpenAI、OpenRouter 或 Cursor API)
- `ansible-core` 2.18–2.19(通过 `requirements.txt`;支持远程实验室主机(如 Ubuntu 20.04)上的 Python 3.8)
- Ubuntu/Debian 主机包(在启动 / 首次 benchmark 部署时自动安装):`openssh-client`、`sshpass`、`openssl`、`ca-certificates`
- 或运行一次:`python3 scripts/ensure_ubuntu_requirements.py`
### 设置
克隆仓库并准备环境:
```
git clone https://github.com/M507/RamiGPT.git
cd RamiGPT
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
chmod +x ./scripts/generate_certs.sh
./scripts/generate_certs.sh
pip install -r requirements.txt
cp .env.example .env # edit provider + API keys
python app.py
```
默认情况下,当 Python、模板或静态文件发生更改时(`APP_RELOAD=1`),本地服务器会**自动重载**。设置 `APP_RELOAD=0` 可禁用此功能。
```
# 可选:关闭 reload
APP_RELOAD=0 python app.py
```
应用程序默认监听 `127.0.0.1:8443`(可通过 `APP_HOST` / `APP_PORT` 覆盖)。
访问应用程序:[https://127.0.0.1:8443](https://127.0.0.1:8443)
TLS 证书通过 `scripts/generate_certs.sh` 在 `certs/` 下生成(用于本地 HTTPS 的自签名证书)。
## 权限提升 Benchmark
RamiGPT 将故意配置不当的 SSH 目标部署到**远程实验室主机**(通过 Ansible),并对每个目标运行 **Full AI** 直到获得 root 权限(或超时)。

### 目标(远程主机上的 Docker Compose)
所有实验室共享一个镜像(`ramigpt-bench-base`);每个服务仅设置 `SSH_PORT` + `MISCONFIG`(参见 `docker/benchmark/apply-misconfig.sh`)。完整清单位于 [`docker/benchmark/misconfigs.md`](docker/benchmark/misconfigs.md) 和 `ramigpt/benchmark/targets.py`。**285** 个目标,端口为 **2170–2454**(主机网络,无 DNAT)。凭据:`priv` / `password`。
部署在远程 Linux 实验室上使用主机网络(`docker/benchmark/docker-compose.yml`)。
```
# 推荐:Benchmark UI → Start (Ansible),或者:
ansible-playbook -i ansible/benchmark/inventory.example.ini ansible/benchmark/playbook.yml
```
部署后,确认每个目标都能获得 root 权限:
```
./scripts/benchmark/verify-misconfigs.sh
# 或者:python3 -m ramigpt.benchmark.verify <将启动 docker 且可用于测试和/或 benchmark 的测试主机 ip>
```
UI Benchmark 模态框 → **Test targets (get root)** 会对配置的远程主机运行相同的探测。
### 从 UI 操作
1. 配置 AI(顶部栏 → **AI Settings**)。
2. 点击 **Benchmark**。
3. 设置**远程实验室主机**(用于 Ansible 的 SSH;从 `data/benchmark/remote.json` 预填充)。
4. 配置**模型计划**和**角色计划**(针对每个目标的多个模型/角色和运行次数)。
5. 选择**目标配置**(默认:**Regression sample**,约 19 个实验室)或使用 **Select all** 选择全套。
6. 设置单项目标超时时间(UI 中默认 **180s**)。
7. **Start Benchmark** —— 会话出现在 **Benchmark** 组下;Full AI 将按顺序在每个目标上运行。
**目标配置**(**Select from** 下拉菜单中的 22 个预设):快速运行(*Does it work?*、*Regression sample*、*Easy & portable*)、主题运行(*Non-sudo*、*Detect-only*、*Cron & scheduled jobs* 等)以及全系列集合(*Classic sudo*、*SUID*、*Credentials* 等)。定义在 `ramigpt/benchmark/targets.py`(`PROFILES`)中。完整的集成详情:[`docker/benchmark/BENCHMARK_INTEGRATION.md`](docker/benchmark/BENCHMARK_INTEGRATION.md)。
### 远程部署
```
# UI 使用的 playbook:
ansible-playbook -i ansible/benchmark/inventory.example.ini ansible/benchmark/playbook.yml
```
UI 中的远程模式会提示输入 SSH 用户名/密码,按需安装 Docker,复制 `docker/benchmark`,启动容器,并在 Full AI 开始之前验证测试套件的 SSH 端口。
需要 `ansible-core` 2.18–2.19(通过 `requirements.txt`;远程实验室需 Python 3.8+)以及 Ubuntu 主机包(`sshpass`、OpenSSH 客户端等)。在 Ubuntu/Debian 上,RamiGPT 会自动安装缺失的 apt 包(`python3 scripts/ensure_ubuntu_requirements.py`、应用程序启动或首次 benchmark 部署/验证时)。
### 内置枚举工具
RamiGPT 集成了多种用于权限提升枚举的工具:
- **[BeRoot](https://github.com/AlessandroZ/BeRoot)**:识别 Linux 上常见的权限提升向量(sudo、SUID、capabilities、可写路径等)。
- **[LinPEAS](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS)**:审计 Linux 环境中的配置不当和漏洞。
- **LinEnum**:轻量级枚举脚本(像 BeRoot 一样上传并运行)。
从 Terminal 工具下拉菜单中运行它们。启用 **AI** 复选框后,RamiGPT 将上传工具、捕获输出,并利用这些发现串联到 **Full AI**。

## 项目布局
应用程序代码位于 `ramigpt/` 下。仓库根目录保持精简:`app.py`(入口)、`requirements.txt` 和 `docker/`。
| 路径 | 作用 |
|------|------|
| `ramigpt/web/` | Flask/Socket.IO UI、路由、shell 层、Full AI hooks |
| `ramigpt/ai/` | AI provider 接口(Ollama、Open WebUI、OpenAI、OpenRouter、Cursor) |
| `ramigpt/domain/` | 权限提升 prompt + root 检测 |
| `ramigpt/config/` | 来自 `.env` 机密信息及 JSON 用户选择的设置 |
| `ramigpt/benchmark/` | Benchmark 编排器(远程 Ansible 部署 + Full AI 运行) |
| `ramigpt/utils/` | 共享辅助程序和日志记录 |
| `tools/` | 内置权限提升工具(BeRoot、LinPEAS) |
| `scripts/` | 运维辅助工具(TLS 证书生成、benchmark 验证) |
| `docs/` | 截图和文档资源 |
| `tests/` | 自动化测试 |
| `docker/benchmark/` | 单镜像 LPE 实验室(`MISCONFIG` 配置;端口 2170–2454)。指南:[`docker/benchmark/BENCHMARK_INTEGRATION.md`](docker/benchmark/BENCHMARK_INTEGRATION.md) |
| `ansible/benchmark/` | 用于在远程主机上部署目标的 Ansible playbook |
| `data/` | 运行时日志、会话和 benchmark 结果(除已提交的 benchmark 表格外均被 gitignored) |
| `data/sessions/hosts/` | 每个已保存 SSH 会话/主机对应一个 JSON 文件 |
| `data/sessions/meta.json` | 分组 + 最近的会话 ID |
| `certs/` | TLS 证书(被 gitignored) |
## 功能
### 会话上下文(Facts、Hints、Avoid)
Terminal AI 面板中的单会话队列可在不编辑 `.env` 的情况下引导 Full AI:
- **Facts** —— 模型应视为既定事实的真实情况(例如内核版本、发现的 SUID 二进制文件)。
- **Hints** —— 建议的方向,但不保证成功。
- **Avoid** —— 已经失败的命令或方法。
使用 **Import** / **Export** 在会话之间移动此上下文,或将其捕获用于报告和 flag。
### Full AI 自主循环
**Full AI** 运行一个后台循环:构建 prompt → 请求 provider → 执行一条 shell 命令 → 追加到历史记录 → 检查 root → 重复。**Stop** 会停止循环;**Guide Me** 会发送单次 AI 交互,而不会启动完整的自主运行。
Session v2(在 **App Settings** 中启用)改进了命令提取,并能处理交互式边缘情况 —— sudo 密码提示、卡住的编辑器以及嵌套的 root shell。
### AI provider 设置
在
**AI Settings** 按钮中切换 **Ollama**、**Open WebUI**、**OpenAI**、**OpenRouter** 和 **Cursor API**。选择会持久化到 `data/ai_settings.json` 中;
`.env` 仍然是 API key 和初始默认值的来源。
## 免责声明
RamiGPT 仅用于**教育和授权的安全测试**。请负责任地使用它,并且仅在获得明确许可进行测试的系统上使用。
标签:AI安全智能体, CSV导出, DLL 劫持, Petitpotam, Web报告查看器, 内存分配, 协议分析, 大语言模型, 性能基准测试, 权限提升, 自动化渗透测试, 逆向工具