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

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

WebSocket Message Injection (XSS via innerHTML)

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

Автор: Hack & Fix
Освоишь: Origin checktoken в handshakerate limit
Средне+60 XP ~40 мин golang
CWE-346 · A05:2021 Pro
Обложка: WebSocket Message Injection (XSS via innerHTML) Обложка: WebSocket Message Injection (XSS via innerHTML)
Задача
# Инъекция в WebSocket-чат: исполнение разметки у других участников ## Сценарий Вы — пентестер сервиса бронирования путешествий **WanderDesk**. Команда добавила живой чат поддержки на WebSocket: сервер принимает сообщение и рассылает его всем, кто сейчас в чате. Безопасность строится на авторизации — «в чат пускаем только своих». У модерации есть бот-администратор: по заявке из сервисной формы отчётов он открывает присланные ссылки. Флаг хранится в его панели, и перед запуском чата для клиентов вас попросили проверить, не опасен ли чат для самих операторов. ## Цель 1. Проследите путь сообщения: как сервер рассылает его участникам и как клиентская страница отображает полученное. 2. Внедрите через сообщение чата активное содержимое, которое исполнится в браузере другого участника. 3. Заманите бота-администратора в чат через форму отчётов и добудьте флаг из его панели, достав содержимое на Exploit Server. ## Теория Хранимый XSS в канале реального времени особенно опасен: сообщение мгновенно доходит до всех подключённых — включая привилегированных участников с активными сессиями. Для защиты достаточно одного из двух слоёв: серверного экранирования спецсимволов разметки при рассылке или безопасной вставки сообщения как текста на клиенте. Здесь нет ни того, ни другого. Флаг cookie не спасает: исполнившийся код работает от имени жертвы — запросы к закрытым страницам того же домена уходят с её cookie автоматически, а прочитанный ответ можно отправить наружу прямо из этого кода. **Уязвимый паттерн:** ```go _, msg, err := conn.ReadMessage() // сообщение пересылается всем как есть, без экранирования: message := string(msg) client.WriteMessage(websocket.TextMessage, []byte(message)) ``` Механика атаки: текст сообщения попадает в браузеры участников без преобразования и вставляется в страницу как разметка. Отправитель контролирует содержимое — значит, может заставить браузер другого участника исполнить код: от имени жертвы открываются закрытые страницы её сессии, и их содержимое уходит атакующему. ## Точка входа атаки `/chat` — страница чата (WebSocket-соединение, точка инъекции); `/report` — сервисная форма отчётов, вызывающая бота-администратора по ссылке. * **Обычный пользователь:** `demo` / `demo`

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

другие лабы по этой уязвимости
Обложка лабы: WebSocket Security: Угон сокета (CSWSH) Обложка лабы: WebSocket Security: Угон сокета (CSWSH)
WebSocket

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

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

+90 XP
Go Pro
Exploit Fix
Обложка лабы: API BOLA: Доступ к чужим заказам Обложка лабы: API BOLA: Доступ к чужим заказам
API

API BOLA: Доступ к чужим заказам

Broken Object Level Authorization (BOLA): API возвращает заказы любого пользователя по ID без проверки владельца.

+60 XP
Go Pro
Exploit Fix
Обложка лабы: Horizontal Privilege Escalation: изменение профиля другого пользователя Обложка лабы: Horizontal Privilege Escalation: изменение профиля другого пользователя
Access

Horizontal Privilege Escalation: изменение профиля другого пользователя

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

+60 XP
Go Pro
Exploit Fix
Обложка лабы: URL Case Bypass: обход проверки пути с помощью регистра Обложка лабы: URL Case Bypass: обход проверки пути с помощью регистра
Access

URL Case Bypass: обход проверки пути с помощью регистра

Middleware проверяет путь с учётом регистра (strings.HasPrefix). Замена /admin на /Admin позволяет обойти проверку роли администратора.

+60 XP
Go Pro
Exploit Fix