Comments 17
Фантастика! Это тянет на статью года.
Именно подходом, декларированным в самом начале — отслеживание хода мысли, подробное описание использованных приёмов, а не как обычно "вот мы находим дырку… profit!"
Спасибо огромное за терпение, и при раскручивании этой уязвимости, и — главное — при написании статьи!
Как раз сейчас перечитывал "Хакеров" Стивена Леви, и в статье прямо чувствуется дух тех времен зарождения хакерства, как искусства.
Если есть англоязычный вариант, то его надо обязательно на Реддит. Если нету, то я готов помочь с переводом.
Спасибо за отзыв!
Первая версия статьи как раз была на английском, ищется по ключевым словам на Medium.
Спасибо, нашел. Не хотите его запостить в /r/PHP на Реддите? А то у меня самого руки чешутся :) Но когда автор размещает, то это всегда лучше — и фидбек из первых рук, и вообще…
Там просто ссылку даешь, и все.
Реддитом не пользуюсь, можете запостить, я не против)
Хорошо. Хочу только уточнить один момент. Я правильно понимаю, что https://api-stage.seedr.ru/player был открыт для доступа (сейчас он у меня не открывается) и при этом вываливал на экран отладочную информацию? То есть на проде этого всего не было, но благодаря открытому стейджу и удалось получить фидбек по ошибкам?
Сидр закрыли в феврале, поэтому да, хосты могут не работать.
Сразу отладочную информацию ни прод, ни стейдж не вываливал, но если стригерить ошибку, подробный дебаг был включен и там, и там.
Путь к логам был получен как раз с прода, но открыть их удалось только на стейдже из-за особенности с расширением. Точно не помню, но, возможно, где-то в исходниках на Гитхабе как раз и увидел в некоторых местах расширение .log. Теоретически и путь к логам, можно было понять по коду, без ошибки про свободное место.
Решил составить TL;DR:
Надеюсь, все правильно понял
- встроенный плеер запрашивает информацию о видео со сторонних сервисов
- Вимео отдает инфу в формате РНР serialize(!)
- Также в вимео есть открытый редирект (определенный параметр в URL заставляет любой скрипт вместо отдачи контента сделать редирект на указанный адрес)
- соответственно, скрипту на Seedr пожно подсунуть свой сериализованный объект.
- API Seedr выдает наружу системные ошибки РНР()
- из текста ошибки стало ясно, что на сервере используется Кохана
- стейдж сервер доступен без пароля, и при этом при ошибках вываливает дебаг панель. Хотя это, наверное, непринципиальный момент, но сильно упростил дальнейшие ходы
- с помощью стандартной уязвимости unserialize можно создать экземпляр класса View и получить контролируемый инклюд файла
- теперь остается найти этот файл. самый очевидный киндидат — это логи
- находим файл, в который пишется переданный на сайт запрос. И в этом запросе размещается РНР код
- затем этот файл с логом иклюдится через класс View.
Большое спасибо за статью! Серьёзный труд был вложен как в работу, так и в написание)
Можете поделиться, какой опыт в пентесте и багбаунти, давно ли этим занимаетесь? И про опыт разработки, если не сложно.
Мне до подобного ещё далеко, но хоть яснее наметить себе путь для развития) Спасибо!
Спасибо.
5 лет в безопасности, учитывая год самообучения до начала работы по текущему профилю. В баг-баунти года 3-4, но с большими перерывами. До этого был небольшой опыт технической поддержки, обслуживания биллинга и немного разработки на PHP, JS, Python.
Ели заинтересованы в безопасности веб-приложений, то для начала могу порекомендовать бесплатные лабы от PortSwigger. Успехов!
Мужик!
Классно. Прямо хорошо показано что такое современные уязвимости, откуда они берутся и как их находят и эксплуатируют. На настоящем живом примере.
Великолепная статья, интересно и подробно рассказано. Спасибо большое!
Читается как детектив, захватывает)
@ByQwertвышло очень круто! Особенно порадовала кооперация с Harsh Jaiswal.
P.S.: читать ход мысли после того как читал отчет вдвойне интереснее, ощущение что смотришь на сцену из-за кулис.
del
Как за неделю превратить Open redirect в RCE