
YSoNet は、元の YSoSerial.Net のフォークであり、現在は @irsdl によってメンテナンスされています。
安全でない .NET オブジェクトの逆シリアル化を悪用するペイロードを生成するための概念実証ツールです。
YSoNet(以前は ysoserial.net として知られていました)は、一般的な .NET ライブラリで発見されたユーティリティとプロパティ指向プログラミング「ガジェットチェーン」のコレクションであり、適切な条件下で、オブジェクトの安全でない逆シリアル化を実行する .NET アプリケーションを悪用できます。コマンドとガジェットチェーンを指定すると、コマンドをチェーンにラップし、結果を stdout にシリアル化します。脆弱なアプリケーションがそのデータを逆シリアル化すると、チェーンが実行され、コマンドがホスト上で実行されます。
脆弱性は、クラスパスにガジェットがあることではなく、安全でない逆シリアル化を実行するアプリケーション側にあります。このプロジェクトは Chris Frohoff の 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、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 を文字列暗号化して、アンチウイルスの誤検知を減らします。ペイロードのバイトは変更されません。-p:ObfuscateRelease=false でスキップできます。Debug は決して難読化されません。Debug ビルドは高速テストスイートを自動的に実行し、テストが失敗するとビルドも失敗します(-p:RunYsonetTests=false でスキップできます)。網羅的な FULL スイートはオプトインです:
.\ysonet\bin\Debug\ysonet.Tests.exe --full
どちらも安全です: コマンドは自己終了するか実行されず、リスナーはループバックのみです。詳細とその他のオプトイン層: はじめに と CONTRIBUTING.md。
ysonet.exe は、PowerShell でオプション、ガジェット名(-g)、プラグイン名(-p)、フォーマッタ(-f)、出力形式(-o)をタブ補完できます。補完値はツールからライブで取得されるため、ガジェットとプラグインが追加されても正確に保たれます。
現在のセッションで有効にする(任意の 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 ライセンス の下でライセンスされています。このライセンスは、Alvaro Muñoz の元の ysoserial.net 著作権表示と、Soroush Dalili の YSoNet 著作権表示を保持しています。両方の表示と MIT 許可表示は、ソフトウェアのすべてのコピーまたは重要な部分に残す必要があります。