Introducción a la explotación SSRF: un tutorial práctico para hackers éticos — StackZero

Feb 22 2023
El artículo completo se publicó en https://stackzero.net/ssrf-introduction/ La falsificación de solicitud del lado del servidor (SSRF) es un tipo de vulnerabilidad de aplicación web que permite a un atacante enviar una solicitud manipulada desde una aplicación web vulnerable a un servidor arbitrario. destino.

El artículo completo fue publicado enhttps://stackzero.net/ssrf-introduction/

La falsificación de solicitud del lado del servidor (SSRF) es un tipo de vulnerabilidad de aplicación web que permite a un atacante enviar una solicitud manipulada desde una aplicación web vulnerable a un destino arbitrario. Esto puede incluir sistemas internos, como un servidor de base de datos o un servidor de archivos.

La vulnerabilidad ocurre cuando la aplicación web toma una entrada no desinfectada proporcionada por el usuario y la usa para crear una solicitud.
De esta forma es posible crear una solicitud maliciosa y obligar al servidor vulnerable a enviarla.

Por ejemplo, imagina una aplicación web que:

  • toma una URL como entrada
  • muestra el contenido de la página web asociada.

SSRF VS CSRF en pocas palabras:

¿ Cuál es la diferencia entre SSRF y CSRF ?

  • CSRF: el objetivo es un usuario/cliente y tiene que realizar algunas acciones para convertirse en víctima. La vulnerabilidad no depende directamente de él, sino del servidor que alberga una aplicación potencialmente vulnerable.
  • SSRF: un hacker puede usar la propia aplicación para enviar solicitudes maliciosas desde un dominio de confianza. En este caso, la vulnerabilidad no depende de factores externos sino directamente del código de la aplicación.
  • ¿Quieres apostar a que CSRF no es tan difícil como crees?

En esta breve práctica, realizaremos un exploit muy simple en un servidor mal codificado. Esta no es una situación real, pero puede ayudar mucho a comprender la vulnerabilidad.

Lo que voy a hacer es preparar nuestra Kali Machine en VirtualBox de manera que tengamos dos servidores funcionando:

  • La primera es la aplicación vulnerable (dentro del directorio principal del proyecto).
  • El segundo es un servidor que muestra el contenido de un directorio secreto y solo es visible desde localhost (se ejecuta dentro de un directorio secreto).

Si tienes dudas puedes encontrar el código completo en el repositorio de GitHub .

El servidor vulnerable a SSRF

Antes de escribir el código del servidor vulnerable necesitamos la dirección IP, así que escribamos en una terminal:

ifconfig

Tras tomar la IP podemos escribir el código de una aplicación vulnerable.
Por ejemplo, si fuera 192.168.1.116, este será el código relacionado para ejecutar un servidor en LAN en el puerto 8000.


from flask import Flask, request
import requests


app = Flask(__name__)

my_ip = '192.168.1.116'

@app.route("/")
def index():
    url = request.args.get("url")
    response = requests.get(url)
    return response.text


if __name__ == "__main__":
    app.run(host=my_ip, port=8000)

Esta aplicación tiene un punto final único que toma una URL como parámetro de consulta y realiza una solicitud GET a esa URL mediante la biblioteca de solicitudes. La respuesta de la solicitud se devuelve al usuario.

De esta forma, podemos obligar al servidor web a que nos muestre lo que puede ver, aunque no tengamos los derechos.

Podemos ejecutar la aplicación tecleando en nuestra terminal:

python vulnerable_application.py

Si no tiene instalado el matraz, debe hacerlo con el comando:

pip install flask

La vulnerabilidad de esta aplicación es que permite a un atacante crear una URL que apunta a un servicio interno, pero veamos cómo hacerlo.

El Servicio Interno

Quiero hacer esta introducción lo más simple posible, así que para ejecutar un servicio interno voy a usar un módulo interno de python: http.server .
Queremos ejecutarlo en localhost en el puerto 8888:

  1. Abra una terminal o símbolo del sistema.
  2. Navegue hasta el directorio "supersecretdir" que contiene la bandera.
  3. Escriba el siguiente comando para iniciar el servidor:
  4. python -m http.server 8888
    
           
                    

  • Mover en su máquina host
  • Abre el navegador
  • Intenta conectarte a esta URL:http://192.168.1.116:8000?url=http://localhost:8888

¡Así que obtuvimos acceso a un servidor interno al que normalmente no podíamos acceder!
¡Como esperábamos, el exploit está funcionando bien!

Conclusión

Hemos visto solo una prueba de concepto simple, aunque en escenarios del mundo real, la vulnerabilidad podría ser más compleja de explotar y prevenir. Sin embargo, espero que este artículo haya sido interesante y haya proporcionado valor a aquellos que buscan obtener más información sobre la falsificación de solicitudes del lado del servidor (SSRF).

Con la creciente prevalencia de las aplicaciones web y la infraestructura en la nube, es más importante que nunca estar al tanto de las posibles vulnerabilidades de seguridad que plantean los ataques SSRF. Al comprender los conceptos básicos de SSRF, su impacto y cómo prevenirlo, podemos proteger mejor nuestros sistemas y datos de actores maliciosos. Recuerde, la prevención siempre es mejor que la reacción y, al tomar medidas proactivas para proteger nuestras aplicaciones web, podemos evitar consecuencias potencialmente desastrosas en el futuro.

Si este artículo le pareció informativo, lo invito a seguir mi blog para obtener más información sobre ciberseguridad.
Manténgase actualizado sobre las últimas tendencias y técnicas para proteger sus sistemas de amenazas potenciales. No dudes en dejar un comentario o compartir este artículo con otras personas a las que les pueda resultar útil.
¡Gracias por leernos y te esperamos en el blog!

Publicado originalmente en https://stackzero.net el 17 de febrero de 2023.

Sígueme en medium para recibir mis nuevos artículos. Y si desea suscribirse a Medium, considere usar mi enlace de referencia, no es un costo adicional para usted, pero sería de gran ayuda para mí.

Otros artículos que te pueden gustar: