Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Django-faille-CVE-2025-57833_test — Lehrreicher Proof-of-Concept, der SQL-Injection über dynamische Aliase in Djangos annotate()- und alias()-Methoden demonstriert (CVE-2025-57833). Enthält anfälligen Code, Exploit-Beispiel und Fix-Analyse. | Kitploit
Tools/GitHubGitHub/loic-houchi/django-faille-cve-2025-57833_test
Statische AnalyseSchwachstellenanalyseCode-AnalyseWebanwendungs-ExploitationLernen & BildungDatenbanksicherheit
GitHubloic-houchi/django-faille-cve-2025-57833_test

Django-faille-CVE-2025-57833_test

Lehrreicher Proof-of-Concept, der SQL-Injection über dynamische Aliase in Djangos annotate()- und alias()-Methoden demonstriert (CVE-2025-57833). Enthält anfälligen Code, Exploit-Beispiel und Fix-Analyse.

Repository anzeigen
23vor 1 JahrNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Test der SQL-Injection-Schwachstelle über Alias in Django

Definition: Was ist ein Alias?

Ein Alias ist ein Name, der einer Spalte oder einem Aggregationsergebnis in einer SQL-Abfrage gegeben wird.
In Django werden Aliase mit den Methoden annotate() oder alias() verwendet, um berechnete Felder zu benennen.

Beispiel:

root@kitploit:~
from django.db.models import Count
books = Book.objects.annotate(book_count=Count('id'))

Hier ist book_count ein Alias für das Ergebnis von Count('id').
Dies ermöglicht es, einen lesbaren Namen für eine berechnete Spalte zu erhalten.


Einfügen von Daten über die Shell

Um schnell vorzugehen, kann man die Daten über die Shell einfügen:

root@kitploit:~
python manage.py shell

Auszuführende Befehle:

root@kitploit:~
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()

Kontext der Schwachstelle

Vor Django 4.2.23 war es möglich, SQL über dynamische, vom Benutzer bereitgestellte Aliase einzuschleusen.
Diese Schwachstelle ist als CVE-2025-57833 bekannt.

Sie betraf die Funktionen annotate() und alias(), wenn ein Dictionary mit Expansion (**kwargs) mit ungefilterten Schlüsseln vom Benutzer verwendet wurde.


Beispiel für verwundbaren Code (myapp/views.py)

root@kitploit:~
import json
from django.db.models import Count
from django.http import JsonResponse
from .models import Author

def vulnerable_view(request):
    # On récupère l'alias depuis l'URL
    alias_param = request.GET.get("alias", "{}")
    try:
        # ⚠️ Vulnérable : évaluation directe des données utilisateurs
        alias_dict = json.loads(alias_param)
        for key, value in alias_dict.items():
            alias_dict[key] = eval(value)  # dangereux ! permet l'exécution de code arbitraire

        # Création de la queryset avec annotation dynamique
        qs = Author.objects.annotate(**alias_dict).values("name", *alias_dict.keys())

        # Retour des résultats
        return JsonResponse(list(qs), safe=False)

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

Erklärungen:

  1. alias_param = request.GET.get("alias", "{}")
    Ruft den Wert des vom Benutzer übergebenen Parameters alias ab.

  2. alias_dict = json.loads(alias_param)
    Wandelt den JSON-String in ein Python-Wörterbuch um.

  3. alias_dict[key] = eval(value)
    ⚠️ Sehr gefährlich: eval() führt den String als Python-Code aus.
    Der Benutzer könnte zerstörerisches SQL einschleusen.

  4. Author.objects.annotate(**alias_dict)
    Wendet dynamisch die Annotationen mit den bereitgestellten Aliasen an.


Modelle (myapp/models.py)

root@kitploit:~
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

Erklärung:

  • Author und Book sind über eine ForeignKey-Beziehung verknüpft.
  • Dynamische Annotationen werden auf Author verwendet, um Informationen über seine Bücher zu berechnen.

Beispiel für Ausnutzung vor der Behebung

  • Bösartige URL:
root@kitploit:~
http://127.0.0.1:8000/vuln/?alias={"evil); DROP TABLE myapp_book;--":"Count('id')"}
  • Risiko:
    • Ausführung jeglicher SQL-Befehle, Löschen von Tabellen oder Ändern von Daten.
    • Dies nutzt die Schwachstelle direkt über den injizierten Alias aus.

Behebung in Django 4.2.23

  • Django verbietet nun bestimmte Zeichen in Aliasen:

    • Leerzeichen
    • Anführungszeichen
    • Semikola
    • SQL-Kommentare (--)
  • Wenn die URL diese Zeichen enthält, löst Django einen Fehler aus:

root@kitploit:~
Column aliases cannot contain whitespace characters, quotation marks, semicolons, or SQL comments.
  • Konsequenz: keine destruktive SQL-Injection ist möglich.

Sicheres Beispiel

root@kitploit:~
http://127.0.0.1:8000/vuln/?alias={"books_count":"Count('book')"}
  • Dies stellt keine Schwachstelle dar.
  • Die Schwachstelle in verwundbaren Versionen (CVE-2025-57833) tritt nur auf, wenn ein böswilliger Benutzer SQL injizieren kann über:
    • verbotene Zeichen im Alias (Leerzeichen, Semikolon, Anführungszeichen, SQL-Kommentare)
    • oder eval() auf Werte, die vom Benutzer stammen.

Best Practices zur Vermeidung dieser Schwachstelle

  1. Niemals eval() auf Benutzerdaten anwenden.
  2. Alias-Namen validieren, um nur sichere Zeichen zuzulassen.
  3. Annotationswerte auf erlaubte Funktionen oder Ausdrücke beschränken.
  4. Django aktuell halten, um von den Korrekturen zu profitieren.

Schlussfolgerung

  • Die Schwachstelle CVE-2025-57833 erlaubte das Einschleusen von SQL über dynamische Aliase.
  • Django 4.2.23 und höher beheben diese Schwachstelle.
  • Eine strenge Validierung der Benutzereingaben bleibt unerlässlich.

Autor: Loïc
Datum: 06.09.2025

Tool herunterladen