Siber Yıldız 2020 CTF Writeup

PwnLab.Me

Admin
Katılım
21 Ocak 2024
Mesajlar
202
Tepkime puanı
9
Puanları
18
Yusuf Can Çakır tarafından yazılmıştır.

[TR] Siber Yıldız 2020 CTF Writeup​


Selamlar herkese, Siber Yıldız 2020 CTF’i birçok alandan sorularla bizleri terletti. Şu anda sorular açık olmadığı için sadece adli bilişim, ağ ve EKS alanlarındaki iki soruyu sizlere anlatacağım. Onlarda pcap dosyası verildiği için bilgisayarımda tek kayıtlı olanlar onlar. Diğer sorularıda bu konu altında paylaşmayı planlıyoruz. Sorular paylaşılırsa daha detaylı anlatabiliriz, paylaşılmazsa aklımızda kalanları sizlere anlatacağız.

Sisteme Saldırdılar, Biraz İnceleme Gerekiyor

Adli Bilişim​


Bizlere bir pcap dosyası verilmişti ve “bir saldırı oldu bunu analiz edelim” tarzında bir talimat vardı. PCAP dosyasını indirip WireShark’ta açtım ilk önce.

Pentest.pcapng İnceleme

Pentest.pcapng İnceleme

Paketleri incelediğimde XSS’ten SQL’e her şeyin denendiğini gördüm ve bu beni baya yordu. Çünkü çok paket var ve tam olarak ne aradığımı bilmiyordum. Sonrasında HTTP isteklerini filtreledim ve bir neler olmuş baktım.

Pentest.pcapng İnceleme 2

Pentest.pcapng İnceleme 2

Daha sonrasında HTTP ile dosyaları export edip içlerinde ne olduğuna bakmak aklıma geldi. Bunun için File > Extract object > http yaptım.

Pentest.pcapng İnceleme 3

Pentest.pcapng İnceleme 3

Gördüğünüz gibi HTTP üzerinden export edilen bütün veriler karşımızda.

Pentest.pcapng İnceleme 4

Pentest.pcapng İnceleme 4

Biraz daha incelediğimde ilgimi go.php isimli bir php dosyası çekti.

Pentest.pcapng İnceleme 5

Pentest.pcapng İnceleme 5

Bu dosyayı Save butonuna basarak kaydettim. Dosyayı açtığımda bir link vardı, bunu bizlere soruyu verdikleri sunucu ile birleştirip girdiğimde flag’i aldım.

Pentest.pcapng İnceleme 6

Pentest.pcapng İnceleme 6



Elektirikler Gitti​

Ağ ve EKS​


Bu soruda EKS’ye bir saldırı olduğunu ve elektriklerin gittiğini söylüyordu. Bizlere yine bir PCAP dosyası verilmişti. Bu PCAP dosyasını indirip WireShark ile açtım.

Ağ ve EKS 1

Ağ ve EKS 1

Paketleri incelediğimde ve sorudan da bunun bir SCADA sistemi olduğunu gördüm. Paketleri incelerken altlara doğru bir şey fark ettim. Telnet ile bağlantı gerçekleştirilmiş kullanıcı adı SCADA_Uıser şifre ise SCADA_USOM ‘du. Bu pakete sağ tıklayıp follow > TCP dediğimde bana içeride hangi komutları çalıştırdığını ve benim için önemli olan bir dosyayı göstermektedir.

Ağ ve EKS 2

Ağ ve EKS 2
Ağ ve EKS 3

Ağ ve EKS 3

Burada ilgimi çeken dosya Aciklama.txt idi. Bunu paketlerde biraz daha araştırdığımda içerisinde bir python scripti olduğunu gördüm.

Ağ ve EKS 4

Ağ ve EKS 4

Yine içerisine bakmak için sağ tık > follow > tcp yaptığımda script’i aldım.

Python Script

Python Script

Script’te coils_byte değişkenine bir veri gireceğiz ve bizlere flag’i verecek. Coils dediği için aklıma modbus protokolüne bakmak geldi. Filtreleme kısmına modbus yazdım. İncelediğimde data kısımlarında hex verileri olduğunu gördüm.

Modbus Data

Modbus Data

Bu datayı script’de coils_byte kısmına ekleyip çalıştırdığımda ise yakın olduğumu fakat tam olarak aradığımın bu olmadığını söylüyor.

Python Script Data

Python Script Data

Fakat biraz daha aşağıya indiğimde farklı data’lı tek bir paket buldum.

Modbus Data 2

Modbus Data 2

Bunu script’e ekleyip çalıştırdığımda bir link verdi üstteki sorudaki gibi. Bunu da URL’ye eklediğimde flag’i aldım.

Ağ ve EKS Flag

Ağ ve EKS Flag



Büyük Düşün

Kriptografi​


Soruda bizleri bir siteye yönlendiriyor, siteye her girişimizde kodlar değişiyor ancak büyük harfler değişmemektedir. Buradaki önemli nokta onlardır ve bu bir base32 şifreleme türüdür.

Base32 Kriptografi

Base32 Kriptografi



Stilim Sensin

Kriptografi​


Bu soruda bize aşağıdaki simgeleri içeren bir web sayfası verildi

kripto2

kripto2

Burdaki “/n” yazıları bir alt satıra geçmeyi temsil ediyor, kaynak kodlarından yazıyı alıp her /n işaretinden sonra alt satıra geçersek karşımıza aşağıdaki gibi bir görüntü çıkıyor.

kripto 2 düzenli

kripto 2 düzenli
Flag=./md5(a).php?id=md5(b)

Bu yazıdan bir mantık yürüterekten url’ye yazacağımız metinin “a”DeğerininMd5Değeri.php?id=”b”DeğerininMd5Değeri olduğunu keşfediyoruz yani daha düzgün yazarsak url’miz aşağıdaki gibi oluyor.

192.168.1.1:8080/0cc175b9c0f1b6a831c399e269772661.php?id=92eb5ffee6ae2fec3ad71c777531578f

Bu url’ye girdiğimizde sorunun cevabı karşımıza çıkıyor.



Güvenliyim Ben​

Mobil​


Soruda bizlere bir APK vermektedir. APK dosyasını Jadx ile decompile ettik. Ardından paketleri incelerken com.Example.GuvenliyimBen isimli bir paket dikkatimizi çekti.

Jadx Genel Bakış

Jadx Genel Bakış

Classlar içerisinde dolaşırken bir class içerisinde bulunan onClick fonksiyonunda yapılan String build işlemi dikkatimizi çekti, içerisinde bazı base64 kodları vardı ve onları decode etmeye başladığımızda anlamlı veriler elde ediyorduk.

Jadx Genel Bakış 2

Jadx Genel Bakış 2

Alttaki if koşulundaki kodları sıralı bir şekilde yazdığınızda bir link veriyor bizlere. Bu linki sorunun ana dizinindeki URL’ye yapıştırdığımızda flag’i veriyor bizlere. Bu kod bloğunu isterseniz StringBuilder ile daha okunaklı bir hale getirebilirsiniz.

Jadx Genel Bakış 3

Jadx Genel Bakış 3



/md5d41d8cd98f00b800998ecf8427e.php?id=711a754e6bbee663ead9ddeb991d8ca5

Bizim elde etmemiz gereken link üsttekidir.



Resmin İçini Görebilir Misin?

Resmin İçini Görebilir Misin?

Resmin İçini Görebilir Misin?

Soruda çok açık bir şekilde istenileni söylemişti. Verilen kelimelerin ASCII değerlerini bulup en yüksek olanın 987654’üncü değerini alacağız. Bir python script’i ile bunu çözüme kavuşturduk.

Bizlere verilen kelime listesi SiberYıldız2020 Strings.txt


i = 0
toplam = 0
tempToplam = 0
satirSayisi = 0
hesaplananSatir = 0
kelime = ''
with open("strings.txt","r") as dosya:
for satir in dosya:
for c in satir.replace("\n", ""):
tempToplam += ord(c)
if toplam < tempToplam:
toplam = tempToplam
tempToplam = 0
kelime = satir
hesaplananSatir = satirSayisi
tempToplam = 0
satirSayisi += 1
#print("Hesaplanan değer : ", toplam)
#print("Hesaplanan Satır : ", hesaplananSatir)
#print("Hesaplanan Kelime : ", kelime)
print(pow(toplam, 987654))
def pow(s1, s2):
z = sum(s1 for _ in range(s2))
return z
 
Moderatör tarafında düzenlendi:
Geri
Üst