Share
## https://sploitus.com/exploit?id=F40536BA-91BB-58AB-A86E-F9639916FEC7
# GeoServer & GeoTools SQL Injection (CVE-2023-25157 & CVE-2023-25158) — Vulnerability Lab & PoC Report

Môi trường thực hành (Vulnerable Lab) và Báo cáo phân tích khai thác chi tiết lỗ hổng **SQL Injection (Error-based)** trên **GeoServer (CVE-2023-25157)** và thư viện **GeoTools (CVE-2023-25158)**.

---

## Báo Cáo Phân Tích & Khai Thác Chi Tiết

Mời xem tài liệu phân tích đầy đủ kèm hình ảnh PoC minh họa từng tầng tại báo cáo chính thức:

### [👉 Xem Báo Cáo Khai Thác Chi Tiết (REPORT.md)](./REPORT.md)

*(Báo cáo bao gồm: Nguyên lý gây lỗi ở tầng CQL Parser & SQL Translator, giải thích định dạng OGC XML Filter, phân tích chi tiết 4 vector tấn công, payload, câu truy vấn SQL thực tế dưới Database và các khuyến nghị khắc phục).*

---

## Thông Tin Lỗ Hổng (Quick Summary)

| Thuộc tính | Chi tiết |
|:---|:---|
| **CVE ID** | CVE-2023-25157 (GeoServer) & CVE-2023-25158 (GeoTools) |
| **Loại lỗ hổng** | Error-based SQL Injection |
| **Mức độ nghiêm trọng** | Critical — CVSS v3.1: **9.8** |
| **Sản phẩm ảnh hưởng** | GeoServer < 2.23.1, < 2.22.3, < 2.21.4 / GeoTools < 29.2, < 28.4, < 27.5 |
| **Giao thức khai thác** | OGC Web Feature Service (WFS) v1.0.0 / v2.0.0 |
| **Yêu cầu xác thực** | Không yêu cầu (khi dịch vụ WFS cấu hình `AccessConstraints: NONE`) |

---

## Các Vector Khai Thác Được Phân Tích

Trong lab này, 4 vector tấn công thực tế đã được kiểm chứng và phân tích chi tiết trong [REPORT.md](./REPORT.md):

1. **Vector 1 (`strStartsWith`)**: Khai thác qua hàm kiểm tra tiền tố chuỗi trong `CQL_FILTER` (HTTP GET).
2. **Vector 2 (`strEndsWith`)**: Khai thác qua hàm kiểm tra hậu tố chuỗi trong `CQL_FILTER` (HTTP GET).
3. **Vector 3 (`PropertyIsLike`)**: Khai thác qua thẻ bộ lọc chuẩn OGC XML Filter thao túng ký tự thoát `escape` (HTTP POST) — **Vector nguy hiểm nhất** hoạt động trên mọi cài đặt mặc định.
4. **Vector 4 (`FeatureId`)**: Khai thác qua tham số lọc theo Primary Key kiểu String khi `preparedStatements = false`.

---

## Hướng Dẫn Khởi Động Lab (Docker)

### Yêu cầu
- Docker & Docker Compose đã cài đặt trên hệ thống.

### 1. Khởi chạy môi trường
Tại thư mục gốc của project, mở Terminal và chạy lệnh:

```bash
docker compose up -d
```

Hệ thống sẽ khởi động 2 container:
- **PostGIS / PostgreSQL database** (chứa sẵn cơ sở dữ liệu `vulhub` với các bảng `example` và `example_str`).
- **GeoServer 2.22.1** (đã cấu hình sẵn kết nối DataStore và công bố các Feature Type mục tiêu).

### 2. Kiểm tra trạng thái
Kiểm tra log của GeoServer để đảm bảo dịch vụ đã khởi động hoàn tất:

```bash
docker compose logs -f geoserver
```

Khi xuất hiện thông báo `CONFIGURATION COMPLETE`, có thể truy cập GeoServer tại:
- **URL Web UI**: `http://localhost:8080/geoserver/web/`
- **Tài khoản quản trị mặc định**: `admin` / `geoserver`

### 3. Dọn dẹp môi trường sau khi test
Để tắt container và giải phóng tài nguyên:

```bash
# Tắt lab (giữ lại dữ liệu database)
docker compose down

# Tắt lab và xóa sạch toàn bộ dữ liệu volume
docker compose down -v
```

---

## Cấu Trúc Repository

```text
├── REPORT.md               # Báo cáo phân tích kỹ thuật & PoC chi tiết
├── docker-compose.yml      # Cấu hình khởi tạo môi trường lab GeoServer + PostgreSQL
├── init.sql                # Script khởi tạo database và dữ liệu mẫu cho lab
├── startup.sh              # Script cấu hình tự động GeoServer khi khởi chạy container
└── img/                    # Thư mục chứa hình ảnh minh chứng PoC
```