
Easy File Sharing Web Server 7.2의 SEH 기반 버퍼 오버플로우로, 비밀번호 복구 엔드포인트를 통해 도달 가능합니다.
Easy File Sharing Web Server 7.2의 비밀번호 복구 엔드포인트를 통해 도달 가능한 SEH 기반 버퍼 오버플로우입니다.
이 저장소는 취약점 연구와 익스플로잇 개발을 가르칠 때 사용하는 자료의 일부로 만들어졌으며, 특히 SEH(구조적 예외 처리기) 오버플로우와 ROP(리턴 지향 프로그래밍) 체인 개념을 소개할 때 활용됩니다.
이는 제 발표 **"The Path That Leads to Your First CVE"**와 관련이 있습니다. 해당 발표에서 저는 취약점 연구에는 다양한 진입점이 있으며, 레거시 소프트웨어에서 공개적으로 문서화된 CVE를 연구하는 것이 초보자에게 가장 접근하기 쉬운 경로 중 하나라고 설명합니다.
이 CVE는 완전하고 현실적인 익스플로잇 시나리오를 보여주기 때문에 선택되었습니다:
이 사례의 목표는 입문용 버퍼 오버플로우 실습과 더 고급 익스플로잇 개발 개념 사이의 디딤돌로 사용하는 것입니다.
이 취약점은 간단한 파일 공유용으로 널리 사용되었던 경량 Windows 웹 서버 애플리케이션인 Easy File Sharing Web Server 7.2에 영향을 미칩니다. 이 소프트웨어는 현대적인 보안 완화 조치를 고려하지 않고 작성되었습니다. 교육적 관점에서 이 사례가 특히 흥미로운 이유는 여러 요소가 결합되어 있기 때문입니다:
이러한 조합은 CVE-2025-34096을 현실적인 무인증 공격 시나리오에서 익스플로잇 개발 기법을 가르치기에 훌륭한 사례로 만듭니다.
Easy File Sharing Web Server 7.2는 HTTP를 통한 파일 공유를 위해 만들어진 경량 Windows 애플리케이션입니다. 기본 파일 탐색과 사용자 계정 외에도 비밀번호 복구 기능, 즉 사용자가 이메일 주소를 입력하면 잊어버린 자격 증명을 받을 수 있는 양식을 포함합니다.
해당 양식은 /sendemail.ghp로 POST 요청을 보냅니다. Email 필드를 처리하는 핸들러는 길이 검사 없이 값을 고정 크기 스택 버퍼에 그대로 복사합니다. 이 엔드포인트는 인증이 필요 없으므로, 원격 공격자와 취약한 코드 경로 사이에는 아무런 장벽이 없습니다.
주요 기술 세부 사항:
Easy File Sharing Web Server는 이메일 알림 기능의 일부로 /sendemail.ghp로 전달되는 HTTP POST 요청을 처리합니다. 이 엔드포인트가 수락하는 Email 매개변수는 길이 검사 없이 로컬 스택 버퍼에 복사됩니다.
취약한 로직의 단순화된 버전은 다음과 같습니다:
char email_buffer[256];
strcpy(email_buffer, user_input);
대상 버퍼는 고정 크기이고 입력 길이가 검증되지 않으므로, Email 필드에 충분히 긴 문자열을 보내면 복사가 버퍼 끝을 넘어 쓰게 됩니다.
더 많은 데이터가 쓰이면 스택 레이아웃이 손상됩니다. 단순한 반환 주소 덮어쓰기와 달리, 오버플로우는 스택에 저장된 구조적 예외 처리기(SEH) 체인에 도달합니다. 손상된 스택의 결과로 예외가 발생하면 OS는 SEH 체인을 탐색하여 공격자가 제어하는 핸들러 주소로 제어권을 넘깁니다.
따라서 익스플로잇 흐름은 SEH 덮어쓰기 기법을 따릅니다:
이로 인해 이 취약점은 기본적인 EIP 덮어쓰기보다 익스플로잇이 더 복잡하지만, 실제 환경의 시나리오를 더 잘 반영합니다.
크래시는 /sendemail.ghp에 대한 POST 요청의 Email 매개변수에 긴 문자열을 보내 재현할 수 있습니다. 인증은 필요하지 않습니다. Python을 사용한 예시:
import socket
HOST = '127.0.0.1'
PORT = 80
request = (
'POST /sendemail.ghp HTTP/1.1\r\n'
'Email=' + 'A' * 5000 + '&getPassword=Get+Password'
).encode('utf-8')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
디버거에서 실행하면 크래시 시 손상된 SEH 체인과 액세스 위반이 표시되어, 사용자 제어 데이터가 예외 처리기 포인터를 덮어썼음을 확인할 수 있습니다.
이 저장소의 목표는 크래시를 시연하는 것뿐만 아니라, 실제 SEH 기반 익스플로잇을 개발할 때 사용하는 방법론에 따라 전체 익스플로잇 과정을 단계별로 살펴보는 것입니다.
메인 README를 깔끔하게 유지하기 위해, 상세한 익스플로잇 노트, 스크립트, 디버거 단계는 이 저장소의 Vulnerability 📂 폴더에 배치되어 있습니다.
거기에서 이 CVE를 익스플로잇하는 데 사용된 전체 워크플로우를 찾을 수 있습니다: