Hacettepe CTF

Bu dönem Farabi programı ile Hacettepe Üniversitesinde öğrenim görmekteyim. Haliyle Hacettepe'de okuyan arkadaşım Mehmet Can'ın gazıyla, bölümde siber güvenlik eğitimleri veriyoruz. Haftada bir veya iki gün olan bu eğitimlerde, tersine mühendislikten forensic'e, linux'tan web güvenliğine kadar çeşitli konulardan bahsetmeye çalışıyoruz. Geçen haftalarda çeşitli yoğunluklardan dolayı bu eğitimleri yapamadık. Ben de eğitime gelen arkadaşlar hem öğrendiklerini pekiştirsin, hem de ilgili haftayı boş geçmesinler diye çok hafif bir CTF hazırladım. Yarışmaya ilgi beklediğimden çok çok fazla oldu. Aşağıdaki resimden bu anlaşılabilir.

Hacettepe CTF stats

Yarışma içeriği siber güvenlik ile yeni tanışanlar için hazırlandı. Yani gerçek bir CTF soruları kadar zor değil. Ancak konsept olarak gerçek bir CTF gibi diyebilirim. Zaten gösterilen ilgi de bunu kanıtladı. Günlerce uyumayan arkadaşlar oldu. Tanıdığım, tanımadığım birçok insan şu soru çok güzeldi, şunu çok beğendik, şöyle olsa daha iyi oludu gibi geri bildirimlerde bulundu. Haliyle ben de çok mutlu oldum. Daha sonraları da, soruların çözümlerini benden istediler. Bu yazıyı yazma sebebim de soruların çözümlerini göstermektir. Çok fazla uzatmadan direk soruların çözümlerine geçiyorum.

Hacettepe CTF challenges

Yukarıdaki resim kategorilerde yer alan soruların puan dağılımlarını göstermektedir. WEB kategorisini saymazsak, gerçek bir CTF'den kategori olan eksiği yok. Hatta fazlası bile var diyebilirim.

Forensic 100

Dosyayı indirip, türünü file programıyla kontrol ediyoruz. png formatında bir resim olduğunu anladıktan sonra herhangi bir resim açma programı ile açtığımızda karşımıza octosec logosu çıkmaktadır. Haliyle bayrak görülebilir yerlerin dışında bir yere saklanmıştır. Akla gelenlerden birisi steghide veya outguess gibi sorular ile içerisine verinin şifrelenerek saklanmasıdır. Ancak sorunun kategorisi forensic olduğu için daha basit düşünmemiz gerekiyor. exiftool ile dosyanın exif bilgilerine baktığımızda comment sekmesinde bayrağın saklanmış olduğunu görebiliriz.

Hacettepe CTF Forensic 100

Forensic 200

Forensic sorularının vazgeçilmezi file uygulamamız ile, indirdiğimiz dosyanın türünü belirliyoruz. Bu sefer dosyanın bir tar olduğunu öğreniyoruz. Bu arşivi tar xvf 9 şeklinde bir komut ile dizine çıkarabiliriz. Aşağıdaki resim yapılan işlemleri göstermektedir. Çıktı biraz büyük olduğu için sadece bir kısmı gösterilmiştir.

Hacettepe CTF Forensic 200 1

Ortaya çıkan klasör içerisine girdiğimizde, bu dizinin bir git deposu olduğunu, .git klasörünün varlığından rahatlıkla görebiliriz. Bir git deposu içerisinde olduğumuz için, git status ile bu depoda olan bitene bakalım. Bu çıktı içerisinde deleted yazan bir flag.txt olduğunu görebiliriz. Şimdi de git checkout -- flag.txt yaparak, bu silinmiş dosyayı geri döndürelim. Son olarak da dizinde ortaya çıkan flag.txt içeriğini okuyabiliriz.

Hacettepe CTF Forensic 200 2

Forensic 300

Bir önceki forensic sorularında yaptığımız gibi, gene bir file programıyla dosyanın türünü belirlemeye çalışıyoruz. file programı bize bu dosyanın bir resim olduğunu söylüyor. Ancak resimi açtığımızda, bayrak ile ilgili herhangi bir bilgi olmadığı görülebilir. Kategorimiz forensic olduğu için exiftool aracıyla exif bilgilerine bakıyoruz. Ancak burada da kayda değer bir şey olmadığını görebiliriz. Son olarak da bir diğer forensic programımız olan binwalk ile içerisine bakıyoruz. Bu sefer bu dosyanın bir resimden çok daha fazla şeye sahip olduğunu görebiliyoruz. Kolaylık olsun diye 54199 byte offsetten dosyanın sonuna kadar olan kısmı çıkarıyoruz. binwalk bize burada tar dosyası olduğunu söylüyordu. Biz de bunu file ile tekrardan kontrol ediyoruz. Daha sonra da bir dizine çıkarıyoruz ve içerisinden çıkan metin dosyasını okuyoruz. flagx dosyasından çıkan bayrak aradığımız bayrak değil. İsminden de anlaşılacağı gibi başka şeylere de bakmalıyız.

Hacettepe CTF Forensic 300 1

Gözümüze bu sefer 53969 byte offsetten 230 byte uzunluğundaki şifreli zip dosyasını kestiriyoruz. Buradaki uzunluğu zip dosyasının bitişinden başlangıcı arasındaki farkı alarak bulduk. Bu sefer çıkardığımız zip dosyasını unzip ile açmaya çalıştığımızda bizden bir şifre bekliyor. Yarışmayı çok fazla zorlaştırmak istemediğimden, şifre ilk denemede bulunacak türdendi. 123456 olarak denediğimizde bayrağa ulaşabilirdik. binwalk çıktısında yer alan diğer zip dosyasını da açsaydık içerisinden yanlış bir bayrak değerine ulaşacaktık.

Hacettepe CTF Forensic 300 2

Forensic 1000

Geldik benim en çok sevdiğim soruya. Bu soru 1000 puan olmasından dolayı herkes tarafından çok uğraşıldı. Aslında puanına göre gayet kolay bir soru oldu diyebilirim. Verilen ipucunu dikkatlice okuyan ve farklı düşünen birisi rahatlıkla soruyu çözebilirdi. Herşeye rağmen en çok beğenilen sorunun bu olduğunu rahatlıkla söyleyebilirim.

Hacettepe CTF Forensic 1000

Sorunun çözümüne gelirsek, verilen linke girildiğinde bizi javascript ile çalışan bir Linux beklemekteydi. Sorunun ipucunda dosya listelemeyi öğrenmelisiniz denilmekteydi. Çoğu arkadaş bir dizin içerisine veriyi sakladığımı düşündü. Ancak cevap çok daha kolay bir yerde, ls içerisindeydi. ls --help yaptığımızda bize bayrağı base64 olarak verecekti. Bayrak FLAG_{oha_lan_bu_ne} olacaktı. Umarım soruyu uğraşan herkes beğenmiştir.

Stego 100

Bu soru stego kategorisinde en çok karşılaşılan sorulardan birisidir. Beyaz zemin içerisine beyaza çok yakın bir renk ile gizlenmiş olan bayrağı, kontrast ayarlarında değişiklik yaparak elde edebiliyoruz. Bu iş için gimp kullanabilirsiniz.

Hacettepe CTF Stego 100

Stego 400

Sorunun adında steghide geçtiği ve bize bir adet resim verildiği için başka bir şeye bakmaya gerek yok. steghide kullanarak içerisinden bayrağı rahatlıkla çıkarabiliriz. Çıkarırken bizden bir adet şifre isteyecektir. Bu şifreyi ister rockyou gibi wordlistler ile kıralım, istersek de elimizle deneyelim rahatlıkla bulabiliriz. Şifre 1234 olacaktı. İçerisinden de flag.txt çıkacaktır.

Hacettepe CTF Stego 400

Stego 500

Bu soru yarışma içerisinde en az çözülen soru oldu. Sebebi muhtemelen outguess programının çeşitli sıkıntılar ile dolu olması. Aynı zamanda kali ile birlikte default kurulu gelmemesi. Bunların dışında en az bir önceki kadar kolay bir soruydu. Açma şifresi de bu sefer easy olmuştu. rockyou kullanılarak rahatlıkla kırılabilirdi.

Hacettepe CTF Stego 500

Stego 600

Yarışma içerisinde sevdiğim sorulardan birisi de buydu. Amaç büyük bir matrix ascii art'ı içerisine saklanmış bayrağı çıkartmaktı. Tabi gerçekten bayrağın bu dosya içerisinde olduğundan emin olmak lazımdı. Çünkü çoğu kişi matrix ile ilgili kelimelerden bayrak denemesi yaptı. Aşağıdaki gibi bir python kodu kullanarak bayrağı rahatlıkla çıkarabilirdik. Program yazmadan da çözenler oldu. Zaten biraz dikkatli bakılsa bayrak gözüküyordu.

Hacettepe CTF Stego 600 1

Hacettepe CTF Stego 600 2

Stego 700

Bu soru puanına göre zorluk olarak diğerlerinden çok daha kolaydı diyebilirim. Aşağıdaki gibi bir resim verilmişti ve bayrağın bulunması isteniyordu. Mors alfabesini tanıyan kişiler elleri ile rahatlıkla bu soruyu çözebilirdi.

Hacettepe CTF Stego 700

Resimden ..-. .-.. .- --. -.- . -... .- .--. -.-. - ..-. bilgisini çıkardığınızda ve çözdüğünüzde FLAGKEBAPCTF şeklinde bir çözüme ulaşacaktınız. Daha sonra çıkan bu değeri formata uygun girdiğinizde 700 puan sizin olacaktı.

Misc 50

Bu soruda bize flag is angara ipucusu verilmişti. Verilen ipucu yanlış değidi ve bayrak angara olacaktı.

Misc 75

Bu soruda bizden dünya'nın en iyi bateristi soruluyordu. Kim ne derse desin en iyisi Joey Jordison :)

Misc 100

Bu soruda bizden GNU projesinde yazılan uygulamaların genel adı sorulmuştu. Cevap coreutils olacaktı.

Misc 200

Bu soruda bizden özgür yazılım hareketinin arkasındaki vakıf sorulmuştu. Cevap fsf olacaktı.

Misc 300

Bu soruda bizden güvenlik uzmanları için özel olarak geliştirilmiş Arch tabanlı dağıtım sorulmuştu. Cevap blackarch olacaktı.

Misc 500

Bu soru biraz daha forensic+stego karışımı olduğu için bu kategoride yer almaktaydı. Ekranı biraz aşağıya doğru yatırıp veya gimp ile üzerinde kontrast değiştirerek qr code ulaştıktan sonra cep telefonunda yer alan herhangi bir qr code okuyucu ile bayrak ulaşılabilirdi. Bayrak FLAG_{yes_it_is_a_book_there_is_a_ctf_in_the_angara} olacaktı.

Misc 600

Bu soruda insanlar biraz kağıt kaleme sarıldı diyebilirim. Çok fazla uğraşılsa da diğerlerine nazaran çok kolay bir şekilde çözülebilirdi. Python bu konuda da bizi yalnız bırakmıyor. Çözümü aşağıdaki gibi yapabilirdik.

Hacettepe CTF Misc 600

Theory 100

Bu soruda bize dosyaları magic header bilgisinden tanıyan programın adı sorulmaktaydı. Cevap file olacaktı.

Theory 200

Bu soruda bize Linux altında çalıştırılabilir dosyaların formatı sorulmaktaydı. Cevap ELF olacaktı.

Theory 300

Bu soruda bize GNU/Linux işletim sisteminin disassembler programı sorulmaktaydı. Cevap objdump olacaktı.

Theory 400

Bu soruda bize GNU/Linux işletim sisteminin debugger programı sorulmaktaydı. Cevap gdb olacaktı.

Theory 500

Bu soruda bize Windows işletim sisteminde çalışan bir disassembler programı sorulmaktaydı. Cevap ida olacaktı.

Theory 600

Bu soruda bize GNU/Linux işletim sisteminde kernel sistem çağrı numarası sorulmaktaydı. Cevap 0x80 olacaktı.

Binary 100

Bu soruda verilen binary dosyanın türünü file ile belirlediğimizde tar çıkacaktı. Daha sonra bunu tar xvf 1 şeklinde açtığımızda içerisinde 1 isminde okunabilir bir dosya çıkacaktı. İçeriğinde HACETTEPE_{bunlar_daha_cok_kolay} bayrağı yer almaktaydı.

Binary 200

Bu soru bir öncekine çok benzerdi. Tek fark üstüne bir de gzip ile sıkıştırma yapılmasıydı. Cevap HACETTEPE_{vuhuu_akiyorum_ben_ya} olacaktı.

Binary 300

Bu soru aslında konsol kullanıcılarını çıldırtacak şekilde ayarlanmıştı. Ancak çoğu kişi GUI kullandığı için, rahatlıkla çözülmüş oldu. Verilen dosyanın türünü file ile belirledikten sonra, zip dosyası olduğunu görebiliriz. unzip ile açtığımızda adı boşluk olan bir program ortaya çıkacaktı. Bunu okursak içerisinden bayrağa erişebilirdik.

Hacettepe CTF Binary 300

Binary 400

Bu soru ipucu verilene kadar çözülmemişti. Zaten ben de çözülmesini pek beklemiyordum. Amacım sadece insanları yarışmaya çekmek ve farklı şeyleri düşündürmeye devam etmekti. Yarışmanın sonlarına doğru ipucu verdim ve geri kalan herkes çözdü. Soru da random byte dizisi içerisinde bayrak saklanmıştı. Ancak bu bayrak strings benzeri programlar ile ortaya çıkmamaktaydı. Çünkü yatay yerine dikey konuşlandırılmıştı. Uygun offset değerinden sonra dikey olarak bakılırsa bayrak rahatlıkla ortaya çıkacaktı.

Hacettepe CTF Binary 400

Binary 500

Bu soruda da ipucu çözüm için yeterliydi. Sorunun başlığı reverse me olduğundan bize verilen byte dizisini ters çevirip, tekrardan binary dosya haline getirdiğimizde bizi bir resim karşılayacaktı. Bu resim de ters dönmüş halde olmasına rağmen okunabilir durumdaydı ve doğrudan bayrağa erişilebilirdi.

Hacettepe CTF Binary 500

Crypto 100

Sorunun başlığında brutus yazdığı ve kategori crypto olduğu için hemen akla sezar şifrelemesi gelmeliydi. Çözümü de python kullanarak aşağıdaki gibi yapılabilirdi.

Hacettepe CTF Crypto 100

Crypto 200

Bu soruda bize kırmak için ntlm hash değeri verilmişti. Ancak değeri google'da arattığımızda cevaba rahatlıkla erişebilirdik.

Hacettepe CTF Crypto 200

Crypto 300

Bu soruda bize vigenere şifrelemesi kullanılmış bir metin verilmişti. Key değerini çeşitli tahminler yaparak veya online analiz programlarını kullanarak kırabilirdik. Key angara olarak ayarlanmıştı.

Hacettepe CTF Crypto 300

Crypto 400

Bu soru basit bir base64 sorusuydu. Ancak biraz sabır beklemekteydi. Verilen değeri sürekli decode ederek sonuca ulaşabiliyorduk. Bu amaç için online araçlar kullanılabilir. Her bir decode işleminden sonra yeni bir base64 değeri gelmekteydi. Gayet kolay bir soruydu.

Hacettepe CTF Crypto 400

Reverse 100

Tersine mühendisliğin ilk sorusu, olabilecek en kolay olanıydı. strings aracı ile içerisine baktığımızda gayet kolay bir şekilde bayrağa ulaşabiliyorduk.

Hacettepe CTF Reverse 100

Reverse 200

Bu soru reverse kategorisi için kolay bir soru olsa da çoğu insan yapmakta zorlandı. Tersine mühendisliğin en kolay problemleri bile bilmeyenler için çok zorlayıcı olabiliyor. Sorunun çözümü için önce herhangi bir disassembler yardımıyla kodu anlamaya bakalım. Ben soruyu zorlaştırmamak için ELF dosyalarını strip etmeden verdim. Gerçek bir yarışmada strip edilmeden verilen herhangi bir dosya şimdiye kadar hatırlamıyorum. Buna da dikkat etmek lazım.

Hacettepe CTF Reverse 200 1

Kullanıcıdan girilen değerin harika_fonksiyon isimli fonksiyon içerisinde karşılaştırma yapıp, sonuca göre ekrana yazılar basılmakta olduğunu rahatlıkla çıkardık. Bundan sonra harika_fonksiyon içerisine bakıp, karşılaştırma yapılan değeri bulmamız gerekiyor.

Hacettepe CTF Reverse 200 2

harika_fonksiyon içerisinde yukarıdaki resimde de gözüken bu_degeri_bulmayin_ya isimli bir dizi olduğu görülmektedir. Bu dizinin içerisindeki değerlere baktığımızda, bayrağın ascii değerlerinin saklanmış olduğu rahatlıkla görülebilir. İster bu değerleri alıp python ile yeniden oluşturalım istersek de IDA bize bunu doğrudan oluştursun, bayrağa ulaşmak hiç zor değildi.

Hacettepe CTF Reverse 200 3

Reverse 300

Bu soru da yarışma içerisinde en az çözülen sorulardan birisi. disassembly işlemi ile doğrudan çözmek yerine debug ederek rahatlıkla çözülebilirdi. Programı en başta çalıştırdığımızda aşağıdaki gibi bir çıktı oluşturmakta. Bizden bir değer bekliyor ve bunu içerisinde çeşitli karşılaştırmalara tabi tutuyor.

Hacettepe CTF Reverse 300 1

Uygulamayı gdb ile açtığımızda ve main fonksiyonunu disassembly ettiğimizde fantastik_fonksiyon isminde bir fonksiyon olduğunu görebiliriz.

Hacettepe CTF Reverse 300 2

Bu fonksiyon içerisinde 0x8049900 adresinde bir dizinin tutulduğunu rahatlıkla görebiliriz. Aynı şekilde bu dizideki her elemanın 0xC ile xor işlemine tabi tutulduğunu da bu fonksiyondan anlayabiliriz.

Hacettepe CTF Reverse 300 3

Şimdi adres içerisinde tutulan değerleri alalım ve python ile yeniden oluşturalım.

Hacettepe CTF Reverse 300 4

Bayrağa aşağıdaki gibi bir python kodu ile rahatlıkla ulaşabiliriz.

Hacettepe CTF Reverse 300 5

Sonuç

Amacım aslında sadece derse gelen kişilerin, evde tekrarını yapmasını sağlamaktı. Ancak ilginin bu kadar fazla olması beni sevindirdi. Çok fazla kişinin katılacağını tahmin etseydim daha zor sorular hazırlardım :) Ancak amacım ders tekrarı olduğu için artık bir sonraki sefere. Umarım katılan herkes eğlenmiş ve bilgilenmiştir. Her türlü tepkinizi bana iletirseniz sevinirim. Bu arada 2 hafta açık kalan sisteme 100.000 çoğul hit geldiğini de söylemek isterim :)

Sorulara buradan ulaşabilirsiniz.

comments powered by Disqus