YSoNet 是原始 YSoSerial.Net 的一个分支,目前由 @irsdl 维护。
一个用于生成利用不安全 .NET 对象反序列化漏洞的 payload 的概念验证工具。
YSoNet(原名 ysoserial.net)是一个工具集合,包含在常见 .NET 库中发现的实用程序及面向属性编程(property-oriented programming)“gadget 链”。在适当条件下,这些 gadget 链可以利用执行不安全对象反序列化的 .NET 应用程序。你提供一条命令和一个 gadget 链;工具会将命令包装在链中,并将序列化结果输出到标准输出。当易受攻击的应用程序反序列化该数据时,链会执行,你的命令将在主机上运行。
漏洞在于应用程序执行了不安全的反序列化,而并非因为 classpath 中存在 gadget。本项目受 Chris Frohoff 的 ysoserial 项目 启发。
不要将 YSoNet 的 gadget 和插件目录变成反序列化黑名单。该目录无法涵盖所有私有的、未来的、特定于应用程序的或不同组合方式的链,因此屏蔽此处列出的内容并不能使不安全的反序列化器变得安全。它可能造成虚假的安全感,而实际上只是延缓了攻击。
如果你正在审查本仓库以加固应用程序,请在检查 gadget 或插件之前阅读 面向防御者和审查者的安全指南。目标是消除不安全的反序列化,或迁移到固定模式(fixed-schema)、纯数据(data-only)的设计。当无法立即进行迁移时,严格的白名单只是临时遏制措施;黑名单并非修复方案。
完整文档位于 docs/:
刚接触此工具?最简单的入门方式是交互模式:一个菜单驱动的向导,列出所有 gadget 和插件,解释每个设置,并为你构建 payload——无需先记住任何命令行参数。
.\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 查看每个 gadget 或插件的帮助。更多内容见 用法与示例。
需要 Windows、来自 Visual Studio 2022 或 Build Tools 的 MSBuild(“.NET 桌面开发”工作负载)以及 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 进行字符串加密以减少杀毒软件误报;payload 字节不变。可通过 -p:ObfuscateRelease=false 跳过。Debug 版本从不混淆。Debug 构建会自动运行快速测试套件,测试失败会导致构建失败(可通过 -p:RunYsonetTests=false 跳过)。详尽的 FULL 套件为可选启用:
.\ysonet\bin\Debug\ysonet.Tests.exe --full
两者都是安全的:命令要么自关闭要么从不执行,监听器仅限回环地址。详细信息及其他可选层级:快速入门 和 CONTRIBUTING.md。
ysonet.exe 可以在 PowerShell 中为选项、gadget 名称(-g)、插件名称(-p)、格式化器(-f)和输出格式(-o)提供 Tab 补全。补全值实时来自工具本身,因此随着 gadget 和插件的添加,它们始终保持正确。
为当前会话启用(适用于任何 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。要添加 gadget、插件或序列化器?从 docs/ARCHITECTURE.md 中的代码地图开始,并且绝不要为了通过测试而削弱测试。
YSoNet 由 Soroush Dalili(@irsdl)开发和维护。YSoSerial.Net 最初由 Alvaro Muñoz(@pwntester)开发。运行 ysonet.exe --credit 查看完整的 gadget 和插件致谢,或参见 致谢。要了解底层问题的更多信息,请参见 参考资料。
YSoNet 采用 MIT 许可证。该许可证保留了原始 ysoserial.net 中 Alvaro Muñoz 的版权声明以及 YSoNet 中 Soroush Dalili 的版权声明。两份声明及 MIT 许可声明必须保留在软件的所有副本或实质性部分中。