Добавить в корзинуПозвонить
Найти в Дзене
B0rn2beR00T

Решение Codeby Games (Старая версия)

Приветствую! Сегодня в статье разберём как реализовать RCE-уязвимость в функции PHP Assert(). Приступим! Для начала долго и внимательно осмотримся на хосте. Прокликаем все кнопки, посмотрим URL при переходе на каждую страницу и т.д. Нам нужно всё! Любая информация может сильно помочь в поиске уязвимостей. Обратите внимание, что при переходе на страницу в URL появляется параметр page, где указано имя выбранной страницы. Раз уж пошла такая пляска, то чекнем сразу Path Traversal: При внедрении /../../../etc/passwd нам выдадут интересную ошибку. И тут я задумался... С такими мыслями о Traversal меня ласково послали куда подальше. В таком случае применим тулзу whatweb для выявления версии сервисов. Это нам дало раскрытие версии PHP, Apache и фреймворка JQuery. Поресёрчив инет, я нашёл интересный способ реализации RCE функции PHP Assert(), которую мы видели в ответе сервера. Пробуем провернуть всё как в статье: И это срабатывает! Мы видим список файлов локальной директории. Теперь посмот
Оглавление

Приветствую!

Сегодня в статье разберём как реализовать RCE-уязвимость в функции PHP Assert(). Приступим!

Сбор информации

Для начала долго и внимательно осмотримся на хосте. Прокликаем все кнопки, посмотрим URL при переходе на каждую страницу и т.д. Нам нужно всё! Любая информация может сильно помочь в поиске уязвимостей.

-2

Обратите внимание, что при переходе на страницу в URL появляется параметр page, где указано имя выбранной страницы.

-3

Крутим Path Traversal

Раз уж пошла такая пляска, то чекнем сразу Path Traversal:

-4

При внедрении /../../../etc/passwd нам выдадут интересную ошибку. И тут я задумался...

-5

С такими мыслями о Traversal меня ласково послали куда подальше. В таком случае применим тулзу whatweb для выявления версии сервисов.

-6

Это нам дало раскрытие версии PHP, Apache и фреймворка JQuery.

Поресёрчив инет, я нашёл интересный способ реализации RCE функции PHP Assert(), которую мы видели в ответе сервера.

-7

Крутим RCE

Пробуем провернуть всё как в статье:

-8

И это срабатывает! Мы видим список файлов локальной директории. Теперь посмотрим наши права:

-9

Что-то мне подсказывает, что нужно прочитать index.php. Так и поступим.

-10

В ответ ничего... Видимо файл слишком большой для вывода здесь. Воспользуемся grep для нахождения нужной строки с php-кодом.

-11

Это срабатывает. Флаг у нас в кармане!

Выводы

Интересно, когда решение кейса завязывается на поиске чего-го в меру раритетного. Откопать RCE было непросто.

Функция assert() в старых версиях PHP (до 7.2) ведет себя как eval(), когда в нее передается строка. То есть, строка интерпретируется как исполняемый PHP-код. Это и привело к реализации RCE-уязвимости.

Спасибо за внимание! Не забывайте оценивать моё творчество лайком. Всех благ!