Содержание статьи
Pentest Award
Этот текст получил третье место на премии Pentest Award 2024 в категории «Пробив WEB». Это соревнование ежегодно проводится компанией Awillix.
Я изучил две уникальные RCE-уязвимости, которые останутся открытыми для эксплуатации, и провел успешный пробив через десериализацию в движке кеша, воспользовавшись трюком с базой данных.
Дальше я постараюсь не просто описать кейс о найденных уязвимостях, а вдохновить тебя, рассказав о скрытых возможностях багбаунти. Готов погружаться в детали?
Как все начиналось
Эта история случилась со мной не так давно. Я участвовал в багбаунти и бороздил просторы скоупа в поисках уязвимостей. И тут наткнулся на ненастроенный инстанс PrestaShop у одного из больших вендоров с хорошими выплатами. Я был впечатлен своей находкой и сразу же начал искать информацию о векторах проникновения и способах эксплуатации.
Оказалось, что такой информации вообще нет и придется все выяснять самому.
Поскольку это суровый мир багбаунти, где ты должен быть быстрее других, я решил немедленно завершить настройку сам, ведь если бы этого не сделал я, сделал бы кто‑то другой.
Процесс устроен так же, как и в других CMS вроде WordPress или Joomla. Необходимо пройти несколько шагов установки. Из важных я могу выделить два:
- Настройка базы данных (MySQL). Необходимо указать адрес сервера, логин и пароль к нему (есть возможность сразу проверить соединение).
- Ввод пароля для аккаунта администратора.
И если со вторым пунктом все просто и понятно, пароль мы уж как‑нибудь зададим, то для первого есть целый ряд проверок, которые нужно пройти, чтобы установка считалась завершенной. Эта установка может быть доступна только один раз, я хотел сразу проверить возможные баги. Например:
- Возможна ли тут слепая SSRF с импактом (например, поменять протокол, использовать врапперы, подключиться к внешнему хосту и предложить NTLM-аутентификацию, посканить локальную сеть).
- Поскольку это MySQL, возможно ли у нас чтение файлов через Rogue MySQL (включена ли функция
--enable-local-infile
на клиенте).
Но мы не хотим отвлекаться на долгие проверки, потому что в это время кто‑то может успеть увести у нас доступ к установщику. По‑всякому сканировать сеть через подключение к MySQL звучит не очень перспективно и не даст нам никаких реальных способов атаки. Из других векторов же ничего не сработало.
Если указать localhost в качестве хоста для базы данных, то получаем сообщение об ошибке service timeout.
Но без базы завершить установку не выйдет, поэтому быстренько поднимем свой сервис MySQL и укажем его при настройке PrestaShop.
Завершаем установку, и вот мы владельцы сервиса и полностью контролируем его БД. Теперь никакие конкуренты не смогут угнать учетную запись.
Но заканчивать на этом было бы преждевременно, нужно попробовать раскрутить эту уязвимость до RCE.
Первое, что приходит на ум по аналогии с WordPress, — это зайти как админ, скрафтить уязвимый плагин и установить его. Давай посмотрим, можно ли тут провернуть нечто такое.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее