لاب رقم (8) | Reflected XSS into a JavaScript string with angle brackets HTML encoded

تعلم كيفية استغلال Stored XSS داخل خاصية href عندما يتم تشفير الأقواس وعلامات التنصيص. شرح استخدام بروتوكول جافا سكريبت لتنفيذ هجمات XSS مخزنة في لابا

ثغرة Stored XSS: الهروب الكبير داخل الـ href بدون أقواس أو علامات تنصيص! ⚓🔓

Reflected XSS into a JavaScript string with angle brackets HTML encoded

مرحباً بصيادي الثغرات! اليوم سنواجه تحدياً يبدو مستحيلاً في البداية. تخيل أنك تريد حقن كود XSS في قسم التعليقات، لكن الموقع يقوم بتشفير الأقواس < > وعلامات التنصيص الثنائية ". هل انتهت اللعبة؟ بالطبع لا!

لاب اليوم من PortSwigger هو:
Stored XSS into anchor href attribute with double quotes HTML-encoded

اليوم سنتعلم كيف نستغل "بروتوكول الجافا سكريبت" للالتفاف على أقوى الفلاتر. لنبدأ الإثارة! 🚀


🔍 تحليل الهدف (The Target Analysis)

في هذا اللاب، عندما تضع تعليقاً، يطلب منك الموقع إدخال "اسمك، إيميلك، ورابط موقعك الإلكتروني". الموقع يأخذ رابط موقعك (Website URL) ويضعه داخل وسم رابط <a> ليكون اسمك قابلاً للضغط.

الكود في الصفحة يبدو هكذا:

<a href="[الرابط الذي وضعته هنا]">اسم المستخدم</a>

المشكلة: المطور يقوم بتشفير < > و ". هذا يعني أننا لا نستطيع إغلاق الوسم، ولا نستطيع الهروب من خاصية الـ href لإضافة خصائص جديدة مثل onmouseover.


🛠️ خطة الهجوم: بروتوكول JavaScript السحري

بما أننا "محبوسون" داخل خاصية الـ href ولا نستطيع الهروب منها بالعلامات التقليدية، سنستخدم خاصية فريدة في الروابط: المتصفح يسمح للرابط أن يبدأ بـ javascript: لتنفيذ الأوامر مباشرة!

الـ Payload السحري:
في خانة الـ Website عند كتابة التعليق، ضع الكود التالي:

javascript:alert(1)

لماذا نجح هذا الهجوم؟
1. نحن لم نحتج لاستخدام أقواس < >، لذا لم يجد الفلتر شيئاً ليشفره.
2. نحن لم نحتج لاستخدام علامات تنصيص "، لذا لم نتأثر بتشفيرها.
3. وضعنا الكود "داخل" الـ href بشكل قانوني تماماً بالنسبة للمتصفح.


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

  1. افتح أي مقال في المدونة وانزل لقسم التعليقات.
  2. اكتب أي تعليق وأي اسم.
  3. في خانة Website، اكتب: javascript:alert(1).
  4. اضغط Post Comment.
  5. الآن، اذهب لمشاهدة تعليقك واضغط على "اسمك".

النتيجة: 💥 بمجرد الضغط على اسمك، سيتم تنفيذ كود الـ JavaScript وتظهر نافذة الـ alert. وبما أن الثغرة من النوع Stored، فإن أي شخص يضغط على اسمك سيقع في الفخ!


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

دائماً عندما تجد أن مدخلاتك توضع داخل رابط (URL Context)، فكر فوراً في javascript:.

  • تجاوز الفلاتر: أحياناً الموقع يمنع كلمة "javascript". يمكنك تجربتها بحروف كبيرة JaVaScRiPt: أو محاولة تشفيرها بـ URL Encoding.
  • التأثير: في الحقيقة، يمكنك كتابة كود يسحب الـ Cookies بمجرد ضغط الضحية على الرابط.

🚀 الخاتمة

هذا اللاب يعلمنا أن "سياق الحقن" هو الملك. حتى مع وجود تشفير قوي للرموز، يظل منطق عمل المتصفح هو الثغرة التي لا يمكن للمطور إغلاقها بسهولة إلا بمنع بروتوكول javascript: تماماً.

إرسال تعليق