- بواسطة x32x01 ||
🛡 استغلال ثغرة Clickjacking لتنفيذ هجوم DOM-based XSS 
في عالم أمان تطبيقات الويب، استغلال الثغرات بيتم غالبًا عبر دمج أكثر من نوع هجوم مع بعض. من أخطر الأمثلة إن المهاجم يستخدم ثغرة Clickjacking علشان يفعل هجوم DOM-based XSS بدون ما الضحية ياخد باله.
خلّيني أشرح كل جزء بطريقة بسيطة وواضحة علشان تفهم السيناريو كامل
ثغرة Clickjacking هي هجوم يتم فيه خداع المستخدم للنقر على عنصر مختلف تمامًا عن اللي هو شايفه.
وبيحصل ده عن طريق:
✔ وضع عنصر أو طبقة شفافة فوق الصفحة
✔ المستخدم يفتكر إنه بيضغط على زر ظاهر
✖ لكنه في الحقيقة بيضغط على زر مخفي تحت الطبقة
وده ممكن يؤدي:
لتنفيذ عمليات خطيرة
تغيير إعدادات
تفعيل روابط أو أكواد خبيثة
كل ده بدون ما المستخدم يعرف.
هجوم DOM-based XSS هو نوع خطير من ثغرات XSS، بيحصل لما:
✔ JavaScript في الصفحة يعدّل DOM
✔ ويدمج مدخلات المستخدم بشكل مباشر
✔ بدون أي فحص أو تنقية
المميز هنا إنه:
ما بيرسلش البيانات الخبيثة للسيرفر
✔ كل الهجوم بيتم داخل المتصفح نفسه
✔ وبسبب خطأ في كود JavaScript
هنا الفكرة العبقرية للمهاجم 
المهاجم بدل ما يعتمد على المستخدم إنه يفتح لينك فيه Payload…
يقوم يستخدم Clickjacking ليمكّن الضغط على رابط خبيث بدون ما المستخدم يشوفه أصلاً.
إنشاء صفحة خبيثة فيها iframe للصفحة الضعيفة
وضع طبقة شفافة فوق iframe
إغراء المستخدم (مثلاً: اضغط هنا تربح جائزة
)
المستخدم ينقر →
وفي الحقيقة هو ينقر على الرابط الخبيث داخل iframe
الرابط يحتوي على Payload يفعّل DOM-based XSS
نفترض إن الموقع فيه هذا الكود:
الكود يأخذ أي شيء بعد الـ # من الرابط ويعرضه مباشرة داخل DOM.
إذا المهاجم استخدم:
هينفّذ:
✔ لأن
✔ بدون أي فلترة أو Sanitization
النتيجة: يتم تنفيذ DOM-XSS بدون ما المستخدم يشوف أي رابط أو يحس بحاجة.
استخدم أحد الهيدر التالية:
يمنع تضمين الموقع داخل iframe.
أي مدخلات تُحقن داخل DOM يجب:
✔ ترميزها (HTML Encoding)
✔ منع استخدام innerHTML إلا عند الضرورة
✔ الاعتماد على textContent بدلًا من innerHTML
مثال بسيط:
وده يمنع تنفيذ أي Script خارج الموقع،
وبالتالي حتى لو حصل DOM-XSS… مش هيتنفذ.
دمج Clickjacking مع DOM-based XSS بيخلي الهجوم:
خبيث
صامت
صعب الاكتشاف
لذلك لازم المواقع:
✔ تمنع التضمين داخل iframe
✔ تفحص المدخلات
✔ تستخدم CSP
لأن الأمن مش مجرد Fix… الأمن عملية مستمرة.
خلّيني أشرح كل جزء بطريقة بسيطة وواضحة علشان تفهم السيناريو كامل
ما هي ثغرة Clickjacking؟
ثغرة Clickjacking هي هجوم يتم فيه خداع المستخدم للنقر على عنصر مختلف تمامًا عن اللي هو شايفه.وبيحصل ده عن طريق:
✔ وضع عنصر أو طبقة شفافة فوق الصفحة
✔ المستخدم يفتكر إنه بيضغط على زر ظاهر
✖ لكنه في الحقيقة بيضغط على زر مخفي تحت الطبقة
وده ممكن يؤدي:
كل ده بدون ما المستخدم يعرف.
ما هو DOM-based XSS؟ 
هجوم DOM-based XSS هو نوع خطير من ثغرات XSS، بيحصل لما:✔ JavaScript في الصفحة يعدّل DOM
✔ ويدمج مدخلات المستخدم بشكل مباشر
✔ بدون أي فحص أو تنقية
المميز هنا إنه:
✔ كل الهجوم بيتم داخل المتصفح نفسه
✔ وبسبب خطأ في كود JavaScript
كيف يتم دمج Clickjacking مع DOM-XSS؟
هنا الفكرة العبقرية للمهاجم المهاجم بدل ما يعتمد على المستخدم إنه يفتح لينك فيه Payload…
يقوم يستخدم Clickjacking ليمكّن الضغط على رابط خبيث بدون ما المستخدم يشوفه أصلاً.
خطوات الهجوم:
مثال عملي توضيحي
نفترض إن الموقع فيه هذا الكود: JavaScript:
var search = document.location.hash.substring(1);
document.getElementById('result').innerHTML = search; إذا المهاجم استخدم:
HTML:
https://vulnerable.site#<img src=x onerror=alert(1)> alert(1)✔ لأن
innerHTML يسمح بحقن HTML✔ بدون أي فلترة أو Sanitization
كيف يدخل Clickjacking هنا؟
المهاجم ينشئ صفحة فيها:- iframe للموقع الضعيف
- فوقه طبقة شفافة
- المستخدم يضغط على مكان ظاهر
- لكنه فعليًا يضغط على رابط الـ XSS داخل iframe
🛡 كيفية الحماية من الهجوم؟
منع Clickjacking
استخدم أحد الهيدر التالية:X-Frame-Options: DENYX-Frame-Options: SAMEORIGIN- أو عبر الـ
CSP:
Code:
Content-Security-Policy: frame-ancestors 'none';
فلترة المدخلات Input Validation
أي مدخلات تُحقن داخل DOM يجب:✔ ترميزها (HTML Encoding)
✔ منع استخدام innerHTML إلا عند الضرورة
✔ الاعتماد على textContent بدلًا من innerHTML
تطبيق Content Security Policy (CSP)
مثال بسيط: Code:
Content-Security-Policy: script-src 'self'; وبالتالي حتى لو حصل DOM-XSS… مش هيتنفذ.
الخلاصة
دمج Clickjacking مع DOM-based XSS بيخلي الهجوم:لذلك لازم المواقع:
✔ تمنع التضمين داخل iframe
✔ تفحص المدخلات
✔ تستخدم CSP
لأن الأمن مش مجرد Fix… الأمن عملية مستمرة.