Yusuf Can Çakır tarafından yazılmıştır.
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.
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
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
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
Gördüğünüz gibi HTTP üzerinden export edilen bütün veriler karşımızda.
Pentest.pcapng İnceleme 4
Biraz daha incelediğimde ilgimi go.php isimli bir php dosyası çekti.
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
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
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 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
Yine içerisine bakmak için sağ tık > follow > tcp yaptığımda script’i aldım.
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
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
Fakat biraz daha aşağıya indiğimde farklı data’lı tek bir paket buldum.
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
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
Bu soruda bize aşağıdaki simgeleri içeren bir web sayfası verildi
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
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.
Bu url’ye girdiğimizde sorunun cevabı karşımıza çıkıyor.
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ış
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
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
/md5d41d8cd98f00b800998ecf8427e.php?id=711a754e6bbee663ead9ddeb991d8ca5
Bizim elde etmemiz gereken link üsttekidir.
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
[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
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
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
Gördüğünüz gibi HTTP üzerinden export edilen bütün veriler karşımızda.
Pentest.pcapng İnceleme 4
Biraz daha incelediğimde ilgimi go.php isimli bir php dosyası çekti.
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
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
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 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
Yine içerisine bakmak için sağ tık > follow > tcp yaptığımda script’i aldım.
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
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
Fakat biraz daha aşağıya indiğimde farklı data’lı tek bir paket buldum.
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
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
Stilim Sensin
Kriptografi
Bu soruda bize aşağıdaki simgeleri içeren bir web sayfası verildi
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
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ış
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
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
/md5d41d8cd98f00b800998ecf8427e.php?id=711a754e6bbee663ead9ddeb991d8ca5
Bizim elde etmemiz gereken link üsttekidir.
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: