GTFOBins
(gtfobins.org)- Unix ikili dosyalarının listesi işlevlerine göre düzenlenmiş ve her ikili için mümkün olan eylemler ayrıntı sayfalarına ve anchor bağlantılarına doğrudan bağlanmış
- Tekrarlayan sınıflandırmalar Shell, File read, File write, Command, Inherit, Upload, Download, Reverse shell, Library load, Privilege escalation olup bazı maddelerde bunlara Bind shell de ekleniyor
- File read ve Shell çok geniş bir alana yayılıyor; dd, sed ve sqlite3 gibi araçlar okuma ve yazmayı birlikte sunduğu için yalnızca görüntüleme odaklı araçlarla aralarındaki sınır bulanıklaşıyor
- apt, git, journalctl, systemctl gibi araçlar sık sık Command ve Inherit içeriyor; bee, pipx, sqlmap ve vim ailesi gibi ağ aktarımı ve kabuk davranışını birlikte taşıyan çok işlevli ikililer de tekrar tekrar öne çıkıyor
- Privilege escalation yalnızca ayrı bağlantı verilen bazı ikililerde görülüyor; 7z'den zypper'a uzanan geniş liste, genel araçların davranış kombinasyonlarındaki farkları tek bakışta gösteriyor
Temel işlev dağılımı
- Yalnızca dosya okuma yapan ya da ağırlıklı olarak okuma odaklı maddeler çok geniş bir alana yayılıyor
- Kabuk çalıştırma yapabilen maddeler de oldukça fazla
- Dosya yazma ile okumayı birlikte sunan çok sayıda madde var; bu da yalnızca görüntüleme odaklı araçlarla aradaki sınırı bulanıklaştırıyor
- Komut çalıştırma ya da yetki devralma paket yöneticilerinde, sistem araçlarında ve etkileşimli programlarda sık görülüyor
- apt, apt-get, git, journalctl, man, systemctl, timedatectl, zless bunun öne çıkan örnekleri
Çok işlevli ikililer
- Birden fazla eylemi aynı anda barındıran çok işlevli ikililer tekrar tekrar karşımıza çıkıyor
-
Inherit tabanlı çok işlevli maddeler
- apport-cli, batcat, cargo, crash, gcloud, git, journalctl, man, opencode, psql, run-mailcap, systemd-resolve için Inherit ile birlikte Shell, Command, File read ve File write bir arada sunuluyor
-
Ağı ve dosya aktarımını da kapsayan maddeler
-
Editör ve hata ayıklayıcı ailesi
-
Paket yöneticisi ve runtime ailesi
Ağ, kabuk ve kütüphane yükleme
- Upload/Download işlevleri yalnızca ağ araçlarında değil, kabuklarda ve dil runtime'larında da birlikte bulunuyor
-
Aktarım odaklı araçlar
-
Reverse shell ve Bind shell
-
Library load etiketli maddeler
1 yorum
Hacker News yorumları
Yorumlarda biraz kafa karışıklığı var gibi, bunun güvenlik/CTF bağlamında ne zaman kullanıldığına örnek vermek gerekirse şöyle
Kısıtlı shell’lerde ya da yalnızca bazı komutların/binary’lerin çalıştırılabildiği ortamlarda, argümanlar genelde oldukça serbest verilebiliyor
O noktada GTFOBins kullanarak dosya okuma/yazmadan komut çalıştırmaya kadar ilerleyip kısıtlı bağlamdan çıkıp bir shell elde etmek mümkün olabiliyor
Birisi sudo erişimi bırakmışsa ya da bir GTFOBin’e SUID bit vermişse, bunu ayarlayan kişinin hiç düşünmediği yollarla hassas dosyaları okuyup yazmak ve yetkili komutlar çalıştırmak da mümkün olabilir
Yetki işleme mantığı block-list ve allow-list merkezli olduğu için epey ilkel kalıyor
Bir oturumda yanlışlıkla Claude’a powershell izni vermiştim; sonrasında git gibi araçlar engellendiğinde, aynı işi yapan powershell script’leri yazıp çalıştırarak engellenen izinleri baypas ettiğini gördüm
Düzgün kurulmuş bir sistemde powershell’i genel allow-list’e koymazsınız tabii, ama araç bazlı izin seviyeleri arasında boşluklar varsa bu sayfadaki tekniklerle rahatça dolaşılabilecek gibi görünüyor
Bir şirkette gördüğüm dağıtım modelinde, yöneticinin allowlist’e eklediği programlar parola olmadan
sudoile çalıştırılabiliyordu ve en baştan vim, bash gibi genel amaçlı araçlar da listede vardıEvden çalışan biri olarak bunu aslında biraz iyi bir şey gibi görmüştüm; çünkü bilgisayarımı "koruduğunu" söyleyen bu yazılım, ben kısa süreliğine kalkıp ekranı kilitlemeyi unuttuğumda, birinin gelip bir şeyler çalıştırmasını çok daha kolay hale getiriyordu
Birkaç yıl önce destek ekibinin
tcpdumpile ağ yakalaması alması gerekiyordu; işi hızlandırmak için argümanları bir ölçüde açık bırakan bir sudo kuralı eklenmiştiPort ya da NIC değişebilir diye o an mantıklı görünmüştü, ama aslında
tcpdumpiçindeki-zseçeneğiyle sıkıştırma komutu belirtilebildiği için, oraya "özel" bir komut koyarsanız sunucuyu tamamen ele geçirebiliyordunuzsudo tcpdump -i any -z '/home/despicable_me/evil_cmd.sh' -w /tmp/dontcare.pcap -G 1 -Z rootKüçük bir ayrıntı gibi görünse de bunları gözden kaçırmak gerçekten çok kolay
Bugünlerde apparmor gibi katmanlar bu riski azaltabiliyor, ama bununla birlikte başka dertler de getiriyor ve hâlâ yanlış yapılandırılması çok kolay
Buna benzer bir şeyi en son 1995 civarında, Windows 3.11 yüklü bir ortaokul bilgisayarında kullanmıştım
Sadece onaylı birkaç uygulamanın çalışmasına izin verecek şekilde kilitlemişlerdi ve onlardan biri Word’dü
Word içinde makro kullanıp shell üzerinden başka uygulamalar çalıştırabiliyordunuz
Böylece yalnızca birkaç uygulamanın göründüğü kilitli bilgisayar, fiilen her şeyi çalıştırabilir hale gelmişti
O zamanlar oldukça heyecan vericiydi; sonrasında buna benzer şeyleri pek görmedim
Ara sıra mağaza ya da AVM’lerdeki dokunmatik bilgi ekranlarında kiosk mode’dan çıkılabildiğine dair şeyler görüyorum; o da aynı türden sanırım
restic - Shell, Command, Uploadkısmını görünce, yedekleri root olarak çalıştırmamak için yaptığım değişiklik biraz daha haklı geldiOnun yerine normal kullanıcı olarak çalıştırıyorum ama sadece read-all-files capability verip giriş shell’ini kaldırdım
Elbette masaüstü sistemlerde bu fazla kaçabilir; ayrıca o noktaya kadar sızmış bir saldırgan zaten neredeyse tüm dosyaları okuyabilir ve yedeklere arka kapı da ekleyebilir
[0] https://man7.org/linux/man-pages/man7/capabilities.7.html
Uzak insan saldırganlara, uzak bot saldırganlara ve bir ölçüde yerel insan saldırganlara karşı önlemlerimiz vardı; ama yerelde kendi kodunu yazabilen bot saldırgan, artık eskisinden çok daha fazla hesaba katılması gereken bir tehdit haline geldi
Bu, kötü amaçlı yazılımla da tamamen aynı kategori değil
Ben de kapsayıcıyı ilgili güvenlik sınırı olarak görüp iç süreçleri tamamen root olarak çalıştırdığım oldu; ama LLM işin içine girince OS düzeyi güvenliğin bir anda daha mı önemli hale geldiği, yoksa tam tersine daha mı anlamsızlaştığı konusunda emin olamıyorum
Kafam karıştı; bu,
catyoksacat /path/to/input-fileyerinebase64 /path/to/input-file | base64 --decodekullanın mı demekYoksa
base64 /path/to/input-file | base64 --decodeifadesi, dosya okuma izninin kendisini mi baypas ediyorÇağrılan süreç, genelde onu başlatan kullanıcının izinlerini aynen devralır; sadece setuid bit varsa istisna oluşur
Mesele, standart Unix araçlarını kapatarak saldırganın lateral movement yapmasını engellemeye çalışan ortamlarda, aynı işi başka araçlarla da yapabilmesidir
Yetkilerin kendisini aşmak değil; yalnızca birkaç komuta izin verilen kısıtlı shell içinde, aynı sonucu başka bir binary ile üretmekten bahsediliyor
Bu tarz şeyler CTF’lerde gerçekten çok yaygın
base64’ü root yetkisiyle çalıştırıp dosya içeriğini base64’e kodlarsınız, sonra o çıktıyı başka bir base64 süreciyle çözüp sonuçta dosya içeriğini görürsünüzSonuçta bu, sadece birkaç adım eklenmiş bir
catolurZamanında bu araçlardan birinin bakımını yapıyordum; biri onunla shell elde edince oldukça komiğime gitmişti
Yaratıcı ve eğlenceli, ayrıca kaynak olarak da çok iyi
hackthebox.euoynarken bunu çok fazla kullandımGTFOBins epey eski; yapay zekadan önce de faydalı bir kaynaktı
Yapay zekayı faydalı kılan şeyin kendisi, sonuçta zaten var olan bu tür kaynakları önümüze getirebilmesi
base64’ün listede olmasını tam anlayamıyorumBana göre o, ancak kullanıcının zaten erişebildiği dosyaları okuyabilir; yanlış mı düşünüyorum
Yoksa yanlış yapılandırılmış bir sistemde yerel güvenlik kısıtlarını aşma ifadesi, benim anladığımdan farklı bir şey mi demek
En basit örnekle, varsayılan shell’i rbash yapmış olsanız bile kullanıcı yalnızca
bashçalıştırıp normal shell’e geçebiliyorsa bunun anlamı kalmazsudoers, base64’ün root olarak çalıştırılmasına izin veriyor olabilirNeden böyle bir şey yapılır bilmiyorum, ama böyle bir durumda amaçlanan yetki sınırlarını aşıp sistemdeki herhangi bir dosyayı okumak mümkün hale gelir
Ya da Claude Code içinde
base64çalıştırmaya inceleme olmadan izin verirseniz,.envgibi gizli dosyaların okunmasına da kapı açmış olabilirsinizBu bazen
sudo -liçinde açıkça izinli olur, bazen de başka bir şey o aracı root olarak çağırırBu tür baypaslar için hafifletme yöntemlerinin de gösterilmesi iyi olurdu
Mesela
moreile shell elde etme durumundamoreçalıştırılmadan önceSHELLdeğişkenini/bin/falseyapmaksecure mode ile
lesskullanmaksudoilemoreçalıştırılıyorsa NOEXEC flag kullanmak gibiBunun dışındaki yöntemlerin hepsi bir ölçüde şansa kalıyor
Oldukça havalı ve beklenmedik derecede yaratıcı yöntemler var
Mesela yt-dlp hiç aklıma gelmezdi
Onu yüklü tutmayı tekrar düşünmem gerekecek