İnternet üzerinde Siber Güvenlik üzerine çok fazla kitap, video ve podcast var. Lakin bu karışık konseptleri pasif bir şekilde öğrenmek pek verimsiz. Tüketilmesi gereken çok fazla içerik ve bilgi var. Bu sebeple insan içinde kayboluyor. Yaptığım araştırmalar üzerine ben de yazılımcıların eski kültürlerinden olan “CTF” yarışmalarına merak saldım. Amaç çok basit, sitedeki zaafı kullanarak şifreyi bulmak ve sonraki bölüme geçmek.
OvertheWire’ın oluşturduğu “Natas” adlı CTF, internet sitelerinin açıkları üzerine harika bir oyun. Kendiniz oynamak istiyorsanız overthewire.org adresini ziyaret edebilirsiniz. Şimdilik sadece benim oyun notlarımı okumak istiyorsanız aşağı kaydırın.
Bölümler hakkındaki görüşlerimi bu şekilde iletirken,
Bölümlerin çözümü hakkındaki tüyoları "kod bloğu" şeklinde vereceğim.
Nereden başlayacağını bilince kolaydı. Siteyi “inceledim”.
Sağ tıkın kapandığını söylüyordu. Kullandığım tarayıcının özelliği gereği sağ tıkım çalışmaya devam etti. Etmeseydi bile bunun için çeşitli eklentiler, kısayollar mevcuttu. Sıradaki bölüm.
İncelediğimde direkt karşıma bir şey çıkmadı ama image source html komutunu gördüm. “files/pixel.png”, önceden edinmiş olduğum bilgi kırıntılarıyla bunun bir directory olduğunu fark ettim. Sitedeki 1 pixellik görüntüyü buradan çekiyordu. Acaba bu directory’e erişimim var mıydı?
Elimde fazla seçenek olmadığından denedim. Karşıma 1 pixellik png çıktı.
Directory uzantısı silerek doğrudan files’a girmeye çalıştım. Bir index sayfasıyla karşılaştım. Users.txt bana gerekli şifreyi verdi.
Harika.
“Bu defa Google bile bulamaz” ifadesi beni ilk başta yanılttı. Aklımda Google’ın daha önceden bulduğu (yani cache’lediği) ihtimaller geldi. Araştırdım, Google Cache’lerinden bir şey bulamadım. Demek istediği şey internet sitesinin Google’da indexlenmediği olabilirdi. Google’ın siteleri nasıl indexlediğini bilmiyordum. Bir crawler kullandıklarını biliyordum ama bunlara nasıl erişebileceğim hakkında bir fikrim yoktu. Zaman geçiyordu, ipucu almam gerekti.
Crawler’a kadar iyi gelmiştim ama Crawler Engelleyici fikrini hiç düşünmemiştim.
Crawler Engellemek için robots.txt dosyası kullanıldığını yeni okumuştum.
Lakin bu dosyanın internet sitesinde herkese açık olarak paylaşıldığı bilgisine sahip değildim.
URL uzantısına robots.txt ekledim.
Karşıma bir directory daha çıktı.
Oraya girdiğimde şifre elimdeydi.
Natas4 en zorlandığım bölümdü. Çözüm yolu belirli olsa bile çözüm yoluna ulaşmak modern browserlar ile o kadar kolay değildi. Site, o siteye nereden geldiğimizi değiştirmemizi söylüyordu. Bunu kaynak kod üzerinden yapmanın bir yolunu bulamadım. (Belki de mümkündür.)
HTML Referrer’larımı düzenleyebileceğim sistemler aramaya başladım. Harici bir program kullanmam gerekiyordu.
Firefox uzantılarından bir çoğunu denedim.
Sonunda başardım.
İlk defa harici bir yazılım kullanmam gerekti. Muhtemelen son olmayacaktı.
Şifrelerden birinin çerezlerde olacağından emindim ve her seferinde üşenmeyip bakıyordum.
Tahminim “Value” kısmında şifreyi görmekti ama yeni yüklenen bir çerez “loggedin” dikkatimi çekti.
Loggedin’in değerini değiştirmek için bir Cookie Editor yazılımı indirdim.
Loggedin’i true yaptığımda bölüm geçilmişti.
Açıkçası yapacak çok bir şey yoktu. Bir şifre olduğunu biliyorduk ve elimizde sadece includes/secret.inc directory’si vardı.
URL’nin sonuna ekleyerek girdim.
İncele sekmem açık olduğu için direkt karşıma şifre çıktı.
Kolay bir bölümdü.
Bu sefer karşımıza Home ve About sayfaları çıktı. Sayfalara tıkladığımızda URL’deki değişimleri görebiliyorduk.
CTF’nin daha ilk sayfasında tüm şifrelerin /etc/natas_webpass/natas(X) directory’sinde saklandığını gördük.
Pek inanmayarak da olsa page=’den sonrasına yukarıdaki diretory’i ekledim.
İçerideyiz.
Şifrelenmiş bir mesaj var. Aşağıda ise şifrelenmenin nasıl gerçekleşeceği.
Önce binary’den hex’ dönüştürülmüş. Ters çevrilmiş ve ardından base64 ile şifrelenmiş.
Bu şifreyi kırmak için internet sitelerinden de faydalanılabilirdi ama daha iyi öğrenmek için PHP komutlarını inceledim.
Uzun süre başarısız oldum. Başarısız olurken en azından PHP hakkında ufak birkaç şey öğrendim.
php -a
echo base64_decode(strrev(hex2bin('sifre')))
PHP kullanarak tek komut satırıyla birlikte tüm şifreleme metodlarını kırarak, sonuca ulaştım.
Her zaman duyduğum ve zaman zaman gördüğüm injection’lar hakkında hoş bir pratik oldu.
Boş arama yapıp sonuçları bulmayı biliyordum. Biraz inceledim bir şey bulamadım.
Grep komutunun seçili dosyadan key’e uyan cevapları karşımıza çıkardığını buldum.
Kodun, girdiğimiz Key’i herhangi bir filtreden geçirmeden uyguladığını buldum. Bundan sonrası girdiğimiz “key’i” yeterince manipüle ederek bize istediğimiz şeyleri göstermesini sağlamaktı.
Önce bazı kelimeleri çıkartmayı düşündüm. Hatta kendim bir dictionary indirip onunla karşılaştırıp aynı olanları silmeyi düşündüm.
Bunu yapmak yerine “ ” şeklinde boş bir arama komutu gönderek tüm cevaplara ulaştım.
Cevaplarda anlamsız bir kelime ya da cümle yoktu.
Biraz daha araştırdıktan sonra “key; ls” gibi komutlarla ana bilgisayara komut verebileceğimizi öğrendim.
Burada kilit noktası “;” idi.
Girilen tek bir satır komut ile birden fazla komut işletebiliyorduk.
Ls komutu kullanarak bilgisayarda gezdim.
Şifrelerin saklandığı directory'i zaten biliyordum. Sonuca ulaştım.
Onuncu bölümü geçmek o kadar zor değildi. Lakin Natas11'e geçtiğim an afalladım. Çözümlerine baktım. Videoları izledim. Hiçbir şey anlamadım. Açıkçası hala anlayabilmiş değilim. PHP öğrenme kararı aldım.
Bir süre sonra görüşürüz.