Честно, попыхтел над этой задачкой с hackerlab. Хотя, по сути, и пыхтеть-то было не над чем — лол.
Айпи переводит нас на сайт. На первый взгляд — ничего особенного, просто текст. Нас интересует вкладка "Контакты".
Первое, что приходит в голову — ввести рандомные данные в поля и нажать "отправить сообщение". Так и делаем. В ответ — привычное:
А что же происходит в этот момент "под капотом"?"Спасибо за ваше сообщение! Мы свяжемся с вами в ближайшее время."
В поле response видим base64-код. Декодируем — получаем HTML-страницу с заглушкой Cloudflare. Я ввел сайт
lol.com
, видимо, сервер решил, что мы лезем куда не надо. Но раз появляется заглушка, значит, поле "ваш сайт" отправляет запрос на указанный URL. А что если попробовать направить его на самого себя?Вводим
127.0.0.1
и...Создатели явно предусмотрели такой вариант — защита сработала. Но мы не сдаемся. Попробуем обойти это ограничение.
Если
127.0.0.1
не работает, пробуем 127.1
и указываем порт. Сканирование показало, что порт 8000 открыт.Вводим:
http://127.1:8000/
Опять сообщение:
Запрос сработал, а в ответ снова прилетает base64. Расшифровываем — и вот она, HTML главной страницы. Выходит, сервер возвращает содержимое запрашиваемой страницы."Спасибо за ваше сообщение".
На этом моменте я немного застопорился. Ну получил я HTML — и что дальше?
Но потом случилось буквально библейское чудо. Присел покурить, наблюдаю за птичками... случайно уронил сигарету на ногу — и тут меня осенило.

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