Вдохновение было взято с https://hackerone.com/reports/880099. Из-за того что вы не фильтруете svg картинки то можно загрузить ее на сервер, и получить stored xss. http://51.75.168.24/image.php?id=4742
Проблема в том что сервер выставляет заголовок Content-Type в зависимости от загруженного файла. Если настроить nginx на раздачу хедеров только с image/png например то браузер будет выдавать MIME type mismatch on image file.
config.php требует запроса с localhost. Можно было бы просто подменить host на localhost:
curl http://51.75.168.24/config.php -H "Host: 127.0.0.1"
Only localhost allowed!⏎
Но видимо есть еще проверка по айпи какая-то. Через CVE SSRF я смог послать запрос и получить секретный ключ для JWT. Тк elasticsearch работает по http, то нужно создать сервер который будет просто делать http редирект куда нужно. Так получится SSRF.
{ "jwt_key":"SUPERSECRET" }
Дальше мне кажется можно попробовать играть уже с JWT ключами тк это открывает еще много векторов атаки. UPD: https://jwt.io/#debugger-io?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwibG9naW4iOiJhZG1pbiIsIm1haWwiOiJtYXJhdEBta2hpdGFyeWFuLnB3Iiwicm9sZSI6ImFkbWluIiwiaXAiOiI5Mi40Ni4xMDQuMjI2In0.3pki0H88UJKICkq9ptuc95DZ1pq-XYv6Qf2i4EjIYTM Создал JWT с ролью админ, айди юзера 1. Вижу чужое фото http://51.75.168.24/uploads/69193b56e86b7843a5a772396cca7c9b.jpg
http://51.75.168.24/adminer.php
http://51.75.168.24/config.php
https://github.com/advisories/GHSA-x5r2-hj5c-8jx6
-
Вы используете слишком легкий секретный ключ для HMAC. Используйте что-то более сложное, что неполучится взломать брут форсом.
-
Закройте доступ к adminer. Сделайте чтобы он был доступен только через vpn, или просто http авторизацию. Либо обновитесь до версии где исправили этот баг с SSRF.
Вы используете MD5 хеш имени файла как имя файла для хранения картинки на сервере. Например 4c96122aa55b8b33bfe299115cb97892 это 6qxzgx. Тк MD5 можно практически полностью перебрать, то я могу просто загрузить файл с этим именем и перезаписать чужую картинку. Так я и сделал. На главной странице теперь моя картинка.
- Используйте для каждой картинки случайное имя файла. Например UUID4.