لاب رقم (3) | DOM XSS in document.write sink using source location.search

تعلم أسرار ثغرة DOM XSS وكيفية استغلال دالة document.write في لابات PortSwigger. شرح عملي للمبتدئين في الـ Bug Bounty لكيفية تحليل كود الجافا سكريبت..

ثغرة DOM XSS: عندما يخدع المتصفح نفسه! 👻 وسحر الـ document.write

مرحباً بكم من جديد! بعد أن تحدثنا عن الـ XSS المنعكس والمخزن، حان الوقت لنتعرف على النوع "الشبح" أو الـ DOM-based XSS. هذا النوع لا يحتاج أحياناً للوصول إلى السيرفر أصلاً، فكل "الجريمة" تحدث داخل متصفح الضحية!

تطبيقنا اليوم على لاب مميز جداً من PortSwigger:
DOM XSS in document.write sink using source location.search

جهز تركيزك، لأننا اليوم سنتعلم كيف نقرأ كود الـ JavaScript لنعرف من أين تؤكل الكتف! 🔍💻

ثغرة DOM XSS عندما يخدع المتصفح نفسه! 👻 وسحر الـ document.write

🤔 ما هو الـ DOM XSS ببساطة؟

تخيل أن الموقع عبارة عن بناء، والـ DOM (Document Object Model) هو الخريطة التي يرسمها المتصفح لهذا البناء. في هذا النوع من الثغرات، المشكلة ليست في السيرفر، بل في كود JavaScript الموجود في الصفحة، والذي يأخذ بيانات من المستخدم بطريقة خاطئة ويضعها في مكان حساس.

في لغة الهاكرز، لدينا مصطلحين مهمين جداً:

  • Source (المصدر): هو المكان الذي نأخذ منه البيانات (مثل رابط الصفحة location.search).
  • Sink (المصب): هو المكان "الخطر" الذي تُحقن فيه البيانات ويتم تنفيذها (مثل دالة document.write).

🔍 تحليل اللاب (The Investigation)

عندما تفتح اللاب، ابحث عن أي شيء؛ ستجد أن الموقع يعرض صورة "عدسة مكبرة" أو أي عنصر جرافيك بجانب كلمة البحث. لو قمت بفحص الكود (Inspect Element)، ستجد كود JavaScript يشبه هذا:

document.write('<img src="/resources/images/tracker.gif?searchTerms='+query+'">');

ماذا يحدث هنا؟
الموقع يأخذ ما كتبته في مربع البحث (المخزن في المتغير query) ويضعه مباشرة داخل وسم صورة <img> باستخدام دالة document.write. المطور ظن أنه بمجرد وضعها داخل "مسار الصورة" (src attribute) فهي آمنة.. لكننا سنثبت له العكس! 😏


🛠️ خطة الهجوم (The Exploit)

هدفنا هو "كسر" وسم الصورة والخروج منه لكتابة كودنا الخاص. إليك الخطة:

  1. سنكتب "> لكي نغلق خاصية الـ src ونغلق وسم الـ <img> تماماً.
  2. بعدها سنكتب وسم جديد تماماً يمكنه تنفيذ JavaScript، وأفضل وسم لهذه المهمة هو <svg> مع خاصية onload.

الـ Payload النهائي سيكون:

"><svg onload=alert(1)>

بمجرد وضع هذا الكود في مربع البحث والضغط على Enter، سيقوم المتصفح بإغلاق الصورة الأصلية ورسم عنصر svg جديد، وعندما يكتمل تحميله، سينفذ أمر alert(1). مبروك، لقد نفذت DOM XSS! 🥳


💡 نصيحة صياد (Hunter Tips)

  • لا تعتمد على المشاهدة فقط: في الـ DOM XSS، يجب أن تفتح الـ Debugger في المتصفح وتراقب كيف تتحرك البيانات داخل كود الـ JavaScript.
  • ابحث عن الـ Sinks: دائماً ابحث في الأكواد عن دوال مثل .innerHTML، document.write()، و eval()، فهي أماكن حدوث الثغرة غالباً.
  • تلاعب بالرابط: في هذا اللاب، المصدر كان location.search، وهذا يعني أنك تستطيع إرسال الرابط الملغم لأي ضحية وسينفذ الكود عنده فوراً.

🚀 الخاتمة

الـ DOM XSS ممتع جداً لأنه يعتمد على فهمك لبرمجة الموقع وكيفية معالجة البيانات في "جانب العميل" (Client-side). كلما زادت مهارتك في قراءة الـ JavaScript، زادت فرصك في صيد ثغرات لا يراها الآخرون.

ماذا بعد؟ هل أنت جاهز للتعامل مع "الفلاتر" ومحاولة كسر التشفير في اللابات القادمة؟ استمر يا بطل! 👇

إرسال تعليق