Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Django-faille-CVE-2025-57833_test — إثبات مفهوم تعليمي يوضح حقن SQL عبر الأسماء المستعارة الديناميكية في طريقتي annotate() و alias() في Django (CVE-2025-57833). يتضمن كودًا ضعيفًا، ومثالًا للاستغلال، وتحليلًا للإصلاح. | Kitploit
أدوات/GitHubGitHub/loic-houchi/django-faille-cve-2025-57833_test
التحليل الثابتتحليل الثغرات الأمنيةتحليل الكوداستغلال تطبيقات الويبالتعلم والتعليمأمن قواعد البيانات
GitHubloic-houchi/django-faille-cve-2025-57833_test

Django-faille-CVE-2025-57833_test

إثبات مفهوم تعليمي يوضح حقن SQL عبر الأسماء المستعارة الديناميكية في طريقتي annotate() و alias() في Django (CVE-2025-57833). يتضمن كودًا ضعيفًا، ومثالًا للاستغلال، وتحليلًا للإصلاح.

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
عرض المستودع
213منذ سنة واحدةلم تتم المراجعة بعد
مشاركة

اختبار ثغرة SQL Injection عبر الأسماء المستعارة (alias) في Django

التعريف: ما هو الاسم المستعار (alias)؟

الاسم المستعار (alias) هو اسم يُعطى لعمود أو لنتيجة تجميع (aggregation) في استعلام SQL.
في Django، تُستخدم الأسماء المستعارة مع دوال annotate() أو alias() لتسمية الحقول المحسوبة.

مثال:

from django.db.models import Count
books = Book.objects.annotate(book_count=Count('id'))

هنا، book_count هو اسم مستعار لنتيجة Count('id').
هذا يسمح بالحصول على اسم قابل للقراءة لعمود محسوب.


إدخال البيانات عبر الشل (shell)

للتسريع، يمكننا إدخال البيانات عبر الشل:

python manage.py shell

الأوامر المراد تنفيذها:

from myapp.models import Author, Book

a = Author.objects.create(name=" houchi pierre")
Book.objects.create(title="Les belles filles", author=a)
Book.objects.create(title="Les baux arcons", author=a)

exit()

سياق الثغرة

قبل Django 4.2.23، كان من الممكن حقن SQL عبر أسماء مستعارة ديناميكية يقدمها المستخدم.
تُعرف هذه الثغرة باسم CVE-2025-57833.

كانت تؤثر على دالتي annotate() و alias() عند استخدام قاموس مع توسيع (**kwargs) باستخدام مفاتيح غير مفلترة قادمة من المستخدم.


مثال على كود ضعيف (myapp/views.py)

import json
from django.db.models import Count
from django.http import JsonResponse
from .models import Author

def vulnerable_view(request):
    # نسترد الاسم المستعار من الرابط
    alias_param = request.GET.get("alias", "{}")
    try:
        # ⚠️ ضعيف: تقييم مباشر لبيانات المستخدم
        alias_dict = json.loads(alias_param)
        for key, value in alias_dict.items():
            alias_dict[key] = eval(value)  # خطير! يسمح بتنفيذ كود عشوائي

        # إنشاء queryset مع تعليق (annotation) ديناميكي
        qs = Author.objects.annotate(**alias_dict).values("name", *alias_dict.keys())

        # إرجاع النتائج
        return JsonResponse(list(qs), safe=False)

    except Exception as e:
        return JsonResponse({"error": str(e)})

شرح:

  1. alias_param = request.GET.get("alias", "{}")
    يسترد قيمة المتغير alias الذي أرسله المستخدم.

  2. alias_dict = json.loads(alias_param)
    يحول السلسلة JSON إلى قاموس Python.

  3. alias_dict[key] = eval(value)
    ⚠️ خطير جداً: eval() تنفذ السلسلة ككود Python.
    يمكن للمستخدم حقن SQL مدمر.

  4. Author.objects.annotate(**alias_dict)
    تطبق التعليقات ديناميكياً مع الأسماء المستعارة المقدمة.


النماذج (myapp/models.py)

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    def __str__(self):
        return self.title

شرح:

  • Author و Book مرتبطان بعلاقة ForeignKey.
  • تُستخدم التعليقات الديناميكية على Author لحساب معلومات عن كتبه.

مثال على الاستغلال قبل التصحيح

  • رابط ضار:
http://127.0.0.1:8000/vuln/?alias={"evil); DROP TABLE myapp_book;--":"Count('id')"}
  • الخطر:
    • تنفيذ أي أمر SQL، حذف جداول أو تعديل بيانات.
    • هذا يستغل الثغرة مباشرة عبر الاسم المستعار المحقون.

التصحيح في Django 4.2.23

  • Django يمنع الآن بعض الأحرف في الأسماء المستعارة:

    • مسافات
    • علامات الاقتباس
    • فاصلة منقوطة
    • تعليقات SQL (--)
  • إذا احتوى الرابط على هذه الأحرف، يرفع Django خطأ:

Column aliases cannot contain whitespace characters, quotation marks, semicolons, or SQL comments.
  • النتيجة: لا يمكن إجراء حقن SQL مدمر.

مثال آمن

http://127.0.0.1:8000/vuln/?alias={"books_count":"Count('book')"}
  • هذا لا يشكل ثغرة.
  • الثغرة في الإصدارات الضعيفة (CVE-2025-57833) تظهر فقط إذا تمكن مستخدم ضار من حقن SQL عبر:
    • أحرف محظورة في الاسم المستعار (مسافة، فاصلة منقوطة، علامات اقتباس، تعليقات SQL)
    • أو عبر eval() على قيم قادمة من المستخدم.

أفضل الممارسات لتجنب هذه الثغرة

  1. لا تستخدم eval() أبداً على بيانات المستخدم.
  2. تحقق من صحة أسماء الأسماء المستعارة لعدم قبول سوى الأحرف الآمنة.
  3. حدد قيم التعليقات (annotations) إلى الدوال أو التعبيرات المسموح بها فقط.
  4. حافظ على تحديث Django للاستفادة من التصحيحات.

الخلاصة

  • الثغرة CVE-2025-57833 كانت تسمح بحقن SQL عبر أسماء مستعارة ديناميكية.
  • Django 4.2.23 وما فوق يصحح هذه الثغرة.
  • التحقق الصارم من بيانات المستخدم يبقى ضرورياً.

المؤلف: Loïc
التاريخ: 06/09/2025

تنزيل الأداة