Перейти к содержимому

Поиск по платформе

WebSocket Security: Угон сокета (CSWSH)

Сервер открывает WebSocket-соединение для отправки приватных уведомлений, но забывает проверять Origin. Воспользуйтесь ботом администратора, чтобы заставить его открыть вашу вредоносную страницу и угнать флаг через сокет.

Автор: Hack & Fix
Освоишь: Origin checktoken в handshakerate limit
Сложно+90 XP ~70 мин golang
CWE-346 · A05:2021 Pro
Обложка: WebSocket Security: Угон сокета (CSWSH) Обложка: WebSocket Security: Угон сокета (CSWSH)
Задача
# Кросс-сайтовый угон WebSocket-соединения ## Сценарий Вы — пентестер корпоративного мессенджера **OmniChat**: операторы поддержки общаются с клиентами в реальном времени через WebSocket, а сервер аутентифицирует соединение по сессионной cookie и сразу отправляет приветственное сообщение с приватными данными. Команда уверена: без сессии данные не выдаются, значит эндпоинт защищён. Перед открытием чата для внешних клиентов вас попросили проверить, защищает ли аутентификация от чужих страниц. Платформа даёт Exploit Server с ботом-администратором, который посетит любую переданную ему ссылку. ## Цель 1. Проверьте, как WebSocket-эндпоинт обрабатывает рукопожатие с посторонним источником: сверяется ли источник запроса при подключении. 2. Разместите на Exploit Server подконтрольную страницу, которая от имени посетителя установит соединение с приложением, и доставьте её боту-администратору. 3. Дождитесь доставки сообщения администратора на ваш сервер и извлеките флаг. ## Теория WebSocket-рукопожатие — это обычный HTTP-запрос с просьбой переключить протокол, и браузер автоматически прикладывает к нему cookie — как к любому запросу к сайту. Но дальше правила меняются: к установленному WebSocket-соединению политика одного источника и CORS не применяются, поэтому страница с любого домена может открыть соединение к приложению и читать все сообщения. Вся ответственность за защиту ложится на сервер: единственный сигнал о том, откуда пришло рукопожатие, — заголовок источника запроса. **Уязвимый паттерн:** ```go // Источник рукопожатия не проверяется: var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, } ``` Механика атаки (Cross-Site WebSocket Hijacking): атакующий размещает страницу, открывающую соединение от имени посетителя. Жертва с активной сессией открывает ссылку — браузер сам прикладывает её cookie к рукопожатию, сервер принимает соединение и отправляет приватное приветствие. Страница атакующего читает сообщение и передаёт его на подконтрольный сервер. ## Точка входа атаки `GET /ws` — WebSocket-эндпоинт (рукопожатие с переключением протокола). Канал доставки — Exploit Server в панели лаборатории и бот-администратор. * **Обычный пользователь (изучите собственное приветственное сообщение):** `demo` / `demo`

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: WebSocket Message Injection (XSS via innerHTML) Обложка лабы: WebSocket Message Injection (XSS via innerHTML)
WebSocket

WebSocket Message Injection (XSS via innerHTML)

WebSocket chat broadcasts unsanitized messages. Client renders via innerHTML, enabling XSS.

+60 XP
Go Pro
Exploit Fix
Обложка лабы: Timing Attack: Перечисление Пользователей Обложка лабы: Timing Attack: Перечисление Пользователей
Auth

Timing Attack: Перечисление Пользователей

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

+90 XP
Go Pro
Exploit Fix
Обложка лабы: Argument Injection в архиваторе файлов Обложка лабы: Argument Injection в архиваторе файлов
CMD Injection

Argument Injection в архиваторе файлов

Обработчик архивации файлов использует exec.Command без shell, но не фильтрует аргументы, начинающиеся с '-'. Атакующий может внедрить произвольные флаги команды tar.

+90 XP
Go Pro
Exploit Fix
Обложка лабы: Blind Command Injection через сетевую диагностику Обложка лабы: Blind Command Injection через сетевую диагностику
CMD Injection

Blind Command Injection через сетевую диагностику

Обработчик сетевой диагностики передаёт пользовательский ввод в sh -c без фильтрации. Результат команды не отображается — используйте time-based технику для подтверждения инъекции.

+90 XP
Go Pro
Exploit Fix