OverTheWire Bandit: Seviye 19 → Seviye 20
Bağlam
Normalde Linux’ta bir programı çalıştırdığınızda, o program sizin yetkilerinizle çalışır. Eğer siz bir dosyayı okuyamıyorsanız, çalıştırdığınız program da okuyamaz.
Ancak SUID (Set User ID) bit’i ayarlanmış programlar istisnadır. Bu programlar, dosya sahibinin yetkileriyle çalışır. Örneğin passwd komutu root yetkisiyle çalışır ki bu sayede herkes kendi şifresini değiştirebilir (root’un dosyalarına yazarak).
Bu seviyede bize bandit20-do adında SUID bit’i olan bir program verilmiş. Sahibi ise bandit20.
Hedef
bandit20-do programını kullanarak, normalde okuma iznimiz olmayan /etc/bandit_pass/bandit20 dosyasını okumak.
Çözüm
Adım 1: Dosyayı İncele
Önce ev dizinine bakalım:
ls -la
Çıktıda şuna benzer bir satır göreceksiniz:
-rwsr-x--- 1 bandit20 bandit19 14876 ... bandit20-do
- Dosyanın sahibi: bandit20.
- İzinlerdeki
sharfi: SUID. Yani bu programı kim çalıştırırsa çalıştırsın, program kendini bandit20 zannederek çalışacak.
Adım 2: Programı Test Et
Programın ne yaptığını anlamak için argümansız çalıştıralım:
./bandit20-do
Çıktı: Run a command as another user. Example: ./bandit20-do id
Görünüşe göre bu program, ona verdiğimiz herhangi bir komutu bandit20 olarak çalıştırıyor. sudo’nun basitleştirilmiş hali gibi!
Hemen test edelim:
./bandit20-do id
Çıktı: uid=11019(bandit19) gid=11019(bandit19) euid=11020(bandit20) ...
Dikkat edin: euid (Effective User ID) bandit20 olarak görünüyor. Yani şu an o programın gözünde biz bandit20yiz.
Adım 3: Şifreyi Al
Artık bandit20 olduğumuza göre, onun şifre dosyasını okuyabiliriz:
./bandit20-do cat /etc/bandit_pass/bandit20
Çıktı:
GbKksEFF4yrVs6il55v6gwY5aVje5f0j
Tebrikler, yetki yükseltme (Privilege Escalation) yaptınız!
Öğrendiklerimiz
- SUID (SetUID): Bir dosyanın izinlerinde
sharfi ile gösterilir. Bu dosyayı çalıştıran kişi geçici olarak dosya sahibinin haklarını kazanır. Güvenlik açısından çok kritiktir. - Effective UID: İşletim sisteminin izin kontrolleri yaparken baktığı “gerçekte kim bu?” kimliğidir.