Данный пост будет носить практический характер. В нём мы решим очередное задание на эксплуатацию уязвимостей веб-приложений в контексте заданий CTF. Задания будут взяты с известного сайта с различными задачами (CTF и не только) - https://www.root-me.org. Будем решать задачи из категории: Web - Server
Задание.
Разберём решение задания "PHP - Path Truncation". Как обычно взглянем на описание.
Как всегда, сразу обращаем внимание на название, а также описание и краткое описание. Нам указана некоторая уязвимость, а также намёк "PHP limits". По заданию нужно будет получить доступ к зоне администратора. Перед тем как начать поиск информации о подобных атаках/уязвимостях, взглянем на сайт с заданием.
Всё довольно просто, есть две гиперссылки, попробуем перейти по первой.
Видим, что выставляется параметр "page" и ему передаётся некоторый аргумент. Попробуем обратиться к странице администратора.
Видим, что доступ заблокирован. Попробуем базовые LFI-пейлоады в параметр и поймём, что это не тот вектор (можно этого и не делать, потому что задание нам чётко намекает на то, что нужно сделать.
Ищем информацию про уязвимость.
Path Truncation
Одно из первых, что попадается это данная статья - https://jbedelsec.wordpress.com/2018/12/11/exploiting-php-file-truncation-php-5-3/
Из неё можно понять, что до определённой версии PHP существовала проблема, связанная с максимальным размером строки. Когда строка становилась больше максимального размера, то она обрезалась. Таким образом можно обходить запреты расширений при эксплуатации LFI-уязвимости.
Пример такого запроса:
Таким нехитрым образом можно получить необходимый файл.
Попробуем реализовать что-то подобное для нашего случая.
Генерируем достаточно большую строку с применением "/.". И пробуем её отправить на сервер.
Получаем флаг. Задание решено.
Для чего нужен Path Truncation?
Когда у вас есть LFI, но вам надо каким-то образом обойти фильтр расширения, а %00 байт не работает, данный способ может помочь. Однако, всё зависит от версии PHP, а также внутреннего устройства функции, которая осуществляет подключения файлов.
Задание.
Разберём решение задания "PHP - Path Truncation". Как обычно взглянем на описание.
Как всегда, сразу обращаем внимание на название, а также описание и краткое описание. Нам указана некоторая уязвимость, а также намёк "PHP limits". По заданию нужно будет получить доступ к зоне администратора. Перед тем как начать поиск информации о подобных атаках/уязвимостях, взглянем на сайт с заданием.
Всё довольно просто, есть две гиперссылки, попробуем перейти по первой.
Видим, что выставляется параметр "page" и ему передаётся некоторый аргумент. Попробуем обратиться к странице администратора.
Видим, что доступ заблокирован. Попробуем базовые LFI-пейлоады в параметр и поймём, что это не тот вектор (можно этого и не делать, потому что задание нам чётко намекает на то, что нужно сделать.
Ищем информацию про уязвимость.
Path Truncation
Одно из первых, что попадается это данная статья - https://jbedelsec.wordpress.com/2018/12/11/exploiting-php-file-truncation-php-5-3/
Из неё можно понять, что до определённой версии PHP существовала проблема, связанная с максимальным размером строки. Когда строка становилась больше максимального размера, то она обрезалась. Таким образом можно обходить запреты расширений при эксплуатации LFI-уязвимости.
Пример такого запроса:
Код:
http://website.com/index.php?page=random_path/../etc/passwd/.[repeated multiples times to reach a path size of 4096 char]/
Попробуем реализовать что-то подобное для нашего случая.
Генерируем достаточно большую строку с применением "/.". И пробуем её отправить на сервер.
Получаем флаг. Задание решено.
Для чего нужен Path Truncation?
Когда у вас есть LFI, но вам надо каким-то образом обойти фильтр расширения, а %00 байт не работает, данный способ может помочь. Однако, всё зависит от версии PHP, а также внутреннего устройства функции, которая осуществляет подключения файлов.