kovalyoff
10.06.2025, 20:03
https://forum.antichat.xyz/attachments/29119013/1749568667986.png
Честно, попыхтел над этой задачкой с hackerlab (https://hackerlab.pro/). Хотя, по сути, и пыхтеть-то было не над чем — лол.
Айпи переводит нас на сайт. На первый взгляд — ничего особенного, просто текст. Нас интересует вкладка "Контакты".
https://forum.antichat.xyz/attachments/29119013/1749568726884.png
https://forum.antichat.xyz/attachments/29119013/1749568816381.png
Первое, что приходит в голову — ввести рандомные данные в поля и нажать "отправить сообщение". Так и делаем. В ответ — привычное:
"Спасибо за ваше сообщение! Мы свяжемся с вами в ближайшее время."
А что же происходит в этот момент "под капотом"?
https://forum.antichat.xyz/attachments/29119013/1749568998333.png
В поле response видим base64-код. Декодируем — получаем HTML-страницу с заглушкой Cloudflare. Я ввел сайт
lol.com
, видимо, сервер решил, что мы лезем куда не надо. Но раз появляется заглушка, значит, поле "ваш сайт" отправляет запрос на указанный URL. А что если попробовать направить его на самого себя?
Вводим
127.0.0.1
и...
https://forum.antichat.xyz/attachments/29119013/1749569541839.png
Создатели явно предусмотрели такой вариант — защита сработала. Но мы не сдаемся. Попробуем обойти это ограничение.
Если
127.0.0.1
не работает, пробуем
127.1
и указываем порт. Сканирование показало, что порт 8000 открыт.
Вводим:
http://127.1:8000/
https://forum.antichat.xyz/attachments/29119013/1749569921493.png
Опять сообщение:
"Спасибо за ваше сообщение".
Запрос сработал, а в ответ снова прилетает base64. Расшифровываем — и вот она, HTML главной страницы. Выходит, сервер возвращает содержимое запрашиваемой страницы.
На этом моменте я немного застопорился. Ну получил я HTML — и что дальше?
Но потом случилось буквально библейское чудо. Присел покурить, наблюдаю за птичками... случайно уронил сигарету на ногу — и тут меня осенило.
Если мы получаем главную страницу, то, возможно, можем получить и другие — например,
contacts
или
about
. Хотя они вряд ли что-то дадут. Значит, ищем скрытую директорию. Запускаем фаззер и получаем:
https://forum.antichat.xyz/attachments/29119013/1749570331980.png
Есть директория
/secret
, но статус у неё — forbidden. Пробуем зайти туда:
https://forum.antichat.xyz/attachments/29119013/1749570388918.png
"Access denied."
Ну, кто бы сомневался. Понятно, что именно там и лежит флаг. Но вряд ли он просто в 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, а значит, логично искать
.py
файл!
Пробуем
main.py
— опять 404. Тупик? А может и нет...
Если бы мы хотели напрямую попросить файл у сервера, использовали бы
file:///
, но есть одно но: поле "ваш сайт" принимает только адреса, начинающиеся с
http://
или
https://
.
Тогда — хитрый ход. Делаем запрос вида:
http://127.1:8000/secret?url=file:///app/main.py
(логично предположить, что
main.py
— основной файл)
Отправляем. В ответ — снова base64. Декодируем... и внутри — флаг!
Возможно, райтап получился немного сумбурным, но это мой первый пост на форуме, так что не судите строго
Честно, попыхтел над этой задачкой с hackerlab (https://hackerlab.pro/). Хотя, по сути, и пыхтеть-то было не над чем — лол.
Айпи переводит нас на сайт. На первый взгляд — ничего особенного, просто текст. Нас интересует вкладка "Контакты".
https://forum.antichat.xyz/attachments/29119013/1749568726884.png
https://forum.antichat.xyz/attachments/29119013/1749568816381.png
Первое, что приходит в голову — ввести рандомные данные в поля и нажать "отправить сообщение". Так и делаем. В ответ — привычное:
"Спасибо за ваше сообщение! Мы свяжемся с вами в ближайшее время."
А что же происходит в этот момент "под капотом"?
https://forum.antichat.xyz/attachments/29119013/1749568998333.png
В поле response видим base64-код. Декодируем — получаем HTML-страницу с заглушкой Cloudflare. Я ввел сайт
lol.com
, видимо, сервер решил, что мы лезем куда не надо. Но раз появляется заглушка, значит, поле "ваш сайт" отправляет запрос на указанный URL. А что если попробовать направить его на самого себя?
Вводим
127.0.0.1
и...
https://forum.antichat.xyz/attachments/29119013/1749569541839.png
Создатели явно предусмотрели такой вариант — защита сработала. Но мы не сдаемся. Попробуем обойти это ограничение.
Если
127.0.0.1
не работает, пробуем
127.1
и указываем порт. Сканирование показало, что порт 8000 открыт.
Вводим:
http://127.1:8000/
https://forum.antichat.xyz/attachments/29119013/1749569921493.png
Опять сообщение:
"Спасибо за ваше сообщение".
Запрос сработал, а в ответ снова прилетает base64. Расшифровываем — и вот она, HTML главной страницы. Выходит, сервер возвращает содержимое запрашиваемой страницы.
На этом моменте я немного застопорился. Ну получил я HTML — и что дальше?
Но потом случилось буквально библейское чудо. Присел покурить, наблюдаю за птичками... случайно уронил сигарету на ногу — и тут меня осенило.
Если мы получаем главную страницу, то, возможно, можем получить и другие — например,
contacts
или
about
. Хотя они вряд ли что-то дадут. Значит, ищем скрытую директорию. Запускаем фаззер и получаем:
https://forum.antichat.xyz/attachments/29119013/1749570331980.png
Есть директория
/secret
, но статус у неё — forbidden. Пробуем зайти туда:
https://forum.antichat.xyz/attachments/29119013/1749570388918.png
"Access denied."
Ну, кто бы сомневался. Понятно, что именно там и лежит флаг. Но вряд ли он просто в 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, а значит, логично искать
.py
файл!
Пробуем
main.py
— опять 404. Тупик? А может и нет...
Если бы мы хотели напрямую попросить файл у сервера, использовали бы
file:///
, но есть одно но: поле "ваш сайт" принимает только адреса, начинающиеся с
http://
или
https://
.
Тогда — хитрый ход. Делаем запрос вида:
http://127.1:8000/secret?url=file:///app/main.py
(логично предположить, что
main.py
— основной файл)
Отправляем. В ответ — снова base64. Декодируем... и внутри — флаг!
Возможно, райтап получился немного сумбурным, но это мой первый пост на форуме, так что не судите строго