لاب رقم (7) | Reflected XSS into attribute with angle brackets HTML-encoded

تعلم كيفية تجاوز حماية HTML Encoding للأقواس واستغلال ثغرة Reflected XSS داخل الـ Attribute Context. شرح عملي للاب PortSwigger باستخدام الـ Event Hand

ثغرة XSS: عندما يحميك المطور من الأقواس.. ولكن ينسى الأبواب الأخرى! 🚪🛡️

Reflected XSS into attribute with angle brackets HTML-encoded

مرحباً بكم من جديد! في رحلتنا لتعلم الـ Bug Bounty، واجهنا اليوم تحدياً جديداً من لابات PortSwigger وهو:
Reflected XSS into attribute with angle brackets HTML-encoded

في هذا اللاب، المطور أصبح أذكى قليلاً؛ حيث قام بتشفير الأقواس < > لكي يمنعنا من كتابة أي وسوم HTML مثل <script>. ولكن، كما سنرى الآن، الأقواس ليست هي الطريقة الوحيدة لتنفيذ JavaScript! 😉


🔍 التحدي: الأقواس مشفرة (HTML-encoded)

عندما تحاول كتابة <script>alert(1)</script> في مربع البحث، ستجد أن الموقع يعرضها في كود الصفحة بهذا الشكل:

&lt;script&gt;alert(1)&lt;/script&gt;

هذا يسمى HTML Encoding، وبسببه سيعتبر المتصفح الكود مجرد "نص عدي" ولن ينفذه. فكيف سنخترق الموقع إذن؟


🧠 تحليل السياق (The Attribute Context)

السر دائماً يكمن في "أين يوضع كلامك في الصفحة؟". إذا فحصت الكود (Inspect Element) ستجد أن مدخلاتك توضع داخل خاصية (Attribute) لوسم HTML، وتحديداً داخل خانة الـ value في وسم الـ input:

<input type="text" placeholder="Search for..." value="كلامك هنا">

بما أننا داخل خاصية (Attribute)، فنحن لسن بحاجة للأقواس < > لكي نهرب! نحن فقط بحاجة لإغلاق الخاصية الحالية وفتح خاصية جديدة قادرة على تنفيذ الكود.


🛠️ خطة الهروب (The Exploit)

لكي ننفذ الـ XSS هنا، سنستخدم علامة التنصيص " لكسر الـ value، ثم نضيف "Event Handler" مثل onfocus.

الـ Payload السحري:

" onfocus="alert(1)" autofocus="

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

<input type="text" value="" onfocus="alert(1)" autofocus="">

شرح الـ Payload:
1. بدأت بـ " لإغلاق قيمة الـ value الأصلية.
2. أضفت onfocus="alert(1)"، وهي خاصية تنفذ JavaScript بمجرد أن يقف "التركيز" (Focus) على المربع.
3. أضفت autofocus لكي أجبر المتصفح على التركيز على هذا المربع بمجرد تحميل الصفحة، وبالتالي تنفيذ الكود تلقائياً!
4. ختمت بـ " لكي نغلق الكود بشكل سليم ولا يحدث خطأ في الـ HTML.


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

  1. اذهب لمربع البحث في اللاب.
  2. ضع الـ Payload: " onfocus="alert(1)" autofocus=".
  3. اضغط Search.

💥 بمجرد تحميل الصفحة، ستجد الـ Pop-up ظهر أمامك! لقد نجحت في الالتفاف على حماية الأقواس.


💡 نصيحة صياد (Attribute Injection Tip)

دائماً تذكر: إذا منعك المطور من استخدام < >، ابحث فوراً عن مكان حقن الكود (Context). إذا كان داخل value، name، id، أو أي خاصية أخرى، فاستخدم علامات التنصيص للهروب.

  • جرب onmouseover (يعمل عند مرور الماوس).
  • جرب onclick (يعمل عند الضغط).
  • دائماً افحص هل الـ " و الـ ' يتم تشفيرهم أم لا.

🚀 الخاتمة

درس اليوم يعلمنا أن الحماية الجزئية (مثل منع الأقواس فقط) لا تكفي لتأمين الموقع. كباحث أمني، يجب أن تكون مرناً وتفهم كيف يقرأ المتصفح كل جزء من الصفحة.

إرسال تعليق