Skip to content

Группировка S I

Dmitry Zubarev edited this page Dec 9, 2016 · 4 revisions

Группировка S I

  • Категория: Web
  • Стоимость: 300
  • Автор идеи и реализации: Александр Борзунов
  • Репозиторий

Условие

S — одна из самых жестоких и неуправляемых группировок нашего времени. Никто и никогда не видел живого представителя S, но каждый житель планеты хотя бы раз в жизни сталкивался с последствиями их деятельности. Сегодня мы обнаружили в пространстве группировки S несколько неизвестных ранее страниц. Особых оснований полагать, что там находится интересная нам информация, нет, но всё-таки стоит проверить, что это за страницы. Возможно, вам поможет онлайн-переводчик с языка S.

Решение

Вглянув на страницы {learn,explore,destroy}.grouping-s.contest.qctf.ru, легко догадаться, что ссылка на онлайн-переводчик дана не случайно: чтобы прочитать текст на страницах, нужно перевести их с некоторого языка.

Переводчик принимает URL и возвращает однозначно переведённую страницу. Две из трёх данных страниц без проблем переводятся, а вот при попытке перевода третьей — destroy — переводчик сообщает, что работа с таким доменным именем запрещена. Кроме того, поэкспериментировав, можно выяснить, что переводчик может обрабатывать только страницы, расположенные на сервере с определённым IP-адресом.

Способов обойти блокировку несколько:

  1. Способ, предполагавшийся как основной — вспомнить дерево доменных имён и добавить в конец домена точку:

    http://destroy.grouping-s.contest.qctf.ru./
    

    Несмотря на то, что оба домена (с точкой на конце и без) будут вести на одну страницу, формально это разные доменные имена, поэтому блокировка не сработает.

    Интересно, что многие браузеры привязывают к домену с точкой и к домену без точки разные хранилища для cookies, поэтому аналогичная идея позволяет заходить на некоторые сайты с двух различных аккаунтов одновременно.

  2. Также можно было воспользоваться слабостью валидации и поменять регистр любой из букв доменного имени с нижнего на верхний:

    http://Destroy.grouping-s.contest.qctf.ru./
    
  3. Этот вариант решения нами задуман не был и появился из-за ошибки в конфигурации веб-сервера nginx. Изначально файл конфигурации содержал единственную секцию server:

    server {
    	listen 80;
    
    	server_name ~^(?<site>learn|explore|destroy)\.grouping-s\.contest\.qctf\.ru$;
    	access_log /var/www/grouping-s/log/nginx.access.log;
    	error_log /var/www/grouping-s/log/nginx.error.log;
    	root /var/www/grouping-s/www/$site;
    	...
    }

    Подводный камень заключается в том, что даже если HTTP-заголовок Host не подходит под регулярное выражение, выберется именно эта секция, так как иной секции по умолчанию задано не было. При этом группа $site не заполнится регулярным выражением, и корень сайта установится в /var/www/grouping-s/www/. Добавив к URL путь /destroy, можно было получить доступ к папке с html-страницей сайта «destroy».

    Установить «неожиданный» заголовок Host можно было, например, обратившись к серверу по IP (тогда в заголовке Host окажется именно IP):

    http://80.93.X.X/destroy
    

    Здесь 80.93.X.X — IP сервера с сайтами.

Если каким-то из этих способов перевести заблокированную страницу, можно увидеть флаг.