ثغرة XSS المتقدمة: كيف تسرق خاصية href وتتخطى حظر الأحداث؟ 🎨🔓
مرحباً بصيادي الثغرات! اليوم سنتعلم درساً مهماً: عندما يقوم جدار الحماية (WAF) بحظر الكلمات المفتاحية الشهيرة مثل onclick أو يمنعك من استخدام href في الروابط، لا تستسلم! سنلجأ إلى عالم الـ SVG السحري لنقوم بحقن كود JavaScript بطريقة غير متوقعة.
لاب اليوم من PortSwigger هو:
Reflected XSS with event handlers and href attributes blocked
سنتعلم اليوم كيف نستخدم وسم <animate> لنقوم بـ "تغيير" خصائص العناصر ديناميكياً وحقن الكود الخاص بنا. لنبدأ! 🚀
🔍 التحدي: سجن الـ WAF والوسوم المحظورة
الموقع يستخدم فلتر قوي يمنع أي وسم يحتوي على أحداث JavaScript المعتادة. كما أنه يمنع استخدام href داخل وسم الـ <a> لمنع روابط javascript:alert(1) التقليدية.
لماذا سنستخدم الـ SVG؟
لأن الـ SVG يمتلك منظومة برمجية خاصة به تسمى SMIL (Synchronized Multimedia Integration Language). هذه المنظومة تسمح لنا بالتلاعب بخصائص العناصر (Attributes) دون الحاجة لاستخدام JavaScript مباشرة في البداية.
🧠 الحل: التلاعب بخصائص العناصر عبر الرسوم المتحركة
بدلاً من كتابة href مباشرة (والتي سيحظرها الفلتر)، سنستخدم وسم <animate>. هذا الوسم وظيفته تغيير قيمة خاصية معينة بمرور الوقت. سنخبره أن يقوم بتغيير خاصية الـ href لوسم الرابط ويضع فيها كود الجافا سكريبت الخاص بنا.
🛠️ الـ Payload القاتل (The SVG Animation Hack)
إليك الكود الذي سيتخطى الفلتر:
<svg><a><animate attributeName=href values=javascript:alert(1) /><text x=20 y=20>Click me</text></a></svg>
تحليل الكود (لماذا يعمل؟):
1. <svg><a>: نفتح وسم SVG وبداخله وسم رابط خاص بالـ SVG.
2. attributeName=href: نخبر المتصفح أننا نريد تحريك (تغيير) خاصية الـ href.
3. values=javascript:alert(1): نحدد القيمة الجديدة التي ستوضع داخل الـ href. بما أن الفلتر يفحص الوسوم الثابتة فقط، فإنه لن يلاحظ أننا نقوم بحقن الكود عبر الـ Animation.
4. <text>: نضع نصاً قابلاً للضغط عليه لتفعيل الرابط.
📝 خطوات الحل العملية
- افتح اللاب واذهب إلى مربع البحث.
- قم بحقن الـ Payload التالي (بعد استبدال ID اللاب الخاص بك):
- اضغط Enter، ثم اضغط على كلمة "Click me" التي ستظهر في الصفحة.
[https://YOUR-LAB-ID.web-security-academy.net/?search=%3Csvg%3E%3Ca%3E%3Canimate+attributeName%3Dhref+values%3Djavascript%3Aalert(1)+%2F%3E%3Ctext+x%3D20+y%3D20%3EClick+me%3C%2Ftext%3E%3C%2Fa%3E](https://YOUR-LAB-ID.web-security-academy.net/?search=%3Csvg%3E%3Ca%3E%3Canimate+attributeName%3Dhref+values%3Djavascript%3Aalert(1)+%2F%3E%3Ctext+x%3D20+y%3D20%3EClick+me%3C%2Ftext%3E%3C%2Fa%3E)
💥 النتيجة: ستظهر نافذة الـ alert(1) بنجاح! لقد خدعت الفلتر باستخدام الرسوم المتحركة لتوليد رابط خبيث.
💡 نصيحة صياد (The SVG Trick)
- التنويع: إذا تم حظر
animate، ابحث عن وسوم مشابهة في SVG مثلset. - السياق: دائماً تذكر أن الـ SVG يُعامل معاملة XML داخل الـ HTML، مما يفتح آفاقاً واسعة للهروب من الفلاتر التي تركز فقط على الـ HTML التقليدي.
🚀 الخاتمة
هذا اللاب يعلمنا أن الحماية القائمة على "الكلمات المحظورة" (Blacklisting) يمكن دائماً الالتفاف عليها بالإبداع. فهمك العميق لكيفية عمل المتصفح والوسوم النادرة هو ما يجعلك صائد ثغرات محترف.
.png)