В отличие от обычного HTTP, где каждый запрос требует отдельного ответа, WebSocket создаёт постоянный двунаправленный канал связи.
После установки соединения клиент и сервер могут обмениваться данными напрямую — без повторных HTTP-заголовков и новых запросов.
Как устанавливается соединение ⬇️
Соединение начинается с обычного HTTP-рукопожатия. Клиент отправляет запрос:
GET /chat
Connection: Upgrade
Upgrade: websocket
Если сервер поддерживает веб-сокеты, он отвечает:
HTTP/1.1 101 Switching Protocols
После этого соединение остаётся открытым и дальнейший обмен идёт по протоколу
ws:// или wss://.🤑 Почему веб-сокеты часто приводит к багам
Разрабы обычно проверяют пользователя во время handshake, но забывают проверять сообщения внутри соединения. Из-за этого появляются типичные уязвимости.
➡️ CSWSH (Cross-Site WebSocket Hijacking)
Если сервер использует только файлы cookie для установления соединения и игнорирует заголовок
Origin, ты можешь заставить браузер жертвы открыть WS-соединение и украсть данные. ➡️ IDOR и несанкционированный доступ
Если сервер принимает команды без проверки прав пользователя, можно отправлять запросы напрямую через веб-сокеты.
{"user_id": 1337, "action": "delete"}➡️ Инъекции
Иногда веб-сокеты передаются дальше во внутренние сервисы или админ-панели без фильтрации. Это может приводить к SQLi, CMDi и другим багам.
⚙️ Тулчейн
✅ Burp Suite: WebSockets History и Repeater — твои лучшие друзья. Перехватывай, изменяй и удаляй фреймы
✅ STEWS: автоматически ищет веб-сокет эндпоинты и собирает фингерпринты
✅ Wscat: CLI-клиент для быстрого тестирования веб-сокет соединений
✅ WebSocket Turbo Intruder: расширение для фаззинга веб-сокет сообщений с использованием кастомного Python-кода
🔗 Пак лабораторий PortSwigger по теме
