THM c4ptur3th3fl4g CTF WriteUp

LEOHUNTERA

Üye
31 Ara 2018
79
3
Herkese merhabalar, bugün başlangıç seviyesinde bir CTF olan ve Try Hack Me'de bulunan c4ptur3th3fl4g CTF'ini çözeceğiz.

8b906b3d444362152f1cd3e521aa7e4a.png


c4ptur3th3fl4g CTF'i sırasıyla aşağıda belirtmiş olduğum konuları ele alan bir CTF'dir:

Translation & Shifting
Spectrograms
Steganography
Obscurity


Bu makinedeki konuları kategorilendirmek ve anlaşılmasını daha kolay hale getirmek için konularımızı parçalayarak, her bir konuyu kendi alt başlığı içerisinde ele alıp konumuza devam edeceğiz. Ayrıca teorik anlamda bilinmeyen konular için ek açıklamalar sunarak konunun anlaşılabilirlik düzeyini arttırıp, Sizler için üzerine ekleyebileceğiniz temel bir anlayış kazanmanızı sağlayacağız.

Gerekli girizgah bölümünü yaptığımıza göre artık makine çözümüne geçebiliriz.

1. Translation & Shifting

Bu bölüm bazı encoding ve şifreleme algoritmalarının tanıtımını ve ilgili soruların bu encoding ve şifreleme algoritmaları ile çözümünü içermektedir.

- c4n y0u c4p7u23 7h3 f149?

İlk sorumuza baktığımızda Sizlerinde kolaylıkla tahmin edebileceği gibi bu harflerin belirli rakamlarla yer değiştirildiği bir yazım şekli. Bu her ne kadar basit bir örnek olsada bu tür soruların çözümünde verilen metin içerisinde öncelikle bilinen kelimelerin ele alınarak, ilgili rakamların hangi harflere karşılık geldiğinin zincirleme olarak çıkarımının yapılması daha karmaşık problemlerin çözümünde önemli bir rol oynayacaktır.

Açıkladığımız tekniğe göre rakamları karşılık gelen harflerle değiştirdiğimizde Flag'imizi elde etmiş oluyoruz.

Flag: can you capture the flag?

- 01101100 01100101 01110100 01110011 00100000 01110100 01110010 01111001 00100000 01110011 01101111 01101101 01100101 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101111 01110101 01110100 00100001

İkinci sorumuz Bilgisayar Bilimlerinin vazgeçilmez ana dili olan binary sayı sistemi ile ilgili bir sorudur. Aslında bu soruda temelde binary sayı sisteminden text'lere bir dönüşüm problemi olarak ele alınabilir. Bu sorunun çözümünü hazır bir binary translator kullanarak yapmadan önce konuyu daha iyi anlamamız amacıyla işin biraz derinine inmek istiyorum:

Bildiğiniz gibi bilgisayarlar 1 ve 0'lardan oluşan binary sayı sisteminden oluşur. Aslında böyle bir sayı sisteminin Bilgisayar Bilimlerinin adeta bel kemiğini oluşturmasının ana sebebi elektronik alanında 1 ve 0'ların ifade şeklinin akım var (1) ve akım yok (0) olarak anlamlandırılabilmesine ve aktarılabilmesine dayanmasıdır. Bildiğiniz gibi Bilgisayar'larda temelde büyük bir elektronik devre kümesinden başka bir şey değildir. Dolayısıyla varmak istediğimiz noktada 1 ve 0'ların elektronikteki akım var ve akım yok olarak anlamlandırılabiliyor oluşu, büyük bir elektronik devre kümesi olan bilgisayarlarda veri modellemesi için binary sayı sisteminin kullanımını zorunlu hale getirmiştir.

Binary sayı sistemlerinin Bilgisayarların Dünyasında neden kullanıldığını anladığımıza göre artık biraz daha ilerleyebiliriz demektir.

Bildiğiniz gibi Bilgisayarlarla çalışırken her zaman sayılarla çalışmıyor ve metin'lerinde işin içerisine girdiği bir veri kümesiyle çalışmak durumunda kalıyoruz. Örneğin bu konuyu yazdığımızda konunun konuyu yazdığımız bilgisayardan başka bir bilgisayara Sizlerin erişebilmesi için aktarılması gerekiyor. Ama bilgisayarlar 1 ve 0'lar ile çalışıyordu, peki bu durumda yazdığımız konu ilgili bilgisayara nasıl aktarılacak?

İşte tam da bu noktada bazı kodlama sitemleri Bilgisayarların yardımına koşuyor. Konumuzu çok dağıtmamak adına bütün kodlama sistemlerini ele almak yerine spesifik olarak ASCII kodlama sistemini ele alacağız. ASCII kod sistemi ANSII tarafından standartlaştırılmış olan ve 7 bitlik karakterlerden oluşan bir karakter kümesidir. Bu karakter kümesinde her bir karakterin sayısal olarak belirli bir karşılığı vardır. ASCII kodlama sitemini kullanan bilgisayarlar metin tabanlı bir aktarım yapacaklarında ASCII kod sistemine göre ilgili karakterleri sayısal karşılıkları ile yer değiştirip bu şekilde aktarım yaparlar.

Gerekli açıklamaları yaptıktan sonra sorumuza dönecek olursak, aslında bu soru temelde bir binary ascii dönüşümünden başka bir şey değildir. Her bir 8 bit (1 byte) ascii tablosundaki bir karaktere karşılık gelmektedir.

Örneğin ilk 8 bitimiz olan 01101100 grubunu ele alırsak, bu sayı sisteminin decimal olarak karşılığının 108 olduğunu görebiliriz. 108 sayısının ASCII kod kümesindeki karşılığı ise l harfidir. Her bir 8 bitlik kod kümesine ilgili dönüşümleri uyguladığımızda metnimizi elde etmiş oluruz. Şimdilik konuyu daha fazla uzatmamak adına bu işlemleri bizim için otomatik olarak yapan bir online binary translator aracı kullanalım.

ha8c07h.png


Gördüğünüz gibi binary translator kullanarak ASCII kod sistemini kullanıp Flag'imizi elde etmiş oluyoruz.

Flag: lets try some binary out!

- MJQXGZJTGIQGS4ZAON2XAZLSEBRW63LNN5XCA2LOEBBVIRRHOM======

Üçüncü sorumuz yine bir encoding sorusu gibi gözüküyor. Öncelikle verilen metin başta base64 kodlama şemasını işaret ediyor gibi gözükse de doldurulan padding'lerin (=) biraz fazla oluşu bu düşüncemizi geçersiz kılıyor gibi gözüküyor. Sorunun çözümüne geçmeden önce teorik olarak bazı kavramları açılayalım

Base64 ikili verilerin sadece ASCII kod kümesini kullanan ortamlarda iletimini destekleyen bir kodlama şemasıdır. Base64 kodlama şeması verilen bir veriyi kendi kodlama algoritmasına göre işleyip tamamı ASCII karakterlerinden oluşan bir çıktı üretir. Base64 kodlama şeması 3 byte'lık verileri her biri 6 bit'ten oluşan ASCII karakterlerine dönüştürerek kodlama işlemini yapar. Veriler 3'er byte'lık grup'lar olarak ele alındığından ve Base64 her 3 byte'ı 6'şar bitlik bölümlere ayırdığından Base64 ile kodlanmış bir metinin çıktısındaki karakter sayısı mutlaka 4'ün katı olmalıdır.

Bir diğer kodlama algoritması Base64'ün farklı bir varyantı olan Base32 kodlama algoritmasıdır. Base32 algoritması Base64 algoritmasından farklı olarak verileri 3 byte yerine 5 byte'lık grup'lar olarak ele alıp, bu 5 byte'lık grup'ları da Base32 kodlama şemasında bulunan 5 bit'lik karakter kümelerine bölmeyi içerir. Base32 algoritmasında veriler 5'er byte'lık gruplar olarak ele alındığından ve Base64 her 5 byte'ı 5'er bitlik bölümlere ayırdığından Base32 ile kodlanmış bir metinin çıktısındaki karakter sayısı mutlaka 8'in katı olmalıdır.

Base64 ve Base32 algoritmasında elde edilen çıktının karakter sayısının Base64 için 4, Base32 için ise 8'in katı olmaması durumunda, karakter sayısını tamamlamak için padding (=) denilen karakterler kodlanan metine eklenir.

Gerekli açıklamaları yaptıktan sonra kodumuza dönecek olursak, aslında bu soru temelde bir Base32 decode işleminden başka bir şey değildir. Sorunun ilk çözüm adımı verilen metnin kodlama algoritmasını tespit etmektir. Elimizdeki metine baktığımızda sondaki padding'lerin (=) 6 adet olduğunu görmekteyiz. Base64 algoritması 4'ün katlarına tamamlama yaptığından bu mümkün değildir. Bu kapsamdada metnimizin Base32 algoritması ile kodlandığını anlayabiliriz.

gtqy9w8.png


Gördüğünüz gibi metnimizi online bir Base32 decoder aracı ile decode ettiğimizde Flag'imizi elde etmiş oluyoruz.

Flag: base32 is super common in CTF's

- RWFjaCBCYXNlNjQgZGlnaXQgcmVwcmVzZW50cyBleGFjdGx5IDYgYml0cyBvZiBkYXRhLg==

Dördüncü sorumuza baktığımızda aslında bir önceki sorumuzdan bir farkı olmadığını görebiliriz. Verilen metni incelediğimizde sondaki padding'lerin sayısı ve karakter sayısının 4'ün katı oluşu nedeniyle bunun Base64 ile kodlanmış bir metin olduğunu söyleyebiliriz.

7cxzyhj.png


Gördüğünüz gibi metnimizi online bir Base64 decoder aracı ile decode ettiğimize Flag'imizi elde etmiş oluyoruz.


Flag: Each Base64 digit represents exactly 6 bits of data.

- 68 65 78 61 64 65 63 69 6d 61 6c 20 6f 72 20 62 61 73 65 31 36 3f


Beşinci sorumuza baktığımızda bunun aslında bir hexadecimal gösterim şekli olduğunu ilk bakışta anlayabiliriz. Hexadecimal (on altılı gösterim) binary (ikili) ve decimal (onlu) gibi bir sayı gösterim formatıdır. Bu sayı gösterim formatı, sayıların 16'lık tabanda gösterimini temel alır. Bu soruyu çözmeden önce bilmemiz gereken sorunun aslında temelde önceki bölümlerde bahsettiğimiz ASCII formatını ele almasıdır. Her ne kadar gösterim şekli hexadecimal olsada, hexadecimal gösterimde bulunan her bir sayı decimal'a çevirildiğinde ASCII tablosundaki ilgili karaktere karşılık gelmektedir.

9efoph7.png


Gördüğünüz gibi verilen Hexadecimal'i ASCII şemasını kullanarak hexadecimal'i text'e çeviren bir araç ile decode ettiğimizde Flag'imizi elde etmiş oluyoruz.


Flag: hexadecimal or base16?

- Ebgngr zr 13 cynprf!

Altıncı sorumuza baktığımızda verilen metnin olası bir rotate cipher'a işaret eden karmaşık harfler kümesinden oluştuğunu görebiliriz.

Öncelikle rotate cipher, belirli bir metnin içerisindeki her bir karakterin alfabede kendisinden belirli sayıda sonraki karakter ile yerinin değiştirilmesini temel alan bir şifreleme algoritmasıdır. ROT-13 ise bu şifreleme algoritmasının daha spesifik olarak 13 kaydırma değeri için işlem yapmasını temel alır. Bu durum ROT-13 ile şifrelenecek bir metindeki her bir karakterin alfabede kendisinden 13 karakter sonraki değer ile yer değiştirerek şifreleneceği anlamına gelmektedir.

Gerekli açıklamaları yaptıktan sonra sorumuza geri dönecek olursak verilen metni rotate 1'den 25'e kadar brute force tekniği ile bütün rotate değerleri için decrypt etmeyi deneyebiliriz.

k9s1606.png


Gördüğünüz gibi verilen şifreli metin rot 13 şifreleme algoritması ile şifrelendiği için rotate 13 değeri için online bir rot-13 decrypt aracı ile decrypt ettiğimizde Flag'imizi elde etmiş oluyoruz.

Flag: Rotate me 13 places!

- *@F DA:? >6 C:89E C@F?5 323J C:89E C@F?5 Wcf E:>6DX

Yedinci sorumuza baktığımızda verilen metnin olası bir rotate cipher olduğunu bir önceki sorudan çıkarabiliriz. Bu sorudaki tek fark alfabede olmayan karakterlerinde verilen metinde yer alıyor olması olarak gözümüze çarpabilir. Bu durum bize verilen metnin alfabe dışındaki karakterleride hesaba katan ROT-47 algoritması ile şifrelendiğini gösterebilir.

Soruya devam etmeden önce ROT-47 Algoritmasını açıklayacak olursak ROT-47 önceki soruda açıkladığımız ROT algoritmaları ile aynı mantığa dayanmaktadır. Bu algoritmanın en önemli farkı ASCII karakterlerinin bir alt kümesi olan 94 karakterlik bir alfabe üzerinde çalışmasıdır. ROT-47 algoritması, verilen metindeki her bir harfin bu 94 karakterlik alfabe üzerinde kendisinden 47 sonraki karakter ile yer değiştirilmesini temel almaktadır.

Gerekli açıklamaları yaptıktan sonra sorumuza geri dönecek olursak verilen metni online bir ROT-47 decrypt aracı ile decrypt ettiğimize Flag'imizi elde etmiş oluyoruz:

97bfio4.png


Flag: You spin me right round baby right round (47 times)

- - . .-.. . -.-. --- -- -- ..- -. .. -.-. .- - .. --- -.. -. -.-. --- -.. .. -. --.

Sekizinci sorumuza baktığımızda daha önce mors alfabesi ile çalışmış kişiler bunun hemen bir mors metni olduğunu anlayacaktır. Mors alfabesini hiç bilmediğimizi varsayarsak metni alıp ufak bir araştırma yaptığımızda karşımıza mors ile ilgili sonuçların geldiğini görebiliriz.

Mors alfabesi kısa veya uzun işaretler ile bunlara karşılık gelen ışık veya seslerin kullanılarak bilgi aktarılmasını sağlayan yöntemi temel alan bir alfabedir.

k3jkt7j.png


Gerekli açıklamaları yaptıktan sonra sorumuza geri dönecek olursak gördüğünüz gibi bir mors decoder aracı ile verilen mors metnini decode ettiğimizde Flag'imizi elde etmiş oluyoruz.

Flag: telecommunication encoding

- 85 110 112 97 99 107 32 116 104 105 115 32 66 67 68

Dokuzuncu sorumuza baktığımızda bu sorunun önceki sorularımızdan beşinci soru ile benzer olduğunu görebiliriz. Bu soruda verilen metnin decimal formatında olması nedeniyle decimal ASCII dönüşümü yaparak sorumuzu çözebiliriz.

i17qzwq.png


Bu kapsamda gördüğünüz gibi verilen decimal'i ASCII şemasını kullanarak decimal'i text'e çeviren bir araç ile decode ettiğimizde Flag'imizi elde etmiş oluyoruz.


Flag: Unpack this BCD

- LS0tLS0gLi0tLS0gLi0tLS0gLS0tLS0gLS0tLS0gLi0tLS0g....=

Onuncu sorumuza baktığımızda verilen metnin bir Base64 metni olduğunu anlayabiliriz.

Öncelikle verilen metni Base64 ile decode ediyoruz:

q8bhsc5.png


Gördüğünüz gibi verilen metni Base64 ile decode ettiğimizde hiçte yabancı olmadığımız bir başka kod kümesi ile karşılaştık: Mors Kodu

Elde ettiğimiz mors kodunuda tekrar decode ediyoruz:

gd8e8j6.png


Gördüğünüz gibi uzunca bir binary elde ettik. Elde ettiğimiz binary'i ASCII kodlama şemasını kullanarak decode ediyoruz:

47vf750.png


Binary'iyi decode ettikten sonra gördüğünüz gibi karmaşık harf ve alfabede olmayan simgelerden oluşan bir metin elde ettik. Bu noktada önceki sorulardanda hatırlayacağımız gibi alfabede olmayan simgeler ile de çalışabilen ROT-47 algoritmasını deneyebiliriz:

t2il9gz.png


Gördüğünüz gibi algoritmamızı ROT-47 ile decrypt ettiğimizde decimal formatında bir kod kümesi ile karşılaştık. Son olarak decimal formatındaki kod kümemizi yine ASCII şemasını kullanarak decode edip text'e çeviriyoruz:

3h99t9k.png


Gördüğünüz gibi en başta verilen metne çeşitli cipher/coder algoritmalarını uygulayarak Flag'imizi elde etmiş oluyoruz.

2. Spectograms

Kodlama ve şifreleme ile ilgili sorularımızı tamamladıktan sonra artık sıradaki sorumuz olan Spektrogramlar ile ilgili sorumuza geçebiliriz.

Öncelikle spektogramlar zamanla değişen bir sinyalin frekans spektrumunun (dağılımının) görsel bir temsilidir. Dahada açıklayacak olursak spektogramlar frekans dağılımının görsel olarak modellendiği bir gösterim şeklidir.

Gerekli açıklamaları yaptıktan sonra soruda verilen ses dosyamızı Audacity (Sayısal ses düzenleme ve kaydetme yazılımı) isimli yazılım ile analiz edelim:

1hb4m8m.png


Gördüğünüz gibi verilen ses dosyasını audacity yazılımı ile analiz ettiğimizde ses dosyasının içerisine frekans dağılımı kullanılarak gizlenmiş Flag'imizi elde etmiş oluyoruz.

3. Steganography

Sıradaki sorumuz spektogram sorusuna benzer bir mantığa sahip olan steganography sorusudur.

Öncelikle steganography bir dosya, mesaj, resim veya videonun bir başka dosya, mesaj, resim veya videonun içerisine gizlenmesine dayanan bir gizleme tekniğidir.

Gerekli açıklamaları yaptıktan sonra gördüğünüz gibi soruda verilen resim dosyamızı herhangi bir steganography decoder aracı ile analiz ettiğimizde resim içerisine steganography tekniği kullanılarak gizlenmiş Flag'imizi elde etmiş oluyoruz:

j51ejm9.png


4. Security through obscurity

Sıradaki sorumuz güvenlik mühendisliğinde önemli bir konu olan ve uzun süreler güvenlik için bir çözüm yöntemi olup olmadığı tartışılan Security through obscurity yöntemi ile ilgilidir.

Security through obscurity yöntemi, güvenlik açıklarının çözümünden çok saklanmasına dayanan bir güvenlik yöntemidir. Bu yöntem, güvenlik açıklarının gizli kaldığı sürece herhangi bir bilgi sisteminin güvenli olduğu fikrine dayanmaktadır.

Gerekli açıklamaları yaptıktan sonra sorumuzu analiz etmeye başlayabiliriz:

os5lwpq.png


Öncelikle soruda verilen resim dosyamızı açarak işe başlıyoruz. İlk etapta herhangi bir resim dosyasından farksız olan bu dosyayı incelediğimizde elle tutulur bir sonuca ulaşamıyoruz. İlgili resim dosyasından herhangi bir ipucu elde edemediğimiz için şansımızı biraz daha zorluyor ve bir hacker'ın vazgeçilmez düşünce tarzı olan 'kutunun dışında düşünmeye' başlıyoruz:

Öncelikle resmimizin arşivlenmiş bir dosya olaracağını göz önünde bulundurarak, .jpg olan dosya formatımızı .zip'e çevirerek işe başlıyoruz.

Gördüğünüz gibi formatını zip'e çevirdiğimiz arşiv dosyamızı açtığımızda dosya içerisine gizlenmiş başka bir dosyamız olduğunu tespit ederek sorumuzun ilk kısmı için gerekli flag'imizi bulmuş oluyoruz:

54nzxbn.png


Sorumuzun ikinci kısmına geçtiğimizde, ipucumuz bize arşivin içerisindeki dosyaya odaklanmamızı söylediğinden dosyamızı analiz etmeye başlıyoruz.

Dosyamız bir resim dosyası olduğundan steganography yöntemi ile herhangi bir mesajın dosya içerisine gizlenmesine karşın bir steganography decoder aracı ile dosyamızı inceliyoruz ama maalesef herhangi bir sonuca ulaşamıyoruz.

Sorumuzun ilk kısmındaki yöntemimize benzer şekilde dosya formatımızı değiştirerek, dosyamızı bu şekilde inceliyoruz:

oaml5nd.png


Gördüğünüz gibi birkaç dosya formatı denemesinden sonra dosyamızı .txt uzantısına çevirip içerisini kontrol ettiğimizde sorumuzun ikinci kısmı için gerekli Flag'imizi elde etmiş oluyoruz:

2memiyb.png


Son sorumuzun çözümü ile birlikte c4ptur3th3fl4g CTF'imizi tamamlamış oluyoruz. c4ptur3th3fl4g CTF'i basit bir CTF olmasına karşın, CTF dünyasına yeni girenler, basit gibi görünen konularda detayların ne kadar önemli olduğunu farketmek isteyenler ve özellikle 'Security through obscurity' bağlamında kutunun dışında düşünmenin önemini kavramak isteyenler için başlangıç seviyesinde güzei bir CTF'dir.​
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.