ثغرة الـ Stored XSS: عندما يصبح التعليق "فخاً" دائماً! 💣💾
بعد أن تعلمنا في المقال السابق كيف نكتشف الثغرة المنعكسة، اليوم سننتقل لمستوى أعمق وأكثر إثارة مع النوع الأخطر: Stored XSS (المخزنة).
تطبيقنا العملي اليوم سيكون على لاب من منصة PortSwigger بعنوان:
Stored XSS into HTML context with nothing encoded
جهز قهوتك، لأننا اليوم لن نرسل رابطاً لشخص واحد، بل سنزرع "لغماً" في الموقع ليصيب أي شخص يمر بجانبه! ☕🚀
🤔 ما الفرق بين هذا النوع وما تعلمناه سابقاً؟
في الـ Reflected XSS، كان الكود "يرتد" من السيرفر فوراً ولا يُحفظ. أما هنا في الـ Stored XSS، فالأمر مختلف تماماً:
- الموقع يأخذ كلامك ويقوم بحفظه فعلياً في قاعدة البيانات (Database).
- أي مستخدم يزور الصفحة التي تحتوي على تعليقك، سيقوم المتصفح الخاص به بتحميل الكود الخبيث وتشغيله تلقائياً.
🔍 تحليل اللاب (The Scenario)
في هذا اللاب، لدينا مدونة بسيطة تسمح للمستخدمين بترك تعليقات (Comments) على المقالات. المطور هنا ارتكب نفس الخطأ القاتل: "الثقة العمياء".
الموقع يأخذ نص التعليق الذي تكتبه ويضعه داخل وسم HTML في صفحة التعليقات بدون أي عملية تنظيف (Sanitization) أو تشفير (Encoding). هذا يعني أنك إذا كتبت كود برمجياً، سيتم حفظه كجزء من الصفحة للأبد!
🛠️ خطوات الاختراق (The Exploit)
بما أننا في سياق HTML بسيط (HTML Context) ولا توجد حماية، فالمهمة مباشرة جداً:
- افتح أي مقال في المدونة وانزل إلى قسم التعليقات.
- في خانة التعليق (Comment)، قم بكتابة الـ Payload التقليدي الخاص بنا:
<script>alert(1)</script>
- اكمل البيانات المطلوبة (الاسم، الإيميل، والموقع) - أي بيانات عشوائية ستفي بالغرض.
- اضغط على Post Comment.
الآن السحر يبدأ: بمجرد العودة للمقال أو تحديث الصفحة، ستظهر لك نافذة الـ alert. وليس لك فقط، بل لأي شخص آخر يفتح هذا المقال من أي مكان في العالم! 🌍💥
⚠️ لماذا تعتبر هذه الثغرة "كنزاً" في الـ Bug Bounty؟
تخيل أنك بدلاً من alert(1)، قمت بكتابة كود يقوم بسحب الـ Session Cookie الخاص بكل من يقرأ التعليق وإرساله إلى سيرفر خاص بك.
إذا دخل "أدمن" الموقع ليقرأ التعليقات، سيتم سرقة حسابه فوراً دون أن يشعر بشيء. ولهذا السبب، دائماً ما يكون تقييم ثغرات الـ Stored XSS في التقارير هو High أو Critical. 💰
💡 نصيحة من القلب (Hunter Pro Tip)
عندما تبحث عن هذه الثغرة، لا تركز فقط على "التعليقات". ابحث في كل مكان يتم فيه "حفظ" بياناتك لتُعرض لاحقاً:
- أسماء المستخدمين (Usernames).
- عناوين الشحن (Shipping Addresses).
- الملفات الشخصية (Profiles).
- رسائل الدعم الفني (Support Tickets).
🚀 الخاتمة
لقد نجحنا اليوم في حل اللاب وفهمنا كيف تتحول ميزة بسيطة مثل "التعليقات" إلى ثغرة أمنية فادحة بسبب غياب الفلترة.
هل بدأت تشعر بقوة الـ XSS؟ في المقال القادم سنتعامل مع سياق مختلف تماماً.. انتظرونا! ✌️
