Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 124 additions & 0 deletions networking/templates/chapters/http.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
{% extends "chapter.html" %}
{% set ace_modes = ["sh"] %}
{% block chapter %}
<p>Дедлайн — <strong>?? ??</strong>, 23:59 МСК.</p>

<p>Подключитесь к VPN и займите ip {{ variant.student_ip }} в сети /24</p>

<h3>Часть 1. Пользуемся HTTP</h3>

<p>В этой сети есть 2 http сервера. Найдите их. </p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ты уверен, что ты готов к паре десятков nmap over openvpn? у меня там ядер-то не оч много

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно в целом шейпить.
Проверить что порт открыт это один пакет


{{ checkpoint(tasks.found_simple1) }}

{{ checkpoint(tasks.found_non80) }}

{{ checkpoint(tasks.found_ips) }}
{% if tasks.found_simple1.is_solved and tasks.found_non80.is_solved %}
{% if not tasks.found_ips %}
<p>Укажите айпи обоих серверов в формате <code>1.2.3.4:80, 1.2.3.5:XXXX</code>.</p>
{{ render_form(forms.found_ips) }}
{% endif %}
{% endif %}

<h3>Часть 2. Изучаем заголовки</h3>

<p>
Если для решения этого задания вам пришлось открыть страницу в браузере, то ваш браузер отправил серверу
много метаинформации чтобы он смог подготовить для вас ответ. В том числе заголовок <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent">User-Agent.</a>
</p>

<p>
Хоть замена User-Agent не поможет вам сохранить приватность, мы просим вас отправить на сервер {{ variant.change_ua_ip }} запрос в котором
сказано что вы используете браузер AbobaBrowser версии 1.3.3.7
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Идея норм, но это недостаточно однозначно говорит, какой UA должен быть

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Достаточно однозначно
Дока на этот счет достаточно точная

</p>


{{ checkpoint(tasks.change_ua) }}

<p>
Кроме <code>User-Agent</code> существует очень много общепринятых заголовков которыми умеют пользоваться почти
все браузеры. Например <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie">Cookie</a>.
</p>

<p>
HTTP не имеет состояния, и сервер не может понять что два разных запроса сделал один и тот же клиент.
Поэтому Cookie файлы используются веб сайтами чтобы запомнить, что это именно вы заходите на веб сайт.
В том числе, используются для того чтобы запомнить вас после того как вы авторизовались.
</p>

<p>
Например, как веб сайт {{ variant.bad_auth_ip }}:80 который использует Cookies для того чтобы пометить -
являетесь ли вы админом или нет. Но делает он это очень плохо. Ваша задача взломать его.
</p>

{{ checkpoint(tasks.bad_auth) }}

<p>
После того как вы выполните это задание, вам не составит труда решить
ещё одно задание которое расположено на {{ variant.big_file_ip }}:80. По лучшим традициям CTF, вам нужно сдать флаг,
который следует формату CTITMO{........}
</p>

<details>
<summary>Подсказка 1</summary>
<p>
Сервер отдает вам файл который склеен из большого количества нулей, ZIP архива и большого количества мусора.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут надо тоже будет рейтлимиты вкручивать посильнее. Могу наверное поделиться точно таким же заданием с лимитом в 50 КБ/с

</p>
</details>

<details>
<summary>Подсказка 2</summary>
<p>
Вам стоит использовать один специальный заголовок.
</p>
</details>

<details>
<summary>Подсказка 3</summary>
<p>
Напоминание: Из курса Алгоритмов и Структур Данных вы узнали о том что такое двоичный поиск.
Используйте его вместе с заголовком <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range">Range</a>
чтобы получить только ZIP архив.
</p>
</details>

{% if not tasks.big_file.is_solved %}
{{ render_form(forms.big_file) }}
{% endif %}



<h3>Часть 3. HTTP на уровне TCP</h3>

<p>
Вы наверняка уже поняли, но мы забыли упомянуть, что HTTP это протокол который работает по TCP. И он вполне человекочитаем.
Поэтому ваша следующая задача - сделать HTTP запрос руками на сервер {{ variant.hand_made_ip }}:80
</p>

{{ checkpoint(tasks.hand_made_ip) }}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А вот тут делиться нечем, но идея норм

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Некоторые идеи были в гуглодоке)


<h3>Часть 4. Прикладное использование HTTP</h3>

<p>
Теперь когда мы познакомились с HTTP и тем как делать простейшие запросы, вам предстоит познакомиться с буквами HT в этой аббревиатуре.
Они обозначают Hypertext.
</p>

<p>
Hypertext говорит что данные которые вам вернут будут иметь гиперссылки. Их суть - предоставить возможность с помощью
простого клика перемещаться по нескольким страницам которые есть на веб сервере.
</p>

<p>
На курсе Java-Advanced вам давали задание написать Web Crawler который бы ходил по веб сайту и собирал все страницы вебсайта.
</p>

<p>
Ваша задача - либо доработать его, либо написать новый чтобы обойти веб сайт который располагается на {{ variant.crawler_ip }}.
</p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Уф. Не уверен, нужен ли yet another parser course, но мб

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это кажется даже обычный curl умеет


{{ checkpoint(tasks.crawler) }}


{% endblock %}