ثغرة XSS في وسم الـ Canonical: كيف تستغل الروابط التي لا يراها المستخدم؟ 🔗🕵️♂️
مرحباً بكم من جديد! اليوم سننتقل إلى زاوية خفية في صفحات الويب. هل سمعت من قبل عن الـ Canonical Link؟ هو وسم يستخدمه خبراء الـ SEO لإخبار محركات البحث بالرابط الأصلي للصفحة. لكننا اليوم، كخبراء أمنيين، سنستخدمه لغرض آخر تماماً: تنفيذ JavaScript!
لاب اليوم من PortSwigger هو:
Reflected XSS in canonical link tag
اليوم سنتعلم كيف نتلاعب بالرابط (URL) لنهرب من سجن الـ Attribute وننفذ الكود باستخدام اختصارات لوحة المفاتيح. لنبدأ! 🚀
🔍 ما هو الـ Canonical Link Context؟
في هذا اللاب، يقوم الموقع بإنشاء وسم <link rel="canonical" ...> بناءً على الرابط الذي يزوره المستخدم. إذا قمت بزيارة رابط يحتوي على رموز معينة، فستجدها تنعكس داخل خاصية الـ href لهذا الوسم.
الكود في الصفحة يبدو هكذا:
<link rel="canonical" href="https://your-lab-id.net/[كلامك يوضع هنا]">
التحدي: نحن داخل وسم <link>، وهذا الوسم لا يظهر للمستخدم في الصفحة (Invisible)، فكيف سنجعل المتصفح ينفذ كود XSS عليه؟
🧠 الفكرة: الهروب والاختصارات السحرية
بما أننا داخل الـ href، سنقوم أولاً بالهروب من علامات التنصيص باستخدام '. ثم سنضيف خصائص (Attributes) تسمح بتنفيذ الكود. ولكن بما أن الوسم مخفي، سنستخدم "مفاتيح الوصول" أو الـ Access Keys.
الـ Payload السحري:
'accesskey='x'onclick='alert(1)
كيف يعمل هذا الهجوم؟
1. العلامة ' تغلق الرابط الحالي.
2. accesskey='x': هذه الخاصية تجعل المتصفح يربط هذا الوسم باختصار لوحة مفاتيح معين (في نظام Windows غالباً يكون ALT + SHIFT + X).
3. onclick='alert(1)': تخبر المتصفح أنه عند "الضغط" على هذا العنصر (عبر الاختصار)، نفذ الكود.
🛠️ خطوات التنفيذ العملية
- افتح اللاب وأضف الـ Payload التالي مباشرة في نهاية الرابط (URL):
- اضغط Enter لتحميل الصفحة (الآن الكود مزروع في الـ Source).
- لتفعيل الثغرة، يجب الضغط على اختصار لوحة المفاتيح الخاص بمتصفحك:
- على Windows: اضغط
ALT + SHIFT + X. - على macOS: اضغط
CTRL + ALT + X.
/?'accesskey='x'onclick='alert(1)
النتيجة: 💥 بمجرد الضغط على الاختصار، ستظهر نافذة الـ alert. مبروك! لقد استغليت وسمًا مخفيًا لتنفيذ XSS.
💡 نصيحة صياد (The Hidden Surface)
دائماً ابحث في وسم الـ <head> عن أي بيانات تنعكس من الرابط:
- الروابط البديلة: مثل
<link rel="alternate" ...>. - الأوسمة المفتوحة: أحياناً يمكنك إغلاق الوسم تماماً بـ
>ثم كتابة وسم جديد، ولكن إذا تم تشفير الأقواس، فالحل هو الـaccesskey. - التفاعل: رغم أن هذه الثغرة تتطلب تفاعل المستخدم (ضغط أزرار)، إلا أنها مقبولة جداً في برامج الـ Bug Bounty لأنها تثبت ضعف الفلترة.
🚀 الخاتمة
لاب اليوم يعلمنا أن الأمان لا يتعلق فقط بما يراه المستخدم على الشاشة، بل بكل سطر كود يتم توليده ديناميكياً. الـ Canonical XSS هي خدعة ذكية تضاف لمجموعتك الاحترافية.
.png)