Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Django-faille-CVE-2025-57833_test — Django의 annotate() 및 alias() 메서드에서 동적 별칭을 통한 SQL 인젝션(CVE-2025-57833)을 보여주는 교육용 개념 증명(PoC)입니다. 취약 코드, 악용 예제, 수정 분석을 포함합니다. | Kitploit
도구/GitHubGitHub/loic-houchi/django-faille-cve-2025-57833_test
Static AnalysisVulnerability AnalysisCode AnalysisWeb Application ExploitationLearning & EducationDatabase Security
GitHubloic-houchi/django-faille-cve-2025-57833_test

Django-faille-CVE-2025-57833_test

Django의 annotate() 및 alias() 메서드에서 동적 별칭을 통한 SQL 인젝션(CVE-2025-57833)을 보여주는 교육용 개념 증명(PoC)입니다. 취약 코드, 악용 예제, 수정 분석을 포함합니다.

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
저장소 보기
231년 전아직 검토되지 않음
공유

Django의 별칭을 통한 SQL 인젝션 취약점 테스트

정의: 별칭이란?

별칭은 SQL 쿼리에서 열이나 집계 결과에 부여된 이름입니다.
Django에서 별칭은 annotate() 또는 alias() 메서드와 함께 사용되어 계산된 필드에 이름을 지정합니다.

예시:

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

여기서 book_count는 Count('id') 결과의 별칭입니다.
계산된 열에 대해 읽기 쉬운 이름을 검색할 수 있습니다.


셸을 통한 데이터 삽입

빠르게 진행하려면 셸을 통해 데이터를 삽입할 수 있습니다:

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):
    # URL에서 별칭을 가져옴
    alias_param = request.GET.get("alias", "{}")
    try:
        # ⚠️ 취약: 사용자 데이터의 직접 평가
        alias_dict = json.loads(alias_param)
        for key, value in alias_dict.items():
            alias_dict[key] = eval(value)  # 위험! 임의 코드 실행 허용

        # 동적 어노테이션으로 쿼리셋 생성
        qs = Author.objects.annotate(**alias_dict).values("name", *alias_dict.keys())

        # 결과 반환
        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

도구 다운로드