OverTheWire Bandit: Seviye 28 → Seviye 29
Bağlam
Önceki seviyedeki yöntemle depoyu klonladık. Ancak README.md dosyasını açıp şifreyi aradığımızda garip bir durumla karşılaşıyoruz:
cat README.md
# Çıktı:
# (Boş veya anlamsız metin, ama şifre yok)
Talimatlar şifrenin orada olduğunu ama silindiğini ima ediyor. Bu durumda bakmamız gereken yer Git Geçmişi (History).
Çözüm
Adım 1: Repoyu Klonla
Eğer yapmadıysanız depoyu klonlayın. Unutmayın, eğer localhost engelliyse bunu kendi bilgisayarınızdan yapın:
git clone ssh://bandit28-git@bandit.labs.overthewire.org:2220/home/bandit28-git/repo
(Şifre: Level 27’den aldığınız şifre)
Adım 2: Logları Kontrol Et
Klasöre girin ve commit geçmişine bakın:
cd repo
git log
Burada yapılan değişikliklerin listesini göreceksiniz. Mesajlarda şüpheli bir şeyler arayın. Örneğin: “fix info leak” (bilgi sızıntısını düzelt), “remove password” (şifreyi sil) veya “add credentials” (kimlik bilgisi ekle).
Şuna benzer bir çıktı görebilirsiniz:
commit 4b3d...
Author: ...
Date: ...
fix info leak
commit 9d2a...
Author: ...
Date: ...
add credentials
Adım 3: Geçmişe Yolculuk
O şüpheli commit’te (sızıntının “düzeltildiği” yerde) neyin değiştiğini görmek istiyoruz. git show komutuyla bir commit’in içeriğini (diff) görebiliriz.
git show <COMMIT_HASH>
# Örnek: git show 4b3d
Alternatif olarak, o commit’e geri dönebilirsiniz:
git checkout <COMMIT_HASH_OF_ADD_CREDENTIALS>
cat README.md
git show kullanmak genellikle daha pratiktir. Çıktıda - ile başlayan (genelde kırmızı) satırlar silinen satırları gösterir. Şifreyi orada, silinmiş satırlar arasında bulacaksınız!
Öğrendiklerimiz
- Git Log:
git log, projenin tarihçesini kronolojik olarak gösterir. - Git Show:
git show <commit>, belirli bir değişikliğin detaylarını görmenizi sağlar. - Güvenlik Dersi: Asla şifreleri veya API anahtarlarını versiyon kontrol sistemine (git) atmayın. Sonradan silseniz bile, geçmişte (history) sonsuza kadar saklanırlar (tarihçeyi tamamen silmediğiniz sürece).