لاب رقم (14) | Reflected XSS into HTML context with all tags blocked except custom ones

تعلم تقنية متقدمة لتخطي فلاتر الـ XSS عبر استخدام الوسوم المخصصة (Custom Tags). شرح عملي لحل لابات PortSwigger وتجاوز حظر الوسوم باستخدام أحداث الـ on

ثغرة XSS المتقدمة: الهروب عبر الوسوم المخصصة (Custom Tags) 🚀🛡️

Reflected XSS into HTML context with all tags blocked except custom ones

مرحباً بصيادي الثغرات! ماذا تفعل إذا واجهت جدار حماية (WAF) "متعصب" قام بحظر كل وسم HTML تعرفه في حياتك؟ في لابتنا اليوم، سنستخدم تقنية ذكية جداً لتجاوز هذا الحظر عبر ابتكار وسومنا الخاصة!

لاب اليوم من PortSwigger هو:
Reflected XSS into HTML context with all tags blocked except custom ones

اليوم سنتعلم كيف نجعل المتصفح ينفذ كود JavaScript باستخدام وسم "وهمي" من اختراعنا. لننطلق! 🕵️‍♂️


🔍 مرحلة الفحص (Fuzzing Results)

بعد استخدام Burp Suite Intruder وتجربة قائمة الوسوم الكاملة، كانت النتيجة محبطة: كل الوسوم تعطي 403 Forbidden.

لكن، عند تجربة وسم عشوائي مثل <gemini-tag>، نجد أن الموقع يقبله! هذا يعني أن الفلتر يحظر "القائمة السوداء" للوسوم المعروفة فقط، ويترك أي شيء آخر يمر.


🧠 الفكرة: كيف ننفذ كود داخل وسم مخصص؟

بما أن الوسم المخصص <xss-tag> غير معروف للمتصفح، فنحن بحاجة لطريقة لإجبار المتصفح على تنفيذ كود عند التفاعل معه. أفضل طريقة هي استخدام الهاش (#) في الرابط مع حدث الـ onfocus.

عندما نستخدم tabindex، نجعل هذا الوسم المخصص قابلاً للتركيز (Focusable)، وعندما نستخدم الـ ID مع الهاش، يجبر المتصفح "التركيز" على الانتقال لهذا الوسم فور تحميل الصفحة.


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

سنقوم بإرسال رابط للضحية يحتوي على وسمنا المخصص، ونستخدم سكريبت بسيط ليقوم بتحويل الضحية إلى الرابط الذي يحتوي على الهاش ليفعل الـ Focus تلقائياً.

الـ Payload السحري:

<xss-tag onfocus="alert(document.cookie)" id="x" tabindex="1">

الرابط النهائي الذي سنرسله للضحية (عبر Exploit Server):

<script>
location = 'https://YOUR-LAB-ID.web-security-academy.net/?search=%3Cxss-tag+onfocus%3Dalert%281%29+id%3Dx+tabindex%3D1%3E#x';
</script>

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

  1. اذهب إلى Exploit Server.
  2. في قسم الـ Body، ضع كود السكريبت الذي يقوم بتحويل المستخدم إلى رابط اللاب مضافاً إليه الـ Payload والهاش #x في النهاية.
  3. تأكد أن الـ ID في الـ Payload (وهو x) يطابق الكلمة الموجودة بعد الهاش في الرابط.
  4. اضغط Deliver exploit to victim.

ماذا حدث؟ المتصفح فتح الرابط، وجد الوسم المخصص، وبسبب الهاش #x، قام بعمل "Focus" تلقائي على الوسم الذي يحمل نفس الـ ID، فانطلق حدث onfocus ونُفذ الكود! 💥


💡 نصيحة صياد (Custom Tag Pro Tip)

دائماً تذكر هذه الحيلة عندما تجد فلتراً قوياً:

  • الوسوم المخصصة: المتصفحات تسمح بأي اسم وسم (Custom Elements) ما دام يحتوي على حروف.
  • التركيز التلقائي: استخدام tabindex مع الـ ID والـ URL Fragment (#) هو بديل قوي جداً لخاصية autofocus التي قد تكون محظورة.
  • التطوير: يمكنك استخدام هذه الطريقة لسرقة البيانات دون أن يلاحظ المستخدم أي تغيير في الصفحة.

🚀 الخاتمة

لاب اليوم يعلمنا أن الحماية القائمة على "القوائم السوداء" (Blacklists) فاشلة دائماً. المطور الذي يحظر الوسوم المعروفة فقط يترك الباب مفتوحاً للإبداع. استمر في التفكير خارج الصندوق!

إرسال تعليق