
مولّد حمولات إلغاء التسلسل لمجموعة متنوعة من مُنسّقات .NET
YSoNet هو فرع (fork) من المشروع الأصلي YSoSerial.Net، ويتم صيانته حالياً بواسطة @irsdl.
أداة إثبات مفهوم (proof-of-concept) لتوليد حمولات (payloads) تستغل إلغاء التسلسل (deserialization) غير الآمن لكائنات .NET.
YSoNet (المعروف سابقاً باسم ysoserial.net) هو مجموعة من الأدوات وسلاسل "البرمجة الموجهة بالخصائص" (property-oriented programming "gadget chains") المكتشفة في مكتبات .NET الشائعة التي يمكنها، في ظل الظروف المناسبة، استغلال تطبيقات .NET التي تقوم بإلغاء تسلسل غير آمن للكائنات. أنت تعطيه أمراً وسلسلة أدوات (gadget chain)؛ فهو يغلّف الأمر داخل السلسلة ويقوم بتسلسل النتيجة إلى stdout. عندما يقوم تطبيق ضعيف بإلغاء تسلسل تلك البيانات، تعمل السلسلة ويتم تنفيذ أمرك على المضيف.
الثغرة تكمن في التطبيق الذي يقوم بإلغاء تسلسل غير آمن، وليس في وجود الأدوات (gadgets) في مسار الفئات (classpath). هذا المشروع مستوحى من مشروع ysoserial لكريس فروهوف.
لا تحوّل كتالوج الأدوات والإضافات (plugins) في YSoNet إلى قائمة حظر (blocklist) لإلغاء التسلسل. لا يمكن للكتالوج أن يشمل كل سلسلة خاصة أو مستقبلية أو خاصة بتطبيق معين أو مكوّنة بشكل مختلف، لذا فإن حظر ما هو مدرج هنا لا يجعل أداة إلغاء التسلسل غير الآمنة آمنة. يمكن أن يخلق ذلك شعوراً زائفاً بالأمان بينما يؤخر الهجوم فقط.
إذا كنت تراجع هذا المستودع لتقوية تطبيق ما، اقرأ إرشادات الأمان للمدافعين والمراجعين قبل فحص الأدوات أو الإضافات. الهدف هو إزالة إلغاء التسلسل غير الآمن أو الانتقال إلى تصميم ثابت المخطط (fixed-schema) يعتمد على البيانات فقط. القائمة البيضاء الصارمة (allowlist) هي احتواء مؤقت عندما لا يمكن تنفيذ الترحيل فوراً؛ القائمة السوداء (denylist) ليست معالجة.
التوثيق الكامل موجود في docs/:
جديد على هذه الأداة؟ أسهل طريقة للبدء هي الوضع التفاعلي: معالج قائم على القوائم يعرض الأدوات والإضافات، ويشرح كل إعداد، ويبني الحمولة لك - دون الحاجة لحفظ الخيارات أولاً.
.\ysonet.exe -i
(تعمل أيضاً interactive و wizard و --interactive.) تحتاج إلى ysonet.exe أولاً - راجع البدء. الشرح الكامل للمعالج موجود هناك أيضاً.
./ysonet.exe -f Json.Net -g ObjectDataProvider -o raw -c "calc" -t
شاهد جميع الخيارات باستخدام ysonet.exe --fullhelp، ومساعدة كل أداة أو إضافة باستخدام -g NameHere -help أو -p NameHere -help. المزيد في الاستخدام والأمثلة.
يتطلب Windows و MSBuild من Visual Studio 2022 أو Build Tools (حمل عمل ".NET desktop development") و nuget.exe. كل مشروع يستهدف .NET Framework 4.7.2.
git clone https://github.com/irsdl/ysonet
cd ysonet
nuget restore ysonet.sln
msbuild ysonet.sln -p:Configuration=Release # أو Debug
.\ysonet\bin\Release\ysonet.exe -h
ysonet.exe لتقليل النتائج الإيجابية الخاطئة لمضادات الفيروسات؛ بايتات الحمولة تبقى دون تغيير. يمكن تخطي ذلك باستخدام -p:ObfuscateRelease=false. التصحيح (Debug) لا يتم تشفيره أبداً.البناء التصحيحي (Debug) يشغّل مجموعة الاختبارات السريعة تلقائياً، وفشل الاختبار يفشل البناء (يمكن تخطيه باستخدام -p:RunYsonetTests=false). مجموعة FULL الشاملة اختيارية:
.\ysonet\bin\Debug\ysonet.Tests.exe --full
كلاهما آمن: الأوامر ذاتية الإغلاق أو لا تُنفذ أبداً، والمستمعون (listeners) على الحلقة المحلية (loopback) فقط. التفاصيل والمستويات الاختيارية الأخرى: البدء و CONTRIBUTING.md.
يمكن لـ ysonet.exe إكمال الخيارات وأسماء الأدوات (-g) وأسماء الإضافات (-p) والمُنسّقات (-f) وصيغ الإخراج (-o) بالتبويب في PowerShell. قيم الإكمال تأتي مباشرة من الأداة، لذا تبقى صحيحة عند إضافة أدوات وإضافات جديدة.
فعّله للجلسة الحالية (يعمل في أي PowerShell، لا يُكتب شيء على القرص، لا يتأثر بسياسة التنفيذ):
.\ysonet.exe completion powershell | Out-String | Invoke-Expression
ثم اضغط Tab، مثلاً .\ysonet.exe -g A ثم Tab.
لجعله دائماً في PowerShell 7+ (pwsh):
.\ysonet.exe completion install # ثم أعد التحميل باستخدام: . $PROFILE
التثبيت يستهدف PowerShell 7+ (pwsh) فقط، لأن Windows PowerShell 5.1 غالباً ما يكون AllSigned أو Restricted ولا يمكنه تحميل ملف تعريف غير موقّع؛ في هذه الحالة استخدم السطر الخاص بالجلسة أعلاه (لا يتطلب تغيير سياسة). شغّل ysonet.exe completion status لمعرفة ما تم اكتشافه، و ysonet.exe completion uninstall لإزالته. مزيد من التفاصيل في tools/completions/.
تم إنشاء هذا البرنامج لأغراض البحث الأكاديمي وتطوير تقنيات دفاعية فعالة فقط، وليس المقصود استخدامه لمهاجمة الأنظمة إلا بإذن صريح. القائمون على المشروع غير مسؤولين عن سوء استخدام البرنامج. استخدمه بمسؤولية.
هذا البرنامج مشروع شخصي ولا يرتبط بأي شركات، بما في ذلك أصحاب العمل للمالك والمساهمين.
المستودع الرسمي: https://github.com/irsdl/ysonet
master.YOUR_USER و YOUR_BRANCH):
https://github.com/irsdl/ysonet/compare/master...YOUR_USER:ysonet:YOUR_BRANCHراجع CONTRIBUTING.md للنسخة المختصرة. تريد إضافة أداة أو إضافة أو مُنسّق؟ ابدأ بخريطة الكود في docs/ARCHITECTURE.md، ولا تضعف أبداً اختباراً ليجتاز.
YSoNet تم تطويره وصيانته بواسطة Soroush Dalili (@irsdl). YSoSerial.Net تم تطويره أصلاً بواسطة Alvaro Muñoz (@pwntester). شغّل ysonet.exe --credit للاعتمادات الكاملة للأدوات والإضافات، أو راجع الاعتمادات. لمعرفة المزيد عن المشكلات الأساسية، راجع المراجع.
YSoNet مرخّص بموجب رخصة MIT. يحافظ الترخيص على إشعار حقوق النشر الأصلي لـ ysoserial.net لصالح Alvaro Muñoz وإشعار حقوق النشر لـ YSoNet لصالح Soroush Dalili. يجب أن يبقى كلا الإشعارين وإشعار إذن MIT في جميع النسخ أو الأجزاء الجوهرية من البرنامج.