![]() |
https://forum.antichat.xyz/attachmen...9568667986.png
Честно, попыхтел над этой задачкой с hackerlab. Хотя, по сути, и пыхтеть-то было не над чем — лол. Айпи переводит нас на сайт. На первый взгляд — ничего особенного, просто текст. Нас интересует вкладка "Контакты". https://forum.antichat.xyz/attachmen...9568726884.png https://forum.antichat.xyz/attachmen...9568816381.png Первое, что приходит в голову — ввести рандомные данные в поля и нажать "отправить сообщение". Так и делаем. В ответ — привычное: Цитата:
https://forum.antichat.xyz/attachmen...9568998333.png В поле response видим base64-код. Декодируем — получаем HTML-страницу с заглушкой Cloudflare. Я ввел сайт Код:
lol.comВводим Код:
127.0.0.1https://forum.antichat.xyz/attachmen...9569541839.png Создатели явно предусмотрели такой вариант — защита сработала. Но мы не сдаемся. Попробуем обойти это ограничение. Если Код:
127.0.0.1Код:
127.1Вводим: Код:
http://127.1:8000/Опять сообщение: Цитата:
На этом моменте я немного застопорился. Ну получил я HTML — и что дальше? Но потом случилось буквально библейское чудо. Присел покурить, наблюдаю за птичками... случайно уронил сигарету на ногу — и тут меня осенило. Если мы получаем главную страницу, то, возможно, можем получить и другие — например, Код:
contactsКод:
abouthttps://forum.antichat.xyz/attachmen...9570331980.png Есть директория Код:
/secrethttps://forum.antichat.xyz/attachmen...9570388918.png Цитата:
Допустим, попробуем: Код:
http://127.1:8000/secret/main.jsPHP: Код:
Код:
.pyПробуем Код:
main.pyЕсли бы мы хотели напрямую попросить файл у сервера, использовали бы Код:
file:///Код:
http://Код:
https://Тогда — хитрый ход. Делаем запрос вида: Код:
http://127.1:8000/secret?url=file:///app/main.pyКод:
main.pyОтправляем. В ответ — снова base64. Декодируем... и внутри — флаг! Возможно, райтап получился немного сумбурным, но это мой первый пост на форуме, так что не судите строго |
Спасибо за статью! Вопрос:
Цитата:
|
Цитата:
Если мы посмотрим на двоичное значение адреса 127.0.0.1, учитывая стандартный, состоящий из четырех октет, dot-decimal nonation, то получим 01111111.00000000.00000000.00000001. Но парсер браузера умеет работать с IP состоящим не только из четырех октет. Если мы возьмем всего лишь две октеты (то есть 127.1), то у нас получится 01111111.000000000000000000000001. А далее все просто - браузер с помощью функции inet_addr просто пересоберет и подгонит его под привычный 127.0.0.1. По сути, в результате такой махинации двоичное значение IP адреса не меняется, а браузер сам знает, как преобразовать его в нужный формат. Почему это вектор атаки? Потому что в случае данной задачи фильтр, скорее всего, предусматривал только запрет на ввод 127.0.0.1, а вот 127.1 вообще не предусмотрен. |
Йоооу, чувак круто вышло, я вот пишу райтапы, но исключительно для себя так как только учусь, и то как писал ты мне ооочень зашло. описываешь прям мысли. И кстати в последнем действии можно не только main.py чекать, но и app.py flag.txt secret.txt все выдает один и тот же ответ. Спасибо за такой клевый райтап!
|
Спасибо за райтап, долго не мог решить задачу т.к. не знал что блокировку 127.0.0.1 можно 127.1. А для секрета достаточно http://127.1:8000/secret
|
Цитата:
http://0 http://@0/ http://2130706433 |
| Время: 19:55 |