## 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
```