تخطَّ إلى المحتوى

🔐 شرح أمن API وقواعد البيانات

أساسيات اختبار الاختراق

الدرس 17 من 25· ⏱ 5 دقائق قراءة

ما هو اختبار الاختراق؟

اختبار الاختراق (Penetration Testing) هو هجوم محاكى ومرخص على نظامك لتحديد الثغرات قبل أن يستغلها المهاجمون الحقيقيون.

أنواع اختبار الاختراق

النوعالوصفمستوى المعرفة
Black Boxلا معلومات مسبقةكالمستخدم العادي
Gray Boxمعلومات جزئية (مثل API docs)كعميل مصرح له
White Boxكود كامل وصلاحيةكالمطور الداخلي

مراحل اختبار الاختراق

1. الاستطلاع (Reconnaissance)

جمع معلومات عن الهدف قبل البدء:

# 1. اكتشاف subdomains
subfinder -d example.com
amass enum -d example.com

# 2. endpoints مخفية
gau example.com/api
waybackurls example.com

# 3. فحص ports مفتوحة
nmap -sV -p 1-65535 example.com

# 4. استكشاف API endpoints
cat endpoints.txt | httpx -status-code -content-type

2. الفحص الآلي (Automated Scanning)

OWASP ZAP

أداة مفتوحة المصدر لفحص الثغرات:

# فحص سريع من CLI
zap-cli quick-scan -s xss,sqli https://api.example.com

# فحص شامل
zap-cli full-scan -r https://api.example.com

# تصدير التقرير
zap-cli report -o report.html -f html
// دمج ZAP مع ZAP API في JavaScript
const ZAP_API = 'http://localhost:8080';
const API_KEY = 'your-api-key';

async function startScan(targetUrl) {
  // بدأ الفحص
  const scanId = await fetch(
    `${ZAP_API}/JSON/ascan/action/scan/` +
    `?apikey=${API_KEY}&url=${targetUrl}&recurse=true`
  ).then(r => r.json()).then(d => d.scan);

  // متابعة التقدم
  while (true) {
    const progress = await fetch(
      `${ZAP_API}/JSON/ascan/view/status/` +
      `?apikey=${API_KEY}&scanId=${scanId}`
    ).then(r => r.json());

    console.log(`Scan progress: ${progress.status}%`);
    if (progress.status >= 100) break;
    await new Promise(r => setTimeout(r, 5000));
  }

  // الحصول على النتائج
  const alerts = await fetch(
    `${ZAP_API}/JSON/core/view/alerts/` +
    `?apikey=${API_KEY}&baseurl=${targetUrl}`
  ).then(r => r.json());

  return alerts;
}

Burp Suite

أداة احترافية (Community Edition مجانية):

Burp Suite Workflow للـ API:
  1. Proxy --> اعتراض طلبات API
  2. Repeater --> تعديل وإعادة إرسال الطلبات
  3. Intruder --> هجمات Brute Force / Fuzzing
  4. Scanner --> فحص تلقائي (Pro فقط)
  5. Sequencer --> تحليل randomness الرموز

3. الاختبار اليدوي (Manual Testing)

BOLA (IDOR) Testing

// اختبار BOLA - تغيير المعرف في الطلب
async function testBOLA(baseUrl, token) {
  const ids = [1, 2, 3, 'admin', '../etc/passwd'];

  for (const id of ids) {
    const response = await fetch(`${baseUrl}/api/users/${id}`, {
      headers: { 'Authorization': `Bearer ${token}` }
    });

    // إذا نجح الطلب لبيانات مستخدم آخر --> ثغرة
    if (response.ok) {
      const data = await response.json();
      if (data.id !== currentUserId) {
        console.log(`❗ BOLA found: user/${id} returned data`);
      }
    }
  }
}

SQL Injection Testing

# اختبار SQLi يدوي
curl "https://api.example.com/users?id=1' OR '1'='1"
curl "https://api.example.com/users?id=1 UNION SELECT * FROM users"
curl "https://api.example.com/users?id=1; DROP TABLE users--"

# استخدام sqlmap
sqlmap -u "https://api.example.com/users?id=1" --batch
sqlmap -u "https://api.example.com/login" --data "user=admin&pass=test"

4. رفع الصلاحيات (Privilege Escalation)

// اختبارات رفع الصلاحية
const tests = [
  // تغيير role في JWT
  { header: 'Authorization', value: 'Bearer <token_with_role_admin>' },

  // HTTP methods غير مصرح بها
  { method: 'DELETE', path: '/api/users' },

  // Parameter pollution
  { path: '/api/users?role=user&role=admin' },

  // تغيير HTTP headers
  { path: '/api/admin', header: 'X-Forwarded-For: 127.0.0.1' },
];

5. فحص Rate Limiting و Throttling

// اختبار Rate Limiting
async function testRateLimiting(url, requests = 1000) {
  const start = Date.now();
  let successCount = 0;
  let blockedCount = 0;

  for (let i = 0; i < requests; i++) {
    const res = await fetch(url);
    if (res.status === 429) blockedCount++;
    else successCount++;
  }

  const duration = Date.now() - start;
  console.log(`Results: ${successCount} success, ${blockedCount} blocked`);
  console.log(`Rate: ${requests / (duration / 1000)} req/sec`);

  if (blockedCount === 0) {
    console.log('⚠️ No rate limiting detected!');
  }
}

كتابة التقرير (Reporting)

# تقرير اختبار الاختراق

## ملخص
- التاريخ: 2024-01-15
- الهدف: api.example.com
- النطاق: جميع endpoints v2
- المدة: 5 أيام

## النتائج
- حرج (Critical): 2
- عالي (High): 5
- متوسط (Medium): 8
- منخفض (Low): 12

## الثغرات الحرجة
### BOLA في /api/users/{id}
- CVSS: 9.1
- الوصف: أي مستخدم يستطيع عرض بيانات أي مستخدم آخر
- الإثبات: curl ...
- التأثير: تسريب كل بيانات المستخدمين
- التوصية: تطبيق Authorization لكل كائن

## ملاحظات إضافية
- JWT بدون expiry
- CORS يسمح لأي origin
- لا يوجد Rate Limiting

الكشف المسؤول (Responsible Disclosure)

عند اكتشاف ثغرة في تطبيق لست مخولاً باختباره:

الخطوات الصحيحة:
  1. لا تستغل الثغرة أكثر من اللازم
  2. لا تشاركها مع أحد
  3. أبلغ الفريق الأمني عبر البريد الرسمي
  4. انتظر الرد (عادة 24-48 ساعة)
  5. إذا لم يردوا، يمكنك الإبلاغ عبر Bug Bounty platform

مثال البريد:
  To: security@example.com
  Subject: Security Vulnerability Report - [Brief Title]
  
  الوصف:
  خطوات إعادة الإنتاج (PoC):
  التأثير المحتمل:
  التوصية:

أدوات مهمة

الأداةالاستخدامالرابط
OWASP ZAPفحص تلقائي شاملzaproxy.org
Burp Suiteاعتراض وتعديل الطلباتportswigger.net
sqlmapفحص SQL Injectionsqlmap.org
Nucleiقوالب فحص مخصصةnuclei.projectdiscovery.io
ffufFuzzing endpointsgithub.com/ffuf
Postmanاختبار API يدويpostman.com
jwt_toolفحص JWTgithub.com

⚠️ لا تختبر أبداً تطبيقاً لست مخولاً باختباره. اختبار الاختراق بدون إذن قانوني جريمة في معظم الدول.

🎯 التالي: إدارة الثغرات والتحديثات

شرح أساسيات اختبار الاختراق — أمن API وقواعد البيانات بالعربي
أساسيات اختبار الاختراقأمن API وقواعد البيانات بالعربي · The Code Fix

هل كان هذا الدرس مفيدًا؟