"Enter"a basıp içeriğe geçin

Siber Yıldız (CTF 2020) Soru Çözümleri

Merhaba Arkadaşlar,

“Bu sene 3.sü düzenlenen Siber Yıldız CTF yarışması 26.12.2020 20:00 itibariyle bitti. Yine kendimi test etmek amacıyla katıldığım yarışmada 15 sorudan 13ünü yapabildim ? zaman zaman yarışma boyunca ilk 2’e girmeme rağmen yarışmayı 5. olarak bitirdim. Bende bu sefer indirilebilir soruları sakladım ve github’a attım. isteyen arkadaşlar çözmek isterlerse https://github.com/lodos2005/SiberYildiz2020/ Adresinden soruları indirip kendileride deneyebilirler. İlerleyen günlerde çözümünü öğrendikten sonra çözemediğim sorularında cevaplarını paylaşacağım. Hadi o zaman sorulara geçelim.” 🙂 Bu sözleri önceki yarışma çözümünü anlattığım siber yıldız 2019 çözümü yazıdan kopyaladım ve düzenledim.

Bu senenin diğer senelerden farkı; daha önce siber güvenlik dünyasına hobi olarak bakıyordum fakat bu sene pandeminin en iyi yanı olarak Mehmet Dursun İnce‘nin başlatmış olduğu twitch eğitim serisi sayesinde biraz daha içli dışlı oldum. Bu oluşumun en iyi kanıtı önceki sene 25. olurken bu sene 5. olmam gösterilebilir. Lafı fazla uzatmadan sorulara, çözümlere ve sorulara karşı bakış açımı anlatmaya başlayalım.

Soruların dosyalarını Github hesabımda paylaştım. Kendilerini test etmek isteyenler bu repoya göz atabilirler.

Soru 1: Büyük Düşün

Soruya girdiğimizde bizi boşluklarla ayrılmış uzun bir yazı karşılıyordu. Soru adının bir ipucu olduğu her zaman bilinir bundan yola çıkarak büyük harfleri bir yere aldım. Daha sonra bu elimde olan karmaşık stringi biraz daha kurcalamam gerektiğini fark ettim. CTF’lerde en büyük yardımcımız olan CyberChef‘e attıktan sonra base32 ile encode edildiğini gördüm. Flag ise karşımdaydı.

Soru 2: Daha Dikkatli Bak

Bu resmi görünce çok hoşuma gitti. Çünkü 3 sene önce (Siber Yıldız 2017) yine bu resim paylaşılarak soru vardı. hemen bloğuma giderek bu yazıya baktım. Çözüm yine benzer idi. HTTP Header’ında bir ipucu vardı ve oyun oynamamız gerektiğini söylüyordu. Bu adrese gittiğimizde bombarman tarzı bir oyun vardı. Yine önceki bir ctf’de böyle bir oyun olduğunu anımsadım ama hangisi olduğu aklıma gelmedi. Ayrıca bir chrome eklentisi de verilmiş bu chrome eklentisi basit olarak kullanıcı adı ve parola alarak bi yere istek atıyordu. Ama ben cevabın javascript içinde olduğundan emindim önceki ctfler gibi yine aynısı olabileceği aklıma geldi ve javascript içlerini kurcalayıp gerekli kullanıcı adı ve parolayı buldum. Chrome eklentisine girdiğimde ise flag karşıma çıkmıştı.

Soru 3: Stilim Sensin

Bu soruda karmaşık bişiler vardı ama “\n” gördüğüm için alta indirmek gerektiğini biliyordum ve bunu yapınca karşımıza şöyle bir şekil çıkıyordu.

Cevap ise a ve b’nin md5 hash’ını alarak ulaşılıyordu. benim başta dümdüz yazarak değil 😀

Soru 4: Sisteme Saldırdılar, Biraz İnceleme Gerekiyor

Bize verilen bir PCAP dosyası vardı.(Bu dosyaya başta verdiğim github reposundan ulaşabilirsiniz.) Gerçekten bir hedefe saldırı olduğu açıktı ve içeride bir sürü http syn gibi paketler vardı. Biraz inceleme yaptığımda http paketlerinin otomatik bir tool(nmap vs) yapıldığını gördüm buradan 404 gibi cevaplar geliyordu. wireshark’da http.response.code==200 filtresini yazdığımda bakacağım 300 küsür paket kalmıştı. Bunların arasından bir tanesi ilgimi çekti(çünkü response’da url vardı, normal şartlarda bunun olmaması gerekiyor) ve bu adrese gittiğimde ise flag karşıma çıkmıştı.

Soru 5: Açıl Susam Açıl

Karşımızda dolandırıcı sitesi bariz olan bir web sayfası içinde 2 fotoğraf vardı. Bu fotoğraflara tıkladığımızda ise bir iletişim formu çıkıyordu. rasgele bilgilerle doldurduğumuzda ise siparişimizin iletildiğine dair bir sayfaya yönlendiriyordu. Burada inceleme yaptığımda formun bilgilerin POST data içinde olmadığı ve dönen cevapta ise arkaplan resminin bir “login” panelinden geldiği açıkça ortadaydı.

Bu adrese gittiğimizde karşımıza bir login paneli geliyordu. Bu kısımda biraz takıldım. ipucu bulmak adına anasayfadaki resimlere baktım bişi bulamadım. bu klasöre ve ana sayfada dizin taraması yaptığımızda login sayfası içinde “inc” klasörü olduğunu keşfettim. buraya yine bir tarama yaptığımızda ise “test.php” sayfası mevcuttu. Burada bir takım Access Log benzeri kayıtlar vardı.

Buradan anladığım kadarıyla 2 kullanıcı vardı “Yonetim” ve “Admin” bu kullanıcılara kaba kuvvet saldırısı uygulamaya karar verdim. Çok zor olmayacağını düşünerek basit bir parola listesi koydum ve daha ilk denemede “Admin” kullanıcısının parolasının “123123” olduğunu öğrendim 🙂 daha sonrasında ise FLAG karşımıza çıkıyordu.

Soru 6: Girişler Buradan

Belki de en çok takıldığım fakat en basit olan sorulardan biriydi. Karşımızda “id parametresi eksik” yazan bir sayfa ve girişlerin “login.php”‘den olduğu basit bir sayfa vardı. url’ye id parametresi ekleyip 1-2-3 diye gittiğimizde “BTK” ve “USOM” dönen 2 sonuç çıkıyordu. bunun arkasında bir veritabanı olduğu açıktı (Ayrıca yazı sonunda belirttiğim ipucu da bunu gösteriyordu). Manuel denemelerim ve biraz da sqlmap taraması yaptığımda sonuç çıkmamıştı. Diğer sorulara bakıp en son bu soruya tekrar döndüğümde sqlmap aracında mevcut bazı “tamper” parametrelerini kullandım. “chardoubleencode” ise çözüme ulaştıran tamper scripti oldu.

Aldığım kullanıcı adı ve parola ile sayfada belirttiği login adresine giderek flagı alabildim.

Soru 7: RCF20201453

Güzel bir prokotol tanım ve açıklama sayfası idi. bize ne yapmamız gerektiği çok açık bir dille ifade ediliyordu. Bahsettiğim MDISEC twitch kanalında Barkın Kılıç ile beraber yapılan eğitim serisinde buna benzer olayları python’un scapy kütüphanesini kullanarak yapmış idik. Biraz uğraştan sonra yapılan isteğe gelen FTP-Data paketi döndüğü ve bunun içinde flag’e ulaştıran sayfanın linki vardı. Kullandığım scapy kodları ile şöyle

from scapy.all import *

ip= IP(dst="85.111.95.19",ttl=64)
tcp = TCP(dport=5555, window=1212)

send(ip/tcp/"USOM")

Burada TTL değerimin sayfanın söylediği “55” değerinden fazla olduğunu görmüşünüzdür. Bunun sebebi benim modemimden başlayarak sunucuya kadar giderken TTL değeri her pop noktasında 1 azalarak gider. Bu yüzden önce traceroute ile sunucu ile aramda kaç pop noktası olduğunu sayarak 55’in üstüne eklemem gerekiyordu.

Soru 8: Olmaz Demeden Dinle Beni Bi’

Mobil kategorisinde olan bir soruydu. Öncelikle static analiz için apk’nın kodlarına baktım. tüm kod bloğunda “http” aratarak işe başladım bir kısımda “base64” encode edilmiş kısımlar ve parçalanmış stringler vardı. Tüm bunları birleştirince karşıma çıkan url beni flag’a götürdü.

Soru 9: Resmin İçini Görebilir Misin


Soru gayet netti. İndirdiğimiz listeden(Listeyi paylaştığım github reposunda bulabilirsiniz) ASCII değerlerini bulacağız ve burda en yüksek olanın ise “987654”‘inci kuvvetini alacağız. Basit bir python kodu ile bunu bulabilirdik.

with open('strings.txt','r') as str:
enbuyukstring = ''
enbuyuk= 0
for i in str:
deger = sum(map(ord, i.strip()))
if (deger > enbuyuk):
enbuyuk = deger
enbuyukstring = i.strip()
print(enbuyuk)
print(enbuyukstring)

buradan en büyük ascii değerinin 1139 olduğunu bulduk, peki 1139^987654 nasıl bulacağız? bunun hesaplaması çok zor olabileceğinden bilim ve matematikçilerin google’ı olan wolframalpha‘ya sordum. Buradan ilk 35 karakteri aldım. Sonra biraz durdum. eee napcaktık bunu? Soruya dönünce “bayrak resimde gizli” yazısı imdadıma yetişti resmi indirip stego toolarını çalıştırdım. parolayıda bulmuştuk. ve en sonunda flag’a giden yolu bize “kedicik” vermişti 🙂

Soru 10: Elektrikler Gitti

EKS sistemine saldırmışlar ve PCAP dosyasını vermişler. Bunu indirip wireshark ile bakında PLC sisteminin olduğu ve S7 ve MODBUS paketlerinin olduğunu gördüm. Lise’de Mekatronik (endüstriyel otomasyon) okuduğum için bu PLC SCADA ve Otomasyon sistemlerine haşinayım. Elektrik sistemlerinde de bunun kullanıldığını ve atağın bunlar üzerinde yapıldığını direkt olarak düşündüm. biraz incelediğimde FTP paketleri olduğu ve giriş denemesi yapıldığını ve “” ile giriş yapıldığını daha sonradan bir txt dosyasının indirildiğini bu dosyanın ise aşağıdaki python betiğini içerdiğini gördüm. Burada ***lı olarak bir “coils_bytes” istiyordu. MODBUS paketlerinde “write coils” adında bişi görmüştüm. herhangi bir MODBUS paketini datasını alıp ***’lı yere yapıştırınca “Yaklastin_Ama_Yanlis_Paket” yazısı ile karşılaştım. Diğer paketlerde aynı uzunluktaydı ama 1’i hariç 🙂 bu paketin datasını gerekli yere yazınca flag’i alabileceğim url’ye ulaşmıştım.

Soru 11: Uzat Uzatabildiğin Kadar

Sorunun kategorisi “Kriptoloji,Web” olması bir ipucuydu. Karşımıza gelen web sayfada 4 pdf’in indirileceği bir içerik mevcuttu 3 pdf’i indirebiliyorduk fakat 1 tanesi inmiyordu(4.pdf) ayrıca web sayfasında ” USOM icin yol onemlidir…. ” ibaresi vardı.
İlk olarak “directory traversal” olduğunu düşünerek bazı denemeler yaptım ama başarısız oldum. sonraında ise 3 pdf adı (1.pdf,2.pdf,3.pdf) ve 3 adet token vardı. Bu tokenlar nasıl üretilyor derken, aklıma şöyle bir senaryo geldi.
“files/1.pdf” gibi bir path olduğunu ve bu path’in md5 özetini alırsak verilen token ile eşleceğini ve bu yolla 4.pdf’i bulabileceğimi düşündüm. ipucu da bunu karşılıyordu. bunun için bazı python betikleri yazdım ama sonuç hüsrandı. Daha sonra Mehmet Dursun İnce’nin de bir twitch bölümünde anlattığı bir methodu denedim. “download.php?file=1.pdf&token=abb4861f0affcd32cebb65daab9c8795” sonuna tekrar file parametresi verirsek ve eğer download yapan ve token doğrulunu yapan kod blokları farklı parametreleri alırsa token doğrulamasını aşabilirdim bu yüzden “download.php?file=1.pdf&token=abb4861f0affcd32cebb65daab9c8795&file=4.pdf” yazdığımda dosyanın indiğini gördüm. !!!

Dipnot: Kriptoloji ile ne alakası vardı? yarışma sonrası bunu MDISEC discord kanalında tartıştığımızda soruyu farklı bir yoldan çözdüğümü anladım. aslında bu zafiyet https://en.wikipedia.org/wiki/Length_extension_attack şuradaki yolla çözülecekmiş.

Soru 12: Daha Geniş Bakmalısın

Çözemediğim tek web sorusu 🙁 yarışma sonrası konuşulduğuna göre arkada bir redis server çalışıyormuş. fakat port taraması yapmak hiç aklıma gelmemişti. (niyeeeeeee diye dedim kendime)

Soru 13: İçinden Geçeni Söyle

“Düğün ve Etkinlik Fotoğrafçısı” isminde bir websitesi bizi karşılıyordu ve iletişim formu vardı. bazı bilgiler ile doldurduğumuzda bize “bu xx adresiyle email yolladınız zaten” diyordu. !? farklı bir email adresi girdim yine aynı? burada işler yolunda gitmiyordu, yolladığım POST dataya baktığımda ise HELLO XXE diye bir yazı karşıma çıktı. ŞAKA ŞAKA 😀 ama xml gönderdiğimize göre burada XXE olmalı diye düşündüm hemen bir payload bulup yerleştirdim. Karşıma “kapı açık içeriden gel” diye bir mesaj karşıma çıkıyordu. Buradan da SSRF olduğu açıkca anlaşılıyordu. /etc/passwd okumak yerine http://127.0.0.1/ okumaya çalıştım ama karşıma “OPPS. yeniden gelmelisin diyordu” bu cookie’miz sonlandığında her soruda karşımıza çıkan bir uyarıydı. Acaba bu sayfanın statik mi dinamik mi geldiğini görmek için http://127.0.0.1/index.html yaptım. sonuç boş çıktı http://127.0.0.1/index.php yaptım ve one? “banlandın” diyordu. http://127.0.0.1/php.html yaptım. yine banlandın diyordu. Buradan şu anlam çıkıyordu. uzantıya değil php yazısının içerip içermediğine kızıyordu. PHP’yi urlencode edip http://127.0.0.1/index.%70%68%70 yaptığımda yine “OPPS. yeniden gelmelisin diyordu” kısaca banlandın yazısını aşmıştım. ama içerden gel dediğine göre flag nerde olmalıydı? ilk denediğim flag.%70%68%70 bana başarılı sonucu verdi. Yarışma sonrası Discord kanalında konuşulanlara göre bu flag.php robots.txt’den de bulunabiliyormuş. bunu görmeden soruyu çözmek hoşuma gitmişti.

Soru 14: Zaphod Nerede

OSINT sorusu karşımızdaydı. HTTRACK ile BTK’ya ait static bir sayfa(lar) mevcuttu. Burp’ün aracıyla bunları taradıktan sonra “Zaphod”u bulmaya sıra gelmişti. taranan sayfalarda “Zaphod” arattığımda şöyle bir sonuç çıkmıştı.
OSINT kategorisi olduğu için “Zaphod Beebox” u aramaya başladım ve karşıma “https://www.youtube.com/channel/UClrJtiSIq9Au09RH6AbBPjg” adresi çıktı. Bu kanalda bir sql “SQL Inject” başlığı altında bir videosu mevcut. Video’yu izlemeye başlayınca 9. saniyede ufak bir es vererek bir “zaphod” adresini ifşa ediyor.https://www.zaphodsleftbrain.xyz/ Hemen bu adrese girdim ve “0 day panel” çıktı karşıma 😀 burada biraz araştırma yaptım. bug.c adlı bir program ve bazı javascript kodları vardı. başta bug.c ‘yi inceledim ve bu çok zamanımı aldı fakat anlamlı bişiler çıkmadı. Siteyi biraz daha inceledim gözden kaçan bişi var mı diye ve SSL sertifikasında 2 adet sitenin olduğunu gördüm. bu diğer adres ile “https://www.zaphodsrightbrain.fun/” bu sayfada ise bize bir ses dosyası veriyordu. Bu ses dosyası üzerinde analizler yaptım “spektrum vs” ama bişiler çıkmadı. SSTV sesi olabileceği aklıma geldi çünkü sesin sonlarına doğru cızırtı aralıkları garip bi şekildeydi.

Androidde bulunan bazı SSTV program ve modlarını deneyince wefax modunda (hava durumu faxı) ortaya şöyle bir resim ve ayrıca sesteki diğer dalganmaların Türk Bayrağının dalgalanması olduğuda ortaya çıkmıştı 🙂

Peki bitti mi? Hayır ama ufak bi aşama daha vardı. Bu adrese gidince bizi SETI radarlarına benzer bir yerin panaromik resmi geliyordu. burada bir uydunun üstünde açıkca flag’ın yeri belli oluyordu.

500 puanlık soruyu da uzun bir uğraştan sonra çözmüştüm.

Soru 15: USOM Do You Copy

Tersine mühendislikle ilgili olmadığım için bu soruya hiç bakmadım açıkcası. ve gördüğüme göre de çözebileceğim bişi değilmiş 🙂

Evet soru ve cevaplar böyleydi.

Yarışma sırasında Burp eklentilerim ayrıca şöyle bir olayı rapor etti. Load balancer kullandıkları için sorular içisinde bize bir cookie değeri daha atanıyordu ve bu cookie decrypt edip bazı sonuçlar veriyordu. Bu sonuçlar arasında sunucu adı gibi bilgilerde vardı ve bazı sorulara daha odaklı bakmamı sağlamıştı 🙂 bknz: Soru 6

Bazı elde ettiğin servernameler şu şekilde (sunucu ip adresi sıralı)

“VSXSoruXAscii”,”VSXSoruXsmspanel”,”VSXosintXfirstXapp”,”VSXSoruXrfid”,”VSXSoruXsqli”,”VSXSoruXEks”,”VSXSoruXAndroid”,”VSXSoruXpcap”,”VSXSoruXBoZanxx”,”VSXSoruXAlgo”,”VsXsoruXhaciXweb”,”VSXSoruXHashlength”,”VSXSoruXtalgo”,”VSXSoruXDikkatlibak” ve anasitenin “K8SXSyXHTTPS”

6 Yorum

  1. Kutluhan Kutluhan

    Bazilarini cidden yapabilirmişim ben kaba kuvvet saldırısını yasak oldugunu bildigim icin env klasorunu bulamadim 123123 de denerdim hep niye denemediysem. Hocam mdisec serisine yeni baslicam inşallah faydasını gorururum lunizz i yeni bitirdim btk bitirdim siber güvenlik kumelenmesini bitirdim mdisec e baslicam

  2. Tebrik ederim abi, ellerine sağlık

  3. Eline sağlık

  4. MUHAMMED DOĞAN MUHAMMED DOĞAN

    Teşekkür ederim dostum ellerine sağlık keşke şu konularla ilgili eğitimler hazırlasanda alsak.

  5. mehmet yıldız mehmet yıldız

    Merhaba öncelikle write-up çok iyi olmuş sadece 2. soruyu anlayamadım birde sql i bu yıl yarışmaya katılamadım soruları sizden indirdim çözmey çalıştım 2. soruda form.js den cevapları bulmuşsunuz sanırım ben bulamadım 2. sorum ise sqlmap ve manuel injection işe yaramadı demişsiniz sqlmap te nasıl ilerlediniz yani tamperları kullanmadan önce nasıl ilerlediniz 2. soruyu ve sql sorusunu daha detaylı anlatabilirmisiniz yorumun altına

  6. 2. sorunun cevabı JS içinden bir kullanıcı adı ve parola çıkıyordu, verdikleri chrome eklentisine bunu giriyorduk ve flag karşımıza çıkıyordu,
    6. soru için, tamper öncesi bilindik ‘ ” or vs gibi sorgu müdahaleleri denedim fakat sonuç elde edemedim. ama sorunun sqlinject içerdiğini biliyordum (yazı sonundaki nedenden dolayı) bu yüzden diğer tamperları denedim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.