Bonjour,
Dans le cadre d’un bug bounty, j’ai trouvé une reflected XSS sur un paramètre POST. Nommons le site vulnérable example.com pour plus de clarté. Le endpoint vulnérable est https://example.com/statistics.
Ce que j’aimerai faire via ma XSS, c’est effectuer une requête GET vers un second endpoint (qui nécessite d’être authentifié pour y accéder) : example.com/profil. Pour ce faire j’ai utilisé XMLHttpRequest. Voilà le petit bout de code.
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
console.log(xhr.response);
}
}
xhr.open('GET', 'https://example.com/profil/', true);
xhr.withCredentials = true;
xhr.send(null);
console.log(xhr.reponse);
Donc sur mon serveur perso, j’héberge un bout de code javascript qui va automatiquement send une requête POST vers le endpoint vulnérable en envoyant ce code JS dans le paramètre vulnérable.
Je me suis créé un compte de test sur l’application, lorsque j’accède à mon serveur perso hébergeant cette page, je suis bien redirigé vers le site vulnérable est mon code est bien exécuté car en regardant l’onglet réseau de chromium, je vois bien une requête partir vers example.com/profil. Je suis à ce moment là bien authentifié. Cependant, la requête qui part vers /profile ne contient pas mon cookie de session.
Ma question est, comment faire pour envoyer automatiquement le cookie de session via XMLHttpRequest ?