From 397dafd311731999fa6e1629135bd4d569c3e666 Mon Sep 17 00:00:00 2001 From: Maxim Date: Tue, 6 Feb 2024 00:13:48 +0300 Subject: [PATCH] Initial HTML --- networking/templates/chapters/http.html | 124 ++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 networking/templates/chapters/http.html diff --git a/networking/templates/chapters/http.html b/networking/templates/chapters/http.html new file mode 100644 index 0000000..73f1788 --- /dev/null +++ b/networking/templates/chapters/http.html @@ -0,0 +1,124 @@ +{% extends "chapter.html" %} +{% set ace_modes = ["sh"] %} +{% block chapter %} +

Дедлайн — ?? ??, 23:59 МСК.

+ +

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

+ +

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

+ +

В этой сети есть 2 http сервера. Найдите их.

+ + {{ 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 %} +

Укажите айпи обоих серверов в формате 1.2.3.4:80, 1.2.3.5:XXXX.

+ {{ render_form(forms.found_ips) }} + {% endif %} + {% endif %} + +

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

+ +

+ Если для решения этого задания вам пришлось открыть страницу в браузере, то ваш браузер отправил серверу + много метаинформации чтобы он смог подготовить для вас ответ. В том числе заголовок User-Agent. +

+ +

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

+ + + {{ checkpoint(tasks.change_ua) }} + +

+ Кроме User-Agent существует очень много общепринятых заголовков которыми умеют пользоваться почти + все браузеры. Например Cookie. +

+ +

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

+ +

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

+ + {{ checkpoint(tasks.bad_auth) }} + +

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

+ +
+ Подсказка 1 +

+ Сервер отдает вам файл который склеен из большого количества нулей, ZIP архива и большого количества мусора. +

+
+ +
+ Подсказка 2 +

+ Вам стоит использовать один специальный заголовок. +

+
+ +
+ Подсказка 3 +

+ Напоминание: Из курса Алгоритмов и Структур Данных вы узнали о том что такое двоичный поиск. + Используйте его вместе с заголовком Range + чтобы получить только ZIP архив. +

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

Часть 3. HTTP на уровне TCP

+ +

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

+ + {{ checkpoint(tasks.hand_made_ip) }} + +

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

+ +

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

+ +

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

+ +

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

+ +

+ Ваша задача - либо доработать его, либо написать новый чтобы обойти веб сайт который располагается на {{ variant.crawler_ip }}. +

+ + {{ checkpoint(tasks.crawler) }} + + +{% endblock %}