لاب رقم (18) | Reflected XSS into a JavaScript string with angle brackets and double quotes HTML-encoded and single quotes escaped

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

ثغرة XSS المتقدمة: خدعة الباك سلاش (Backslash) لكسر التشفير المستحيل! 🛡️ مطرقة الهاكر

Reflected XSS into a JavaScript string with single quote and backslash escaped

مرحباً بكم يا محترفي الاختراق الأخلاقي! اليوم نحن أمام تحدٍ يبدو للوهلة الأولى أنه محمي بالكامل. المطور هنا قام بتشفير كل شيء تقريباً، وظن أن وضع \ قبل علامة التنصيص كافٍ لمنعنا من الخروج من السلسلة النصية (String).

تطبيقنا اليوم من PortSwigger هو:
Reflected XSS into a JavaScript string with angle brackets and double quotes HTML-encoded and single quotes escaped

اليوم سنتعلم كيف نستخدم "سلاح السيرفر" ضده، ونستغل الباك سلاش لفتح ثغرة من حيث لا يحتسب المطور. لنبدأ! 🚀


🔍 تحليل السياق (The Trap)

عندما تضع كلمة بحث، تظهر داخل كود JavaScript بهذا الشكل:

<script>
    var searchTerms = 'كلامك يوضع هنا';
</script>

إذا كتبت '، السيرفر سيجعلها \'. المتصفح هنا سيفهم أن الباك سلاش هي "هروب" (Escape)، وبالتالي ستظل علامة التنصيص جزءاً من النص ولن تنهي المتغير.


🧠 الحل: الهروب من الهروب (Escape the Escape)

السر هنا يكمن في حرف الباك سلاش \ نفسه. السيرفر يقوم بالهروب من علامة التنصيص، لكنه **لا يقوم** بالهروب من الباك سلاش التي قد يرسلها المستخدم!

إذا أرسلنا نحن باك سلاش \ قبل علامة التنصيص، ماذا سيحدث؟

  1. نحن نرسل: \'
  2. السيرفر يرى علامة التنصيص ويضيف لها باك سلاش أخرى للحماية.
  3. النتيجة النهائية في الكود تصبح: \\'

هنا تقع الكارثة (بالنسبة للمطور): الباك سلاش الأولى تقوم بالهروب من الباك سلاش الثانية (التي وضعها السيرفر)، مما يجعل علامة التنصيص ' "حرة" تماماً لتقوم بإغلاق السلسلة النصية!


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

سنستخدم خدعة الباك سلاش لإغلاق النص، ثم نستخدم عامل حسابي مثل - أو ; لبدء كود جديد، ثم نقوم بتعطيل باقي السطر بـ //.

الـ Payload السحري:

\'-alert(1)//

ماذا حدث في كود الصفحة؟
سيصبح الكود هكذا:

var searchTerms = '\\'-alert(1)//';

المتصفح يرى \\ (باك سلاش نصية)، ثم يرى ' تغلق المتغير، ثم يرى -alert(1) كأمر برمجى منفصل، ثم // لتجاهل ما تبقى من السطر. نجاح باهر!


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

  1. اذهب لمربع البحث في اللاب.
  2. ضع الـ Payload التالي: \'-alert(1)//
  3. اضغط Search.

💥 مبروك! ستظهر نافذة الـ alert فوراً. لقد تفوقت على ذكاء المطور باستخدام منطق الـ JavaScript نفسه.


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

دائماً في اختبارات الاختراق، إذا وجدت أن الموقع يضيف باك سلاش قبل علامة التنصيص:

  • اختبر الباك سلاش: جرب إرسال \ وانظر هل تظهر في الكود كـ \ أم \\.
  • كسر الحماية: إذا ظهرت \ كما هي، فأنت تستطيع استخدامها لإلغاء مفعول الباك سلاش الأمنية التي يضيفها السيرفر.
  • التنويع: يمكنك استخدام ; بدلاً من - للفصل بين الأوامر البرمجية.

🚀 الخاتمة

لاب اليوم هو درس قاصٍ في أن "أنصاف الحلول" في الحماية لا تزيد الموقع إلا ضعفاً. المطور الذي يهرب من رمز وينسى الآخر يترك مفاتيح مملكته لمن يعرف كيف يستخدم تلك الرموز بذكاء.

إرسال تعليق