Merhaba arkadaşlar,
4 gün süren CTF'in sonunda ilk sırada yer almayı başardık nihayet. Scoreboard: http://www.hackingwars.online/scoreboard/ #MervelereDiyeVermelere
Tamam kabul ediyorum grup ismimiz biraz anormaldi :)
CTF ekibimiz gerçekten iyidi, hepsi tanıdığım kişilerdi fakat daha önce hiç beraber CTF'e katılmamıştım.Takımda kilit isim olarak gördüğüm Ata'ya özellikle teşekkür etmek istiyorum.
1. olarak bitirdiğimiz @hackingwars 'tan sonra finallerimden kalmaya devam edeyim bari.— Dr. Ahmet Oruç (@0r1gamic) 27 Aralık 2016
Bir yandan finallerle uğraşıp bir yandan da CTF çözmeye çalıştım 4 gün boyunca.Üstte ki twitim bütün olayın özeti aslında.Benim için eğlenceliydi herşeye rağmen, çözebildiğim soruları da aşağıda açıklamaya çalıştım.
Bu soruyu daha farklı çözen var mı bilmiyorum ama biraz uzun bir yoldan çözmüş olabilirim.Sonradan birkaç farklı yöntem daha geldi çünkü aklıma.Soruda sadece bi APK dosyası verilmiş ve flag isteniyordu.
Uygulamayı ilk çalıştırdığımız da karşımıza çıkan ekranda bir isim ve soyisim istiyor.Kimin adı, soyadı olduğunu bulabilmek için APK'yı .jar formatına çevirip kodları okumaya başladım. 4 tane class vardı zaten, kodları okuyarak devam edince en son sizi Display.class'ına yönlendiriyor.Yani girilen değer doğru ise Display.class'ında ki layout çalışıyor.İçerisinde bir TextView bir de ImageView açılıyor.TextView'ın içinde ki değer; eğer şifreyi doğru girerseniz b.class'ında "flag" keyi ile extra olarak gömülüyor.Geçen sene bir Hackathon'da Java ile Android yazmam gerektiğinde öğrenmiştim bu "extra" olayını :) ImageView'ın içine de bir Bitmap yerleştiriyor.Bu bitmap'i de "l" isimli bir değişkende tutuyor.Değişken de bariz bir şekilde ortada zaten.Ben de boş bir Android projesi açıp değerleri yerleştirdim sadece ve çalıştırdım.
Çıkan resimi de images.google.com'da aratıp kim olduğunu buldum. Pablo Neruda isimli Şilili bir şairmiş.Dikkatimi çekince biraz okudum Nazım Hikmet hayranıymış kendileri.Kültürüme kültür kattım yine bir teknik soruda :)
Uygulamaya da "pablo.neruda" şeklinde giriş yapınca flag ekranda beliriyordu zaten.
Bu soruya 2 kere update geldi.İlk update'i yaklaşık 1 saat sonra falan fark ettim, 2. update'i yakın takipteydim o yüzden ilk çözüp bonus alabilme imkanı yakaladık.Sorunun kendisine gelirsek yine bir APK dosyası ve istenen bir flag söz konusu :)
Uygulamayı ilk çalıştırdığınız da ekranda sadece bir Generate butonu var ve her tıklamada One-Time-Password döndürüyor.Soruya da "Find the 666666th OTP" yazılmış.İlk olarak klasik adımlar; .jar formatına çevirip kodları okudum.Shared Preference kullandığını farkedince ADB ile bağlanıp "shared_prefs" klasörüne baktım.Counter orda duruyodu bir XML dosyası içinde.Değeri değiştirip tekrar Generate'e tıkladım değer kaldığı yerden devam etti.Acaba bir yerde cache'liyor ya da databese'te mi tutuyor diye kodlarına tekrar baktım.Tek yakalayabildiğim detay, uygulama OnCreate edildiği anda shared_prefs'te ki dosyaya bakıyor counter varsa onu alıyor yoksa kendisi oluşturuyor.Ben de uygulamayı silip yeniden yükledim ama çalıştırmadım."shared_prefs" klasörünü kendim oluşturdum eski XML dosyasını da değiştirip yerleştirdim.Program ilk açıldığında orda ki counter'ı aldı ve ordan devam etmeye başladı.Tek tıklama ile flag'e ulaştım.
Buna en büyük şahidim Ata'dır herhalde soru yaklaşık 1.5 günümü aldı apk hatalı olduğu için.Bir ara gerçekten umudum kalmadı.Denediğim yolları burada yazsam herhalde bütün Mobile camiası üzerime gelir :)
2.günün sonlarına doğru yorulmuştum ve bu soru gerçekten çok iyi geldi :)
Soruda verilen apk'yı çalıştırdığımızda adından da belli olduğu gibi 2048 oyunu açıldı.Gerçekten biraz oyun oynamaya ve dinlenmeye ihtiyacım olduğunu düşünerek yaklaşık 1 saat oyunu oynadım boş boş.Acaba ne olabilir ki diye .jar formatına çevirip kodlara bakıyorum bir sürü package ve kod var. Baktım olacak gibi değil apktool ile decompile edip manifest'e baktım.Neredeyse bütün izinleri istiyor uygulama.Bu izinleri uygulamayı kurarken nasıl farketmedin diyenler için, Genymotion apk'yı drag/drop yaptığınız anda otomotik olarak kuruyor.O yüzden istediği izinleri falan görmüyorsunuz bile.
Bu kadar izini en son metasploit ile Android Payload oluşturduğum da görmüştüm.O yüzden ilk aklıma gelen şey, zararlı yazılım olduğuydu.Dikkat çekmesin diye de bir oyun ile birleştirilmiş sadece.Wireshark ile uygulamayı dinledim, class'lara biraz daha dikkatli baktım ve gereken şey karşıma çıktı zaten.
2048gamer.com domainine 8080 portu üzerinden TCP isteği yolluyordu.İlk başta 2048gamer.com domainini kendi local adresime yönlendirip 8080 portunu dinledim, birşey çıkmadı.Sonra da acaba karşı da hangi service var diye nmap taraması attım.Klasik nmap taramasına cevap vermiyor, arka da firewall var muhtemelen.Sonuçta AWS :)
-P0 parametresi ile gönderdim isteği, sadece 22(ssh) ve 2048(dls-tam_hatırlamıyorum) portları açıktı.2048 portunda web servis vardı, zaten girince de ekranda flag beliriyor direk.
Web'e diğer arkadaşlar bakıyor diye uğraşmadım hiç ilk başlarda.Mobile sorular ile uğraşırken başka bir şey ile ilgileneyim kafa dağıtırım diye atladım soruya.Bunda da bir web sitesi verilmiş ve flag'i bulmamız isteniyordu.
Murat sitede /.git/ dizini bulmuş.Git reposu vardı içinde.Onu indirip biraz inceledim.Kodları nereye push ettiğine baktım.Github'a push ediyormuş, girip repodaki commitlere baktım.14 committen ilk dikkatimi çeken commite baktım: "fixing mistake oops".Bariz orta da duruyordu flag, flag.txt dosyasındaymış ve dosya silinmiş.Kör atış yaptım ama ilk committe buldum flag'i.
1.lik ile tamamladığımız güzel bir CTF'ti, hazırlayan ve destekleyenlerin eline sağlık.
Kolay gelsin..