لاب رقم (24) | Reflected XSS with AngularJS sandbox escape without strings

دليل متقدم لتجاوز AngularJS Sandbox Escaping بدون استخدام سلاسل نصية (Strings). تعلم تقنيات fromCharCode وتخريب prototype لحل أعقد لابات PortSwigger.

هروب AngularJS Sandbox: كيف تنفذ XSS بدون استخدام "نصوص"؟ 🧠🔓

Reflected XSS with AngularJS sandbox escape without strings

مرحباً بمحترفي الاختراق المتقدمين! اليوم سنخوض معركة ذكاء ضد محرك AngularJS. التحدي اليوم ليس فقط في وجود Sandbox يحميك، بل في أنك ممنوع من استخدام أي علامة تنصيص ' أو ". فكيف سنخبر المتصفح أننا نريد تنفيذ alert بدون كتابة اسم الدالة كنص؟

لاب اليوم من PortSwigger هو:
Reflected XSS with AngularJS sandbox escape without strings

اليوم سنتعلم كيف نستغل فلتر orderBy لنقوم بحقن كودنا الخاص بعيداً عن أعين الرقيب. لنبدأ الإثارة! 🚀


🔍 التحدي: سجن الـ Sandbox والحظر النصي

في هذا المستوى، يحاول الـ Sandbox منع الوصول للكائنات الخطيرة. المطور قام بحظر أي " أو '، مما يعني أننا لا نستطيع كتابة الأوامر البرمجية كـ "نصوص" داخل الدوال.

استراتيجية الحل:
1. تخريب الفحص: سنقوم بتعطيل دالة charAt التي يستخدمها الـ Sandbox لفحص الكود.
2. استغلال الفلاتر: سنستخدم فلتر orderBy الذي يسمح بتنفيذ أكواد JavaScript.
3. توليد الكود: سنستخدم fromCharCode لتحويل الأرقام إلى حروف x=alert(1) لتجاوز منع علامات التنصيص.


🛠️ الـ Payload القاتل (The orderBy Exploit)

سنقوم بحقن الكود في رابط المتصفح ليتم تنفيذه داخل بيئة AngularJS:

?search=1&toString().constructor.prototype.charAt%3d[].join;[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)=1

تحليل الكود (لماذا يعمل؟):
1. charAt=[].join: هنا نقوم بإعادة تعريف دالة charAt لتصبح join. هذا يربك الـ Sandbox ويجعله يفشل في فحص الكود الذي يليه.
2. [1]|orderBy:...: نستخدم ميزة الـ Filters في AngularJS. الفلتر orderBy يقوم بتنفيذ التعبير الذي يليه.
3. fromCharCode(120,61,...): هذا هو الجزء السحري! الأرقام تمثل الكود: x=alert(1). بما أننا لا نستطيع كتابتها كنص، قمنا بتوليدها من الأرقام لضمان مرورها من الفلتر.


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

  1. افتح اللاب واذهب إلى شريط العنوان في المتصفح (URL).
  2. أضف الـ Payload المذكور أعلاه بعد ?search=.
  3. اضغط Enter لتنفيذ الطلب.

💥 النتيجة: ستظهر نافذة الـ alert(1). لقد قمت بكسر الـ Sandbox وهرعت من قيود النصوص باستخدام أحد أكثر الفلاتر تعقيداً في AngularJS!


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

  • الفلاتر هي المفتاح: في بيئات الـ Frameworks مثل Angular أو Vue، الفلاتر (Filters) غالباً ما تمتلك صلاحيات تنفيذ أكواد قد لا يغطيها الـ Sandbox الأساسي.
  • توليد النصوص ديناميكياً: استخدام String.fromCharCode هو الطريقة المعيارية لتجاوز فلاتر الـ "No-Quotes" في أي سياق JavaScript.

🚀 الخاتمة

هذا اللاب يثبت أن الهاكر المحترف لا يتوقف عند "منع الرموز"، بل يبحث في منطق عمل اللغة نفسها. استغلال الـ prototype والـ filters هو ما يجعل هجمات الـ XSS المتقدمة مدمرة وصعبة الإيقاف.

الوصف البحثي (Meta Description):
"تجاوز AngularJS Sandbox باستخدام فلتر orderBy وتقنية منتحل الأكواد. شرح مفصل لكيفية تنفيذ XSS بدون علامات تنصيص في لابات PortSwigger المتقدمة."

لقد أتممت أصعب مراحل الـ XSS بنجاح! هل أنت مستعد للبدء في عالم الـ SQL Injection؟ 👇

إرسال تعليق