Перейти к основному содержанию
 

CTF — HTTP Headers

CTF

Продолжаем решать задачки по информационной безопасности web-серверов. Сегодня задачка с портала root-me.org, называется "HTTP - Headers". За решение задачки дают 15 баллов, чуть посложнее начального уровня.

ctf

В названии задачки есть подсказка. Скорее всего работать придётся с HTTP заголовками.

Заголовки HTTP (HTTP Headers) — это строки в HTTP-сообщении, содержащие разделённую двоеточием пару имя-значение. Формат заголовков соответствует общему формату заголовков текстовых сетевых сообщений ARPA (см. RFC 822). Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой. С помощью HTTP заголовков браузер и web-сервер обмениваются значениями переменных, такая информация не отображается в тексте web-страницы, поскольку является служебной.

Все заголовки разделяются на четыре основных группы:

  • General Headers (Общие заголовки) — используются в запросах и ответах.
  • Request Headers (Заголовки запроса) — используются только в запросах.
  • Response Headers (Заголовки ответа) — используются только в ответах.
  • Entity Headers (Заголовки сущности) — сопровождают каждую сущность сообщения. Используются в запросах и ответах.

На практике нас будут интересовать Request Headers и Response Headers. Заголовки запроса — это то, что посылает браузер web-серверу, а заголовки ответа — это то, что присылает web-сервер браузеру вместе с HTML страницей.

Ссылки

https://www.root-me.org

Список заголовков HTTP

Решение

Переходим на страницу задания:

http://challenge01.root-me.org/web-serveur/ch5/

Видим страницу с текстом "Content is not the only part of an HTTP response!" Нам подсказывают, что в ответе web-сервера содержится не только контент страницы.

ctf

Жму F12 и открываю средства разработчика Google Chrome.

ctf

Смотрю Response Headers. И сразу же нахожу очень странный заголовок Header-RootMe-Admin:none. Сервер как-бы говорит: "А ты не админ!"

А что будет, если в Request Headers отправить web-серверу такой же заголовок, но вместо "none" передать что-нибудь типа "true"? Как-бы скажем: "А я админ!" Проверим.

Для модификации HTTP заголовков понадобится дополнительное расширение. Нахожу первое попавшееся — ModHeader.

ctf

Устанавливаю расширение ModHeader.

ctf

В настройках расширения добавляю в Request Headers новую пару ключ-значение: Header-RootMe-Admin:true.

ctf

Обновляю страничку задания:

http://challenge01.root-me.org/web-serveur/ch5/

Картина изменилась!

ctf

Во-первых, в разделе Request Headers можно увидеть новый добавленный заголовок header-rootme-admin: true.

Во-вторых, контент страницы изменился:

You dit it ! You can validate the challenge with the password HeadersMayBeUseful

И флаг: HeadersMayBeUseful.

Валидируем.

ctf

Флаг подходит, зарабатываем 15 очков.

Безопасность

  • Web-сервер не должен доверять данным, переданным через Request Headers.
  • Не передавайте секретные данные через Response Headers.
  • Некоторые уязвимости системы можно устранить добавив в настройках web-сервера необходимые заголовки в Response Headers.
  • Есть много разных видов уязвимостей, связанных с HTTP заголовками, просто укажу некоторые направления атаки:
    • Злоумышленник может подменить HTTP заголовки и выдать себя за другого пользователя. Веб сервер выполнит нелегитимную операцию, например, переведёт деньги на указанный счёт. Для этого злоумышленнику требуется знат конфиденциальную информацию пользователя, например cookies.
    • CSRF (Cross-Site Request Forgery, также XSRF) и подобные типы атак, когда злоумышленник заманивает пользователя на сторонний сайт и как посредник выполняет от имени пользователя действия, не требующие подтверждения. Требуется, чтобы сессия пользователя ещё не истекла, и чтобы на атакуемой стороне (банке) была возможность выполнения операции без подтверждения пользователя.
    • Злоумышленник может подменить HTTP заголовки web-сервера. Требуется получить доступ к web-серверу. Простой пример, можно указать в Response Headers любой домен, который сможет считать cookies пользователя от основного домена web-сервера.
    • Подменяя заголовки UserAgent при каждом входе можно выдать себя за уникального посетителя. А это кликбейт, регистрация спам-ботов на форумах и соцсетях, накрутка голосов/лайков в опросах и голосованиях и прочее.
    • В заголовках передаётся множество информации, каждый заголовок — потенциальная дырка для инъекции в код (PHP, SQL, ...). Web разработчики, валидируйте заголовки!

Теги