ثغرة XSS المتقدمة: استغلال الـ SVG لكسر حصون الفلاتر 🎨🔓
مرحباً بصيادي الثغرات المبدعين! أحياناً يظن المطور أنه بحظر وسوم مثل <script> و <img> قد أمّن موقعه بالكامل. لكنه ينسى أن الـ HTML5 يدعم وسوم الـ SVG، والتي هي في الحقيقة عبارة عن أكواد XML يمكنها تنفيذ جافا سكريبت بطرق ذكية جداً!
لاب اليوم من PortSwigger هو:
Reflected XSS with some SVG markup allowed
اليوم سنتعلم كيف نستخدم الـ Fuzzing لاكتشاف الوسوم المسموحة داخل الـ SVG وكيفية بناء Payload قاتل. لنبدأ! 🚀
🔍 رحلة البحث (Fuzzing the Filter)
بما أننا في مستوى متقدم، سنعتمد على Burp Suite Intruder لاكتشاف الثغرات في جدار الحماية (WAF):
- قمنا بتجربة كافة وسوم HTML، والنتيجة كانت حظر الجميع (403).
- عند تجربة الوسوم الخاصة بالـ SVG، وجدنا أن المتصفح يسمح بـ:
<svg>،<animatetransform>،<title>، و<image>. - الآن التحدي: كيف نستخدم هذه الوسوم المحدودة لتنفيذ
alert()؟
🧠 الفكرة: التلاعب بالأحداث داخل الـ SVG
وسم <svg> ليس مجرد مساحة للرسم، بل هو كائن يدعم الأحداث (Events). وسم <animatetransform> تحديداً مثير للاهتمام، لأنه يستخدم لعمل حركات (Animations) على العناصر، ويمكننا ربط حدث onbegin به.
عندما يبدأ الـ Animation (وهذا يحدث فور تحميل الصفحة)، سيقوم المتصفح بتنفيذ الكود الموجود داخل onbegin.
🛠️ خطة الهجوم (The SVG Payload)
سنقوم ببناء Payload يعتمد على هيكلية الـ SVG المسموحة لنا. سنضع وسم الـ Animation داخل وسم الـ SVG الأب.
الـ Payload السحري:
<svg><animatetransform onbegin=alert(1)>
لماذا يعمل هذا الكود؟
1. الفلتر يسمح بوسم <svg> كبداية.
2. الفلتر يسمح بوسم <animatetransform>.
3. الفلتر لم يقم بحظر حدث onbegin المرتبط بهذا الوسم المحدد.
4. بمجرد أن يحاول المتصفح رصد حركة العنصر، ينفذ الـ JavaScript فوراً.
📝 خطوات الحل العملية
- افتح اللاب واذهب إلى مربع البحث.
- قم بحقن الـ Payload التالي بعد تشفيره (URL Encoded) أو كتابته مباشرة:
- اضغط Search.
<svg><animatetransform onbegin=alert(1)>
النتيجة: 💥 ستظهر نافذة الـ alert بنجاح! لقد استغليت "مساحة مسموحة" (SVG Context) لتجاوز فلتر الـ HTML الرئيسي.
💡 نصيحة صياد (The SVG Goldmine)
عالم الـ SVG مليء بالفرص لاختراق الـ XSS، إليك بعض الوسوم التي يجب فحصها دائماً:
<svg onload=alert(1)>(الأساسي والأشهر).<animate onbegin=alert(1)>.<set onbegin=alert(1)>.- استخدام وسم
<a>داخل الـ SVG معxlink:href="javascript:alert(1)".
🚀 الخاتمة
لاب اليوم يعلمنا أن "الأجزاء المسموحة" في الموقع هي المكان الأفضل للبحث عن الثغرات. المطور الذي يسمح بالـ SVG لغرض عرض الرسومات، قد يفتح باباً خلفياً كاملاً للمخترقين إذا لم يقم بتأمين الأحداث (Events) الخاصة بها.
.png)