SSRF (Server-Side Request Forgery)
con laboratorio
Qué es
Algunas webs hacen peticiones por ti: descargar una imagen desde una URL, previsualizar un enlace, consultar una API. En un SSRF yo controlo esa URL y consigo que el servidor pida lo que yo quiera. Lo importante es que el servidor puede llegar a sitios que yo no: localhost, la red interna, servicios de metadatos en la nube.
Detección
- Buscar parámetros con URLs (
?url=,?imagen=, formularios "subir desde URL"). - Apuntar la URL a un servidor mío (
python3 -m http.server, o Burp Collaborator) y comprobar si llega una petición. - Probar
http://127.0.0.1/y puertos internos (:5000,:8080…).
Qué se consigue
- Acceder a paneles de administración que solo escuchan en local (
http://localhost/admin). - Descubrir APIs internas (ejemplo: Editorial).
- En la nube, leer credenciales temporales en
http://169.254.169.254/.
Filtros comunes y cómo se saltan
| Filtro | Intento |
|---|---|
Bloquea 127.0.0.1 | 127.1, 2130706433, [::1], localhost |
| Lista de dominios permitidos | http://permitido.com@atacante.com, redirecciones abiertas |
Bloquea la palabra admin | Doble codificación URL |
Cómo se arregla
- Lista blanca de destinos permitidos y esquemas (solo
https). - Resolver el dominio y comprobar que no apunta a IPs internas, y no seguir redirecciones.
- Segmentar la red para que el servidor web no llegue a servicios internos sensibles.
