CTF. Курс молодого бойца. Начальные задания категории WEB #5.
https://t.me/hacker_sanctuary
Данный пост будет носить практический характер. В нём мы рассмотрим задания начального уровня в категории WEB. Данные задания часто встречаются в простых CTF'ах и иногда, как разминочные, в более крупных.
Задания будут взяты с известного сайта с различными задачами (CTF и не только) - https://www.root-me.org/
Будем решать задачи из категории: Web - Server
Прямая ссылка: https://www.root-me.org/en/Challenges/Web-Server/
Предыдущие задания из данной категории вы можете найти на канале.
Часть 1 - https://telegra.ph/CTF-Kurs-molodogo-bojca-Nachalnye-zadaniya-kategorii-WEB-08-17
Часть 2 - https://telegra.ph/CTF-Kurs-molodogo-bojca-Nachalnye-zadaniya-kategorii-WEB-08-31
Часть 3 - https://telegra.ph/CTF-Kurs-molodogo-bojca-Nachalnye-zadaniya-kategorii-WEB-2-09-21
Часть 4 - https://telegra.ph/CTF-Kurs-molodogo-bojca-Nachalnye-zadaniya-kategorii-WEB-4-09-23
Пример 1.
Решим задание "PHP filters".
Прямая ссылка на задание - https://www.root-me.org/en/Challenges/Web-Server/PHP-filters
Смотрим описание.

По заданию нам надо получить пароль администратора, обратим внимание на название задания, а также на прикреплённые источники.

Много ссылок на LFI.
Заходим на само задание и видим две ссылки.

Прейдём на login и обратим внимание на строку запроса.

Внимание сразу привлекает параметр "inc" который принимает в качестве значения название скрипта. Похоже на LFI. Только есть проблема, судя по всему данный файл "выполняется", то есть содержащийся в нём php-код выполняется на сервере при загрузке данного файла, то есть по сути файл подгружен, но полный его исходный код не увидеть.
Для решения этой проблемы можно закодировать вывод данного файла в base64 для этого и используются php-фильтры.

Мы получаем большой вывод base64, декодируем его.

Видим, что скрипт подключает файл "config.php" и использует переменные $password и $username, которых нет в данном файле, прочитаем таким же образом файл "config.php"

Декодируем полученный base64 и получаем ответ.

Задание решено. Оно оказалось не сложным и довольно хорошо демонстрирует базовую концепцию уязвимости LFI с использованием php-фильтров.