Честно, попыхтел над этой задачкой с
hackerlab. Хотя, по сути, и пыхтеть-то было не над чем — лол.
Айпи переводит нас на сайт. На первый взгляд — ничего особенного, просто текст. Нас интересует вкладка "
Контакты".
Первое, что приходит в голову — ввести рандомные данные в поля и нажать "
отправить сообщение". Так и делаем. В ответ — привычное:
"Спасибо за ваше сообщение! Мы свяжемся с вами в ближайшее время."
А что же происходит в этот момент "под капотом"?
В поле
response видим base64-код. Декодируем — получаем HTML-страницу с заглушкой
Cloudflare. Я ввел сайт
, видимо, сервер решил, что мы лезем куда не надо. Но раз появляется заглушка, значит, поле "
ваш сайт" отправляет запрос на указанный URL. А что если попробовать направить его на самого себя?
Вводим
и...
Создатели явно предусмотрели такой вариант — защита сработала. Но мы не сдаемся. Попробуем обойти это ограничение.
Если
не работает, пробуем
и указываем порт. Сканирование показало, что
порт 8000 открыт.
Вводим:
Опять сообщение:
"Спасибо за ваше сообщение".
Запрос сработал, а в ответ снова прилетает base64. Расшифровываем — и вот она, HTML главной страницы. Выходит, сервер возвращает содержимое запрашиваемой страницы.
На этом моменте я немного застопорился. Ну получил я HTML — и что дальше?
Но потом случилось буквально
библейское чудо. Присел покурить, наблюдаю за птичками... случайно уронил сигарету на ногу — и тут меня осенило.
Если мы получаем главную страницу, то, возможно, можем получить и другие — например,
или
. Хотя они вряд ли что-то дадут. Значит, ищем скрытую директорию. Запускаем фаззер и получаем:
Есть директория
, но статус у неё —
forbidden. Пробуем зайти туда:
Ну, кто бы сомневался. Понятно, что именно там и лежит флаг. Но вряд ли он просто в HTML. Скорее, это отдельный файл.
Допустим, попробуем:
Код:
http://127.1:8000/secret/main.js
В ответ снова base64 → html, в котором написано:
PHP:
Код:
404
Not Found
Not Found
The requested
URL
was not found on the server
.
.
.
И вот это сообщение — ключевое! Оно генерируется
Flask, а значит, логично искать
файл!
Пробуем
— опять 404. Тупик? А может и нет...
Если бы мы хотели напрямую попросить файл у сервера, использовали бы
, но есть одно но: поле "
ваш сайт" принимает только адреса, начинающиеся с
или
.
Тогда — хитрый ход. Делаем запрос вида:
Код:
http://127.1:8000/secret?url=file:///app/main.py
(логично предположить, что
— основной файл)
Отправляем. В ответ — снова base64. Декодируем... и
внутри — флаг!
Возможно, райтап получился немного сумбурным, но это мой
первый пост на форуме, так что не судите строго