ثغرة Reflected DOM XSS: عندما يلتقي السيرفر والمتصفح في فخ واحد! 🔗💥
مرحباً بكم يا صائدي الثغرات! اليوم سنتحدث عن نوع هجين ومثير جداً، وهو الـ Reflected DOM XSS. في هذا النوع، السيرفر يمرر لنا الكرة، لكن المتصفح هو من يسجل "هدف الاختراق" في نفسه بسبب كود JavaScript ضعيف.
تطبيقنا اليوم من PortSwigger هو:
Reflected DOM XSS
اليوم سنستخدم Burp Suite لنراقب البيانات وهي تتحول من نص عادي إلى كود قاتل داخل دالة eval(). استعدوا للغوص في التفاصيل! 🚀
🔍 ما هو الـ Reflected DOM XSS؟
تحدث هذه الثغرة عندما يقوم السيرفر بأخذ مدخلاتك ووضعها داخل استجابة (غالباً تكون JSON)، ثم يأتي سكريبت موجود في الصفحة ليأخذ هذه الاستجابة ويعالجها بطريقة غير آمنة داخل "مصب" (Sink) خطر.
في لابتنا اليوم، المصب الخطر هو دالة eval()، وهي دالة سيئة السمعة لأنها تقوم بتنفيذ أي نص يصل إليها كأنه كود برمجى.
🧠 رحلة البحث والتحليل (The Investigation)
باستخدام أداة Burp Suite، قمنا بتتبع ما يحدث عند البحث عن كلمة "XSS":
- الموقع يرسل طلبًا للسيرفر، والسيرفر يرد بملف JSON يحتوي على الكلمة التي بحثنا عنها.
- وجدنا ملفاً يسمى
searchResults.jsيأخذ هذه النتائج ويستخدمeval()لعرضها. - المفاجأة: الموقع يحاول حماية نفسه بتشفير علامات التنصيص
"بإضافة باك سلاش\قبلها، لكنه نسي أن يشفر الباك سلاش نفسها!
🛠️ خطة الاختراق (The Backslash Trick)
بما أن الموقع يهرب علامة التنصيص بإضافة \، فماذا لو أعطيناه نحن \ إضافية؟
عندما نرسل \"، السيرفر سيحاول الهروب من علامة التنصيص بإضافة باك سلاش، فتصبح النتيجة \\". هنا، الباك سلاش الأولى تلغي عمل الثانية، وتتحرر علامة التنصيص لتغلق السلسلة النصية (String) ونبدأ بكتابة كودنا!
الـ Payload السحري:
\"-alert(1)}//
شرح تفصيلي للـ Payload:
1. \": لتحرير علامة التنصيص وإغلاق نص البحث.
2. -: عمل موازنة حسابية (Arithmetic operator) لفصل الكود عن ما قبله.
3. alert(1): الكود الذي نريد تنفيذه.
4. }: لإغلاق كائن الـ JSON برمجياً بشكل صحيح.
5. //: لعمل "تعليق" (Comment) لكل ما يأتي بعد الكود الخاص بنا حتى لا يحدث خطأ برمجى.
📝 خطوات الحل العملية
- افتح اللاب واكتب في مربع البحث:
\"-alert(1)}//. - اضغط Search.
النتيجة النهائية في كود الصفحة ستكون:
{"searchTerm":"\\"-alert(1)}//", "results":[]}
بسبب الـ \\، نجحنا في كسر السلسلة وتنفيذ الـ alert بنجاح! 💥
💡 نصيحة صياد (The JSON Trap)
دائماً عندما ترى بيانات تعود من السيرفر في شكل JSON ويتم معالجتها بواسطة JavaScript:
- ابحث عن دالة
eval()أوJSON.parse(). - اختبر كيف يتم التعامل مع الرموز الخاصة مثل
"و\و'. - جرب كسر بنية الـ JSON كما فعلنا اليوم؛ فالمبرمجون غالباً ما ينسون حالات الهروب المتكرر (Double Escaping).
🚀 الخاتمة
لاب اليوم علمنا أن الحماية التي تعتمد على "الهروب" (Escaping) قد تكون هي نفسها نقطة الضعف إذا لم تشمل كل الرموز. الـ XSS هو لعبة ذكاء وتفاصيل صغيرة جداً!
.png)