لاب رقم (20) | Reflected XSS into a template literal with angle brackets, single, double quotes, backslash and backticks Unicode-escaped

تعلم كيفية استغلال XSS في JavaScript Template Literals وتجاوز تشفير Unicode الشامل. شرح عملي لاستخدام صيغة ${} لتنفيذ الأكواد في لابات PortSwigger الم

ثغرة XSS في الـ Template Literals: الهروب من التشفير الشامل بسحر الـ ${} 🪄✨

Reflected XSS into a template literal with angle brackets, single, double quotes, backslash and backticks Unicode-escaped

مرحباً بمحترفي الاختراق! اليوم سنواجه تحدياً يبدو مستحيلاً: المطور قام بتشفير الأقواس <>، علامات التنصيص ' "، الباك سلاش \، وحتى علامة الـ Backtick `. كل هذه الرموز تتحول إلى Unicode (مثل \u0027). هل هناك أمل؟

لاب اليوم من PortSwigger هو:
Reflected XSS into a template literal with angle brackets, single, double quotes, backslash and backticks Unicode-escaped

اليوم سنتعلم كيف نستغل ميزة برمجية داخل الـ JavaScript تسمى String Interpolation للالتفاف على كل هذه القيود. لنبدأ! 🚀


🔍 ما هو الـ Template Literal Context؟

في التحديثات الحديثة لـ JavaScript، يمكن للمطورين كتابة نصوص بين علامتي ` ` بدلاً من ' '. الميزة الكبرى هنا هي إمكانية وضع متغيرات أو أكواد برمجية داخل النص مباشرة باستخدام الصيغة: ${...}.

الكود في اللاب يبدو هكذا:

<script>
    var message = `Searching for: ${user_input}`;
</script>

التحدي: المطور يمنعنا من استخدام ` لغلق النص، ويمنعنا من استخدام \ للهروب. لكنه نسي أن محرك JavaScript يبحث دائماً عن علامة ${ ليقوم بتنفيذ ما بداخلها فوراً!


🧠 الحل: الحقن المباشر عبر Interpolation

بما أننا "محبوسون" داخل الـ Template Literal، فنحن لسن بحاجة لكسر النص أو الهروب منه. يمكننا ببساطة "إقحام" كودنا الخاص ليتم تنفيذه كجزء من عملية بناء النص نفسه.

نحن نعلم أن أي شيء بين ${ } سيتم تنفيذه ككود JavaScript. لذا، بدلاً من محاولة إغلاق السلسلة، سنقوم بفتح "ثقب" زمني داخلها!


🛠️ خطة الهجوم (The Payload)

سنرسل Payload يبدأ بـ ${ ثم الكود الخاص بنا alert(1) ثم نغلقه بـ }. الفلتر لن يجد أي رموز ممنوعة (مثل الأقواس الزاوية أو علامات التنصيص) ليقوم بتشفيرها.

الـ Payload السحري:

${alert(1)}

ماذا سيحدث في المتصفح؟
سيصبح الكود المنفذ في الصفحة هكذا:
var message = `Searching for: ${alert(1)}`;
بمجرد أن يبدأ المتصفح في قراءة قيمة المتغير message، سيقوم بتنفيذ الدالة alert(1) فوراً ليعرف نتيجتها ويضعها في النص.


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

  1. اذهب إلى مربع البحث في اللاب.
  2. ضع الـ Payload: ${alert(1)}.
  3. اضغط Search.

💥 بوم! ستظهر نافذة الـ alert فوراً. لقد تفوقت على أقوى أنظمة التشفير باستخدام ميزة لغوية بسيطة.


💡 نصيحة صياد (The Template Rule)

هذا اللاب يعلمنا قاعدة ذهبية في اختبار الاختراق:

  • حدد النوع أولاً: إذا وجدت أن النص يوضع بين علامتي ` `، فأنت في جنة الـ XSS.
  • تجاوز الفلاتر: الـ Template Literals تسمح بتنفيذ الأكواد حتى لو كان السيرفر يشفر كل رموز الـ HTML والـ JS التقليدية.
  • التطوير: يمكنك كتابة عمليات حسابية معقدة أو استدعاء دوال أخرى داخل ${...} دون أن تترك أي أثر لعلامات تنصيص.

🚀 الخاتمة

لاب اليوم هو تذكير بأن التكنولوجيا تتقدم، ومعها تظهر طرق جديدة للاختراق. المطور الذي يستخدم ميزات لغوية حديثة (مثل Template Literals) يجب أن يفهم المخاطر الأمنية المرتبطة بها وكيفية تأمينها.

إرسال تعليق