Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Django-faille-CVE-2025-57833_test — Образовательный proof-of-concept, демонстрирующий 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

Образовательный proof-of-concept, демонстрирующий SQL-инъекцию через динамические псевдонимы в методах annotate() и alias() Django (CVE-2025-57833). Включает уязвимый код, пример эксплуатации и анализ исправления.

Репозиторий
231 год назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Тестирование уязвимости SQL-инъекции через алиасы в Django

Определение: Что такое алиас?

Алиас — это имя, присваиваемое столбцу или результату агрегации в SQL-запросе.
В Django алиасы используются с методами annotate() или alias() для именования вычисляемых полей.

Пример:

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

Здесь book_count — это алиас для результата Count('id').
Это позволяет получить читаемое имя для вычисляемого столбца.


Вставка данных через shell

Чтобы ускорить процесс, можно вставить данные через shell:

root@kitploit:~
python manage.py shell

Команды для выполнения:

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()

Контекст уязвимости

До Django 4.2.23 была возможность внедрять SQL через динамические алиасы, предоставляемые пользователем.
Эта уязвимость известна как CVE-2025-57833.

Она затрагивала функции annotate() и alias(), когда словарь с раскрытием (**kwargs) использовался с нефильтрованными ключами, поступающими от пользователя.


Пример уязвимого кода (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)})

Пояснения:

  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)

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

Пояснение:

  • Author и Book связаны отношением ForeignKey.
  • Динамические аннотации используются на Author для вычисления информации о его книгах.

Пример эксплуатации до исправления

  • Вредоносный URL:
root@kitploit:~
http://127.0.0.1:8000/vuln/?alias={"evil); DROP TABLE myapp_book;--":"Count('id')"}
  • Риск:
    • Выполнение любой SQL-команды, удаление таблиц или изменение данных.
    • Это напрямую эксплуатирует уязвимость через внедрённый алиас.

Исправление в Django 4.2.23

  • Django теперь запрещает определённые символы в алиасах:

    • Пробелы
    • Кавычки
    • Точка с запятой
    • SQL-комментарии (--)
  • Если URL содержит эти символы, Django вызывает ошибку:

root@kitploit:~
Column aliases cannot contain whitespace characters, quotation marks, semicolons, or SQL comments.
  • Следствие: разрушительная SQL-инъекция невозможна.

Безопасный пример

root@kitploit:~
http://127.0.0.1:8000/vuln/?alias={"books_count":"Count('book')"}
  • Это не является уязвимостью.
  • Уязвимость в незащищённых версиях (CVE-2025-57833) проявляется только если злоумышленник может внедрить SQL через:
    • запрещённые символы в алиасе (пробел, точка с запятой, кавычки, SQL-комментарии)
    • или eval() над значениями, поступающими от пользователя.

Рекомендации по предотвращению этой уязвимости

  1. Никогда не используйте eval() с пользовательскими данными.
  2. Проверяйте имена алиасов, допуская только безопасные символы.
  3. Ограничьте значения аннотаций разрешёнными функциями или выражениями.
  4. Поддерживайте Django в актуальном состоянии, чтобы получать исправления.

Заключение

  • Уязвимость CVE-2025-57833 позволяла внедрять SQL через динамические алиасы.
  • Django 4.2.23 и более поздние версии исправляют эту уязвимость.
  • Строгая валидация пользовательских данных остаётся обязательной.

Автор: Loïc
Дата: 06/09/2025

Скачать инструмент