OverTheWire Bandit: Seviye 22 → Seviye 23
Bağlam
Bir önceki seviyedeki gibi yine bir Cron görevi var. Ancak bu sefer şifreyi sabit bir dosya ismine yazmıyor. Dosya ismini belirli bir kurala (algoritmaya) göre oluşturuyor.
Görevi çözmek için scriptin ne yaptığını anlamamız, yani tersine mühendislik (reverse engineering) yapmamız gerekiyor.
Hedef
bandit23 kullanıcısı adına çalışan cron görevinin oluşturduğu şifre dosyasının adını bulmak.
Çözüm
Adım 1: Cron Dosyasını Bul
Yine /etc/cron.d/ altına bakalım:
ls -la /etc/cron.d/
cat /etc/cron.d/cronjob_bandit23
Bize /usr/bin/cronjob_bandit23.sh scriptini işaret edecek.
Adım 2: Scripti Analiz Et
Kodu okuyalım:
cat /usr/bin/cronjob_bandit23.sh
Kodun Önemli Kısmı:
myname=$(whoami)
mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1)
echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget"
...
Analiz:
myname=$(whoami): Scripti çalıştıran kullanıcının adını alıyor.mytarget=...: “I am user [kullanıcı_adı]” cümlesinin MD5 özetini (hash) alarak bir dosya ismi oluşturuyor.
Buradaki Tuzak:
Eğer bu scripti siz çalıştırırsanız, whoami komutu bandit22 döner ve script sizin kendi şifrenizi (zaten bildiğiniz şeyi) kopyalar.
Bizim merak ettiğimiz: Bu script Cron tarafından, bandit23 kullanıcısı olarak çalıştırıldığında dosya adı ne oluyor?
Adım 3: Manuel Hesaplama
Scriptin mantığını taklit edelim ama değişken yerine hedef kullanıcının adını yazalım:
echo I am user bandit23 | md5sum | cut -d ' ' -f 1
Çıktı:
8ca3194675ce867e66f2758de6966bd9
İşte scriptin oluşturduğu dosya ismi bu!
Adım 4: Şifreyi Oku
Dosya ismini bulduğumuza göre, /tmp/ altındaki o dosyayı okuyalım:
cat /tmp/8ca3194675ce867e66f2758de6966bd9
Tebrikler, bir sonraki seviyenin şifresi elinizde!
Öğrendiklerimiz
- Kod Analizi: Bir yazılımı çalıştırmadan, sadece kodunu okuyarak ne yapacağını tahmin etmek.
- Bağlam (Context):
whoamigibi değişkenlerin, kodu çalıştıran kişiye göre değiştiğini anlamak kritikti. Scripti biz değil, sistem çalıştırıyor.