
Генератор полезных нагрузок для десериализации для различных .NET-форматтеров
YSoNet — это форк оригинального YSoSerial.Net, в настоящее время поддерживаемый @irsdl.
Инструмент класса proof-of-concept для генерации полезных нагрузок, эксплуатирующих небезопасную десериализацию объектов .NET.
YSoNet (ранее известный как ysoserial.net) — это набор утилит и «цепочек гаджетов» (gadget chains) объектно-ориентированного программирования, обнаруженных в распространённых библиотеках .NET, которые при определённых условиях могут эксплуатировать .NET-приложения, выполняющие небезопасную десериализацию объектов. Вы передаёте ему команду и цепочку гаджетов; он оборачивает команду в цепочку и сериализует результат в stdout. Когда уязвимое приложение десериализует эти данные, цепочка выполняется, и ваша команда исполняется на хосте.
Уязвимость заключается в приложении, выполняющем небезопасную десериализацию, а НЕ в наличии гаджетов в classpath. Этот проект вдохновлён проектом ysoserial Криса Фрохоффа.
Не превращайте каталог гаджетов и плагинов YSoNet в блок-лист десериализации. Каталог не может включать все частные, будущие, специфичные для приложений или иначе составленные цепочки, поэтому блокировка перечисленного здесь не делает небезопасный десериализатор безопасным. Это может создать ложную уверенность, лишь откладывая атаку.
Если вы просматриваете этот репозиторий для укрепления приложения, прочитайте Руководство по безопасности для защитников и ревьюеров перед изучением гаджетов или плагинов. Цель — устранить небезопасную десериализацию или перейти на дизайн с фиксированной схемой и только данными. Строгий список разрешённого — это временное сдерживание, когда миграция невозможна немедленно; список запрещённого — это не исправление.
Полная документация находится в 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
Оба безопасны: команды самозакрывающиеся или никогда не выполняются, а прослушиватели работают только на loopback. Подробности и другие опциональные уровни: Начало работы и CONTRIBUTING.md.
ysonet.exe поддерживает автодополнение по Tab для параметров, имён гаджетов (-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 разрабатывается и поддерживается Сорушем Далили (@irsdl). YSoSerial.Net изначально разработан Альваро Муньосом (@pwntester). Выполните ysonet.exe --credit для полных благодарностей гаджетам и плагинам или см. Благодарности. Чтобы узнать больше о базовых проблемах, см. Ссылки.
YSoNet распространяется под лицензией MIT. Лицензия сохраняет оригинальное уведомление об авторских правах ysoserial.net для Альваро Муньоса и уведомление об авторских правах YSoNet для Соруша Далили. Оба уведомления и уведомление о разрешении MIT должны оставаться во всех копиях или существенных частях программного обеспечения.