MdiseCTF 0x01 – BGA Powerbank Ödüllü CTF Kazananları

Merhaba

Geçtiğimiz cuma günü başlayan ve pazar günü saat 23:59’da son bulan ödüllü CTF serilerimizden ilki olan 0x01‘ib  çözümlerini ele alacağız. Tüm level’larda kullanılan source code’lara https://github.com/mmetince/mdisectf adresinden erişebilirsiniz.Buyrun bu kısa ve eğlenceli CTF’in çözümlerine bakalım.

Çözümler

Yarışma sizlere verilen bir adet cipher-text metin ile başlamaktayı. Bu metni aşağıda ki şekilde tekrar paylaşıyoruz.

Bir çok yarışmacı – işaretlerinin boşluk, cipher algoritması olarakta Caesar Cipher ‘ı düşünerek hareket etti. İlk düşünce olan – işaretinin boşlukları ifade ediyor olması doğru bir yaklaşım olsa da, algoritma malesef Caesar Cipher değil, benim hazırladığım basit bir  Mono Alphabetic Substitution Cipher.

Mono Alphabetic Substitution Cipher algoritmalarının iki adet problemi vardır.

  1. Cipher-text ile Plain-text aynı uzunluktadır.
  2. Her karakter sadece ve sadece bir adet başka karaktere ihtiva etmektedir.

Yani demem odur ki, cipher-text üzerinden plain-text’in uzunluğuna ulaşılabilmektedir. Ve ayrıca metnin herhangi bir yerinde A karakteri E ile ifade edildiysen, bu tüm cipher-text için geçerlidir.

Bu iki zafiyeti kullanarak Frekans Analizi gerçekleştirebiliriz. Bunun için de öncelikle plain-text metnin hangi dil olduğuna karar vermeliyiz. Plain-text’i analiz ettiğimizde fark ettiğimiz şu olacaktır ki, herhangi bir Türkçe karakter yoktur. Tüm metin latin alfebesinde ki karakterlerden oluşmaktadır. Bu şu anlama gelir ki, ya plain-text’de aynı cipher-text gibi hiçbir Türkçe karakter içermiyor, ya da plain-text İngilizce’dir.

Online – Offline Mono Alphabetic Subs. DeCipher

Bu kararı verdikten sonra hem online hemde offline kaynakları kullanarak deşifreleme işlemi gerçekleştirilebilirdi. Bu noktada online kaynak olarak http://quipqiup.com , offline kaynak olarak ise SCBSolver yazılımı kullanılabilirdi.

Sizin için yazılmış bu şiirde her 4’lükte ki son satıra baktığınızda aşağıdaki özel dörtlük oluşmaktadır.

Yani, 80.240.142.122 böylece ilk aşama tamamlanmış oldu.

cPickle

Bir önceki adımda elde edilen 80.240.142.122 adresine full port scan gerçekleştirdiğimizde 22 ve 1337 tcp portlarının açık olduğu bilgisine erişilmekteydi.

Bu porta nc ile bağlanıp dummy datalar gönderdiğimizde önce base64 hatası, sonrada cPickle UnpicklingError hatası alınmakta. Bu noktada cPickle’ı araştıran arkadaşların https://www.mehmetince.net/python-pickle-ile-remote-code-execution/ adresinde ki unserialization zafiyetini okumaları, öğrenmeleri ve hedef sistemi doğrudan exploit etmeleri beklenmekteydi.

Flag.txt dosyasını okuyup 127.0.0.1’in 4444 portuna gönder diyerek doğrudan flag elde edilebilirdi. Tabiki burada 127.0.0.1 yerine kendi ip adresiniz yazılmalıdır.

Değerlendirme Süreci ve Başvuranlar

Değerlendirme süreci şu şekilde olmakta.

  1. Sadece ve sadece tam/doğru çözümü gönderen kişiler seçilir.
  2. Çözümü ilk gönderen kişi 100 puan, ikinci gönderen kişi 95 puan şeklinde azalan değerler çözüm gönderen yarışmacılara sırasıyla verilir. En son ise 70 sabitlenecektir. Bu değer T ile ifade edilir.
  3. Yazılan raporlara değerlendirme ekibi tarafından 100 üzerinden puan verilir. Bu değer R ile ifade edilir.
  4. T değerinin %25,  R değerlerinin %30’u alınır.
  5. Her katılımcı için 0-20 arasından random seçilen değerin %50’si alınır.
  6. Bu üç değer toplanır ve
  7. En yüksek puanı alan yarışmayı kazanır.

Kazanan Kişi

Algoritmamızı uyarlayan ufak bir python kodu..!

Bu sonuçlara göre;

Kazanan kişi = Robin Daimyanoglu

Yarışmaya katılan herkese, en çokta yarışma ödülünü veren Ozan Uçar ve BGA ailesine teşekkür ederim. Bu tür ciddi katılım oranlarını görmek daha fazla ve “farklı” türde CTF’leri hazırlamak adına doğru motivasyonu bulmamı sağlamakta.