لاب رقم (27) | Reflected XSS in a JavaScript URL with some characters blocked

شرح مبسط جداً لحل لاب Reflected XSS المتقدم بدون استخدام أقواس. تعلم كيفية استغلال toString و onerror لتنفيذ جافا سكريبت في لابات PortSwigger.

ثغرة XSS في رابط JavaScript: كيف تستدعي الدالة بدون "أقواس"؟ 🧩🔓

Reflected XSS in a JavaScript URL with some characters blocked

مرحباً يا صديقي! اليوم سنحل لغزاً برمجياً حقيقياً. تخيل أنك تريد مناداة شخص (دالة)، لكنك ممنوع من استخدام فمك (الأقواس ()). كيف ستجعله ينتبه لك؟ سنستخدم اليوم "الخطأ البرمجي" لنجبر المتصفح على مناداته بدلاً منا!

لاب اليوم من PortSwigger هو:
Reflected XSS in a JavaScript URL with some characters blocked


💡 الفكرة ببساطة (الخطة البديلة)

بما أننا لا نستطيع كتابة alert()، سنعتمد على فكرة عبقرية:

  • سنقوم بتعريف "خطأ" (Error).
  • سنخبر المتصفح: "يا متصفح، إذا حدث أي خطأ، اذهب فوراً وشغّل دالة الـ alert".
  • ثم سنقوم برمي (Throw) هذا الخطأ عمداً!

🧠 شرح الحل (قطعة بقطعة)

هذا هو الرابط الذي سنستخدمه، وسأشرح لك كل جزء منه بلغة بسيطة:

...&'%7D,x=x=%3E%7Bthrow/**/onerror=alert,1337%7D,toString=x,window%2b''%2C%7Bx:'

ماذا يحدث هنا؟

  1. x=x=>{throw/**/onerror=alert,1337}:
    هنا قمنا بإنشاء دالة صغيرة (Arrow Function). وظيفتها أنها عندما تعمل، تقوم بجعل الـ onerror (المسؤول عن الأخطاء) يساوي alert، ثم ترمي الرقم 1337 كخطأ.
  2. toString=x:
    هذه هي الخدعة الكبرى! قمنا بتغيير وظيفة toString الخاصة بالمتصفح وجعلناها هي الدالة x التي صنعناها فوق.
  3. window+'':
    المتصفح عندما يرى أنك تحاول جمع كلمة window مع نص فارغ ''، فإنه يضطر تلقائياً لاستدعاء دالة toString ليرى النتيجة.
  4. النتيجة النهائية:
    بما أننا جعلنا toString هي نفسها الدالة x، فبمجرد محاولة الجمع، ستعمل x، فيحدث الخطأ، فينطلق الـ alert! 💥

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

  1. افتح أي مقال في اللاب.
  2. انسخ الرابط التالي مع استبدال YOUR-LAB-ID برابط اللاب الخاص بك:
  3. [https://YOUR-LAB-ID.web-security-academy.net/post?postId=5&%27](https://YOUR-LAB-ID.web-security-academy.net/post?postId=5&%27)},x=x=%3E{throw/**/onerror=alert,1337},toString=x,window%2b%27%27,{x:%27

  4. اضغط Enter.

ستجد الـ alert ظهرت أمامك بنجاح رغم أنك لم تستخدم أي أقواس في الكود!


💡 لماذا هذا اللاب مهم؟

هذا اللاب يعلمك أن JavaScript لغة مرنة جداً. إذا أغلق المطور باباً (حظر الأقواس)، يمكنك الدخول من النافذة (استغلال الـ Error Handling والـ Type Conversion).


🚀 الخاتمة

لا تتعجب من تعقيد الكود، فصيد الثغرات أحياناً يتطلب "خداع" المتصفح ليقوم بما نريد. أنت الآن تمتلك مهارة الهروب من القيود الصعبة!

إرسال تعليق