Siber Yıldız - 2019 | CTF (Capture The Flag) Çözümleri

Siber Yıldız - 2019 | CTF (Capture The Flag) Çözümleri

Merhaba arkadaşlar bu sene ikincisi düzenlenen Türkiye'nin Siber Yıldızları yarışmasına WWarriors takımı olarak bizde katıldık ve 7. olarak tamamladık. (Kesin sonuçlar Henüz Açıklanmadı)

 Takım arkadaşlarıma gayretlerinden ve çalışmalarından dolayı teşekkür ederim.
 
 Çözümlerimizi sizlerle de paylaşayım istedim , faydalı olması dileğiyle...
Çözümlere dair dosyaları en alttan indirebilirsiniz.

  1. --- Hazırlık Soruları

Bu sorular yarışma başlamadan önce flag formatları nasıl olabilir anlaşılabilsin amacıyla sorulmuş sorulardı.

  • --Hazırlık Sorusu - 1 | Bilişim şirketimizde çalışmak ister misin ?

Soruyu açtığımızda bizi bir site karşılamış oluyor
    
    
Sağında solunda biraz gezindikten sonra kaynak kodunu görüntüle yapıyoruz ve bizi bir yorum satırı karşılıyor
        
    
Bizde hemen dizin tarama araçlarından birini çalıştırıp panel adresine ulaşmaya çalışıyoruz bu konuda dirb veya gobuster tercih edilebilir.
Sonuç olarak dizin adresini bulup girdiğimizde Flag doğrudan karşımıza geliyor
    
    
FLAG: RUp2cWFJNHNmekYvQVUyemZXQXRYbFV6Tll4cEQ0UFJGYTVLb25MN 3EwdW8ra3VxNncrVFNtRFRNenJ1VlVEVFJBQlRySklHWkU5eGw4Z3o0dWlKSEE9PQ==
    

  • --Hazırlık Sorusu - 2 | Dikkatle incelersen cevabı bulabilirsin.    

Soruyu açtığımızda bizi bir yazı karşılamış oluyor.
    
 Hemen ilk olarak kaynak koduna göz atıyoruz.
   
İpucu olarak verilen dosyayı inceliyoruz.
        
Karşımıza çıkan algoritmayı incelediğimizde, bize 4. anahtardan sonraki kısım bize bayrağı vereceğini belirtiyor. 
Bizde hemen split yapıp saydık ve karşımıza "87habythi15ng151.php" çıkmış oldu. Siz isterseniz split fonksiyonu yazabilirsiniz veya online split kullanabilirsiniz ben uğraşmadım o kadar bakınca anlaşılıyor zaten :)

87habythi15ng151.php cevabını md5 ile hash değerini alıyoruz ve sonucu bulmuş oluyoruz.
FLAG: 28833db32bb4def17138de776fe2156a

  1. --- Yarışma Soruları

Şimdi ise asıl yarışma sorularına bakalım.

  • --Soru - 1 | Bu gerçekten kolay

İndirdiğimiz dikkatli.bak.dms adında dosyayı herhangi bir text editör ile açtığımızda cevap karşımızda duruyordu.
    
    
FLAG: RDcxVWV3SUFLM29RazBGV1Rnb0dsbURpWDJnckg1MUgvZ09WWFZ mbkFBWXpsNCt5K2ZBMjI2TnRKKzJvZ29xV0lEZ0NSK1lIMklWRkRyOC9XbWpOcEE9PQ==

  • --Soru - 2 | Hala ısınmalardasın

Açılan sayfada doğrudan kaynak kodunu görüntüle yaptık ve script kodu oldupğunu gördük.
    
    
Zamandan tasarruf etmek için decode etmeye çalışmadan önce kopyalayıp console.log() verelim.
    
    
Bir hata karşıladı bizi hemen vazgeçmedik ve hataya göz atalım istedik ve bingoo.
  
    
FLAG: NjJJdTJZRzZkS2FTa1p4Wi91dFpsdWpMRmNyOExQTXdIYUFiMkY1ZEtsS3 gveUhGQkVyUFN5QWsxbUNIb2RZOTRyeGZiSHpUeGEyQ0puQ3NFSllENkE9PQ==

  • --Soru - 3 |  Herşey sanal, ağ gerçek

En gıcık sorulardan birisi bu bence , son saatlere girdiğimizde çözebildik Cisco bilsek belki daha kolay çözicez :D

İndirdiğimiz dosyanın içinden pcap dosyası çıkıyor, bizde WireShark ile incelemeye koyuluyoruz.
    
    
Paketi incelediğimizde url gezinmeleri nmap logları ve anlamsız paketler görüyorduk. İçerisindeki dosyaları export ettiğimizde de anlamsız dosyalar bulduk işimize yaramayacak bir dünya şey...
    
    
Ancak içerisinde işimize yarayabilecek tek bir dosya dikkatimizi çekti sslkeylog.log vardı. Bu nedir derseniz, secret log dosyasına sahip isek sunucu anahtarına sahip olmasak bile ssl üzerinden geçen trafiğin şifresini çözebiliriz.
    
    
Artık bu dosyaya sahip olduğumuza göre bunu Wireshark’a ekleyebiliriz. Edit>Preferences’e tıklayıp sol menüden Protocols>SSL ‘i seçiyoruz. (Pre)-Master-Secret log filename kısmından indirdiğimiz dosyayı seçip kaydediyoruz. Artık SSL üzerinden geçen trafiği de okuyabiliriz.
  
    
Tekrar Wireshark’a dönüp incelemeye devam ediyoruz. İnceleme esnasında 99037582138585721057129547823.pkt isminde bir dosyaya istekte bulunulmuş. 
    
    
İsteği daha ayrıntılı görmek için üzerine sağ tıklayıp Follow>Http Stream derseniz giden Get isteğini görebilirsiniz.
    
    
Yanıt olarak OK (200) dönmüş ama herhangi bir dosya gelmemiş. Bizde uzak sunucudan bu dosyayı indirdik. Dosyayı nasıl açabileceğimiz konusunda kısa bir araştırma yaptık ve Cisco’nun kendi cihazları için geliştirdiği bir network simulator olan Cisco Packet Tracer için oluşturulan bir dosya olduğunu bulduk ve programı indirdik.

 Programı açıp dosyasımızı içerisine çağırdık.
  
    
 Öyle aradık böyle aradık programın girmediğimiz yeri kalmadı ama işimize yarar bir şey bulamadık.
 En son Router cihazının config ayarlarını kaydetmemiz bizi bir sonraki aşamaya taşıdı.
    
    
Kaydedilen dosyayı açtığımızda username ve password bulunuyordu.
  
    
Bu şifreyi nasıl çözebiliriz araştırmasını yaparken online bir araç bulduk. (http://www.ifm.net.nz/cookbooks/passwordcracker.html)
Şifreyi yazdığımızda "flag md5(r0uterP@ss)" şeklinde cevap döndü ve md5 alıp soruyu çözdük.
    
    
FLAG: be4a5b6e929ad88d4f88ad7435ed2eb9    

  • --Soru - 4 | OBURIX’in şifresi

Karşımızda yine bir pcap dosyası çıkıyor, açıyor ve incelemeye başlıyoruz.
    
        
Sorunun adında bir ipucu vardı ve inceleme esnasında OBEX protokolü dikkatimizi çekti. Bu protokol dosya alışverişinde kullanıldığından dolayı, bluetooth ile png dosyası gönderilmiş oldugunu düşenerek png.chunk.data filtresi kullanarak png datasına sahip paketi bulmayı düşündük, gelen sonuçlarda info sekmesinde usom.png yazıyordu, doğru paketi bulmuştuk.

İlgili frame’e OBEX Protocol>Portable Network Graphics’e sağ tıklıyoruz ve Show Packet Bytes’ a basıyoruz. Flag karşımıza geliyor.
    
    
FLAG: KOJwaTdxRUoydk9Ea3VpTW8rRVM1UT09

 

  • --Soru - 5 | Emeğe saygı

Bizi çok uğraştıran sorulardan birisiydi. Gerçekten soruyu hazırlayan kişinin emeğine saygı duyulacak cinsten :)

Sayfayı açtığımızda “Cok calistik,cok. Emege saygi gosterin, kaynak belirtin.” şeklinde bir yazı karşılıyordu.
    

Kaynak belirtin kısmı bize bir ipucu veriyordu, bende baştan öyle yaptım yazılarımdan birinin altına kaynak olarak koydum :) sonra tıkladığımızda başka sayfa hem yavaş açılıyor hem değişiyordu.
    

Ekrana çıkan yazı bizi heyecanlandırmıştı. Kaynak belirtenlere cevap gönderdik diyor olması benim sunucuya bir giriş olduğunu söylüyordu. Öyleyse sunucuya gelen istekleri yakalamam gerekiyordu. Herhangi bir sniffer aracı işimi görecekti bende snifferı açıp beklemeye başladım. Kaynak gösterdiğim yere girip linke tıkladığımda yönlendirme yapıp geri referer isteği göndermiş oldu. 
  
    
Açıkçası sorunun böyle çözüleceğini hiç düşünmüyordum :)

FLAG: aFZPL0hkSjhvaThneGdIdkFMcUd1UFZLOGNhMGxGSG1lak1VbXlROFVG OFdxVWI3bjFYTW10bVVFMk5ZdTVQV3daRSsxWFZsbmZWZ3dLOFMveHZxQnc9PQ==

  • --Soru - 6 | Reklam arası bitti film başlıyor

Soru bize "dump.scm" adlı dosyayı verdi. Biraz araştırma sonucu .scm uzantılı dosya eski TV kutularındaki kanal listesi düzenleme formatıydı açmak için uygun editörü bulup indirdik ve dosyayı açtık.
  

Hızlıca linke giriyoruz ve çok sevdiğim filmlerden olan Interstellar filmini karşımızda buluyoruz. Filmin sahnesini izlerken arkadan kötü bir cızırtı sesi geliyor. Hemen videoyu mp3 e çevirip analiz ediyoruz.
    

FLAG: c6a107c3072414436a6acf122bf4f349

  • --Soru - 7 | Bir bakan var bir de aranan    

Soruya girdiğimizde alttaki hash karşımıza çıktı.

0827206450376af3dce61d788ddeba21f58dba35257fdb43c1872c096a36287f

Virustotal üzerinden hashi arattığımızda yorumlar kısmında bize bir link vermişti.

https://www.virustotal.com/tr/file /0827206450376af3dce61d788ddeba21f58dba35257fdb43c1872c096a36287f/analysis/

http://85.111.95.19/a5d8bccb8e1255fc72340eddab8be601-mobile01/cyb3rStar.zip (Pass: Cyberstar_2018!. )

  
    
Dosyayı indirip içinden çıkan uygulamanın, bir kopyasının uzantısını zip yapıp klaöre çıkararak içindekileri incelemeye başladık. \res\drawable dizinindeki resimler dikkatimizi çekti birer birer incelemeye başladık.
    
    
Fotoğrafları analiz ettiğimizde içerisinde her birinde thankyoucyberstar.gif isminde yaklaşık 200 dosya vardı.
    

Ancak sadece birinde farklı bir dosya bulunuyordu ortakoy.jpg içerisinde lakin oda şifreliydi.
    

Bir başka resmin exif bilgilerinde ise karmaşık karakterlerden oluşan string dikkatimizi çekti ve şifreli dosya için bu stringi kullandık şifre doğruydu ve bizi bir sonraki adıma götürdü.


 İçinden çıkan hadibul.b64 dosyası base64 ile şifrelenmiş bir dosyaydı hemen online bir decoder bulup (http://base64converter.com/) decode ettik. Dosyayı incelediğimizde apk dosyası olduğunu farkettik telefona kurup çalıştırdığımızda ise cevap karşımızdaydı.
 
    

FLAG: 05a24ab2b3f6e4d8309575dca5388eeb

  • --Soru - 8 | Karekod okuyucu

Giriş ekranı ve kullanıcıları listeleyen bir sayfa vardı, basit kombinasyonlarla giriş yapmayı denedik fakat bir sonuca ulaşamadık.

Ardından kullanıcıların bulunduğu sayfaya göz attığımızda "Yöneticiye özel oluşturulan QR kodu giriniz" ifadesi bulunuyordu. 
  
    
Hemen aklımıza SQL Inj. ile bir QR kodu oluşturmak geldi ve online bir siteden  ' or 1=1# şeklinde bir QR kod oluşturduk.
  
    
Oluşturduğumuz kodu servera gönderdiğimizde beklediğimiz sonucu almıştık kullanıcıları listelemişti. Bir tane kullanıcı (admin) ve iki tane hash değeri vardı.
    
    
Hash değerlerini decode ettiğimizde, hashlerden birinin değeri admin0123456789 du ve giriş yaptığımızda flag karşımızdaydı.
    

FLAG: TWtCM1JTRVZydWpqekNVQzBNR09NUHM2SFh2VTNQbFA5WE5PenQx MWtHa3lDL21ydnJEVXFjZUQycHA1Vloxc0dockh1M28xZXBnd3FkUXJrdEd4REE9PQ==

  • --Soru - 10 | Herşeyi de sana servis edecek değiliz

Servis gibi servis diye bir web uygulaması bizi karşılıyordu. Giriş yapma ve kayıt olma sayfaları vardı. Kayıt olma sayfasında kayıtların devre dışı bırakıldığı söyleniyordu. Giris yap sayfasındada demo ile giris yap şeklinde bir link bulunuyordu.

Linkin Adresi: ws/ws.php?islem=girisYap&kullaniciAdi=demo&parola=demo şeklindeydi. Kullanıcı adını admin olacak şekilde değiştirdiğimizde kullanıcı mevcut değil şeklinde mesaj alıyorduk. Bizde islem paramteresini değiştirerek ws/ws.php?islem=kayitOL&kullaniciAdi=admin&parola=admin şeklinde bir request yaptık. Ancak sonuç geçersiz method şeklindeydi.  Bu sefer yöntem değiştirerek GET metodunu POST metoduyla değiştirince kayit olabildik.

POST /86d37fde1020e969eca3d6436bddb4f5-04/ws/ws.php?islem=kayitOl&kullaniciAdi=admin&parola=admin&email=test HTTP/1.1
Host: 85.111.95.28
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://85.111.95.28/86d37fde1020e969eca3d6436bddb4f5-04/giris.html
Accept-Language: en-US,en;q=0.9
Cookie: PHPSESSID=ttjj1d2lcpoagr63qp2596fqb4
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 45

islem=kayitOl&kullaniciAdi=admin&parola=admin&email=test

Yani burada admin:admin şeklinde kayıt olduk. Giriş yaptığımızda admine özel bir sayfa bizi karşılıyordu ve bizden kod istiyordu.

Buralar çok güzel, giriş yap sen de gel bence.
====================================
Admin Kullanıcısı

Doğru cevabı girmen için deneme hakkın 10 tane. Bulduğunda ödülünü de alacaksın. Ona göre:  
    
Sayfanın kaynak kodunu görüntülediğimizde, yorum satırı olarak bir php kodu görünüyordu.
    


function generateRandomString($length = 6) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i <= $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

function decryptFile($source, $key, $dest)
{
   
    $key = substr(sha1($key, true), 0, 16);

    $error = false;
    if ($fpOut = fopen($destc, 'w')) {
        if ($fpIn = fopen($source, 'rb')) {
            // Get the initialzation vector from the beginning of the file
            $iv = fread($fpIn, 16);
            while (!feof($fpIn)) {
                // we have to read one block more for decrypting than for encrypting
                $ciphertext = fread($fpIn, 16 * (FILE_ENCRYPTION_BLOCKS + 1)); 
                $plaintext = openssl_decrypt($ciphertext, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
                // Use the first 16 bytes of the ciphertext as the next initialization vector
                $iv = substr($ciphertext, 0, 16);
                fwrite($fpOut, $plaintext);
            }
            fclose($fpIn);
        } else {
            $error = true;
        }
        fclose($fpOut);
    } else {
        $error = true;
    }
    //key gen with private algorithms 
    //same private algorithms used for check
    if($keys=generateRandomString(6)) {
        $k1 = strpos($key,$keys[0]);
        if($k1===false) {
            $errors=true;
        } else {
            if(strpos($key,$keys[1]) === false)
                $errors=true;
            else {
                if(strpos($key,$keys[2]) === false)
                    $errors=true;
                else {
                    if(intval($keys[5]) < 9 and intval($keys[5]) >= strlen('12345678')) {
                        if($keys[4] == $key[3]) {
                            if($keys[6] == rand(0,9)) {
                                return $keys;
                            }
                        }
                            
                    }
                }
            }
        }
    }
    return false;
}

function doNotGenerateRandomString($lenght = 4 ){
    ...
}

function keyChecker($keys) {
    ...
}

$pass = 'KENDI ADMIN PAROLANIZI BURAYA YAZIN';
$hash = md5($pass);
//anahtar uretiliyor
$key  = decryptFile(PATH, $pass, DEST_PATH);
$rand = generateRandomString(6);
//gecerli bir anahtar mı diye kontrol ediliyor
if(keyChecker($key))
    echo 'tebrikler';

    
Kodu incelemeye koyulduk. Bizden istenen algoritmayı çıkarmaya çalıştık. Bulduğumuz sonuçlar şöyleydi:

  • - sha1 ile kullanıcının şifresinin hashini al,
  • - hashin ilk 16 karakterini üretici key olarak kullan,
  • - keyin 1,2,3. karakterleri üretici key içinde olmalı,
  • - keyin 6. karakteri 8 olmalı,
  • - geçici keyin 4 karakteri keyin 5. karakteri olmalı,
  • - keyin 7. karakteri 0-9 arası random bir sayı olmalı (bunuda deneme yanılma yöntemiyle bulabiliriz)

Bu şartları sağlayan bir key oluşturmamız gerekiyordu.

Admin parolası için geçerli anahtarı dddd38<0-9> şeklinde oluşturduk.
Doğruluğu sağlandığında bize flagı vermiş oldu.
 
FLAG: U1RpeWtYWWN6ZEw3b1VqRnhPcVhFVlZBbmtMdjJhRmRkTnFYUUV0Nkg 5MGRacDUwOXlBKyt6NXVwSG9OOXRhNzgzaSsvVWh5Y2c3UTNYb29kTmhpWXc9PQ==


Siber Yıldız 2019 Soruları İndir / Download

Ctf meraklısı
@Ctf meraklısı demiş ki ;

Hocam kaynak belirtin sorusunda herhangi bir sunucumuz olmadığını düşünürsek nasıl çözebilirdik?

Mc Mccurlyface
@Mc Mccurlyface demiş ki ;

Son soruda sha1 fonksiyonunda true demesine ragmen neden hex gondermis gibi davrandik ? 

admin
@admin demiş ki ;

@Ctf Meraklısı Eğer ki kendi sunucunuz yok ise , Localde çalıştığınız zaman public ip üzerinden locale erisecek bir portlama yapmanız gerekirdi ve böylece dönen referer requestini dinleme şansınız olabilirdi diye düşünüyorum.

wwarriors üyesi
@wwarriors üyesi demiş ki ;

@Mc Mccurlyface haklısın sha1 fonksiyonunda true kullanınca söylenen algoritma doğru bir şekilde çalışmıyor, biz bunu kafa karıştırmak için yada kodu çalıştırmaya çalıştığımızda bizi yanıltması için yapıldığını düşünüyoruz.

YORUM YAPMAK İSTER MİSİN?

    Önerilen Video
    Sponsor Reklamlar
    Son Yorumlar
    Etiket Bulutu
    C#PopupFormOtomatikProgramBaşlatmaBaşlangıçBasitEkran Koruyucuc#ekran görüntüsümail göndermeexedllbirleştirmekIL MergePhpMSSQL BAĞLANTIGerçekIPRealTextBinaryConvertÇalışmaSüreHesaplamakBulmakCssjQueryHtmlScroll TopYukarı ÇıkOnMinimizeControlBoxSimge DurumunaKüçültInternetGetConnectedStateİnternetBağlantıKontrolŞifre MatikPassword GeneratorHash ŞifrelemeMD5SHA1SHA256SHA384SHA512Asimetrik ŞifrelemeRSASimetrik ŞifrelemeKriptoŞifrelemeAlgoritmaDESRC2RijndaelTripleDESKeyLogKlavye DinleTuş YakalamaGlobal HookDialogResultÇıkış MesajıUyarı MesajıFormClosingMySQLConnector/NetKullanımSoruCheckBoxListViewÇoklu SilmebiosdramexploitkontrolgüvenlikinteljavascriptrowhammerscriptPHPAdmin PanelResponsiveXtbadminFreeÜcretsizWifiWirelessKeysŞifreAnahtarPasswordKablosuz AğDepolamaŞifreler NeredeKablosuz ŞifreAndroidTelefonNasılYazılırProgramlama DiliHesap MakinesiSEONedirNasıl YapılırAnalizGoogleLinkÖzgünMobilKonuResim Robots.txtSite MapŞifreli GirişŞifreli FormŞifre KoymaŞifreli AçılışCompilingDebuggingDerlemeKarma ModMixed ModeApp.ConfigKurbanBayramMübarek OlsunBlogScriptYonetimAdminPanelText EditorMSHTMLEditorYazıDüzenleyiciEasyAppKolayUygulamaÇalıştırmaAkıllı TelefonKlavyeiOSKeyboardEl YazısıCalculatorMyScriptHand WritingDosya YöneticisiFile ExplorerFTPBluetoothRootTask ManagerGörev YöneticisiSystemTargetWeb Application PentestErrorShowHideHataGösterGizlePDOSelectInsertUpdateDeleteConnectSeçimEklemeSilmeGüncellemeMsSQLVeritabanıÇeviriçiDatabaseConverterDbConvertMaskeli IPGerçek IPTarayıcı Tespitİşletim Sistemi TespitTekil Ziyaretçi BilgileriAktif Ziyaretçi BilgileriZiyaretçi SayacıVirüsTemizlemeFirewallServiceSecurityServiceTimeServicePentestGüvenliksızma TestiuniscanwindowslinuxperlDosyaKlasörListelemekFileFolderListInternetDownloadUploadSpeedMonitorServisMsconfigStartupRunServiceIOSMatematikDenklemÇözümKameraKablosuzinternetHotspotPaylaşımAyarlarKaliLinuxSharedTerminalÖsymDuyuruTimeTimeZoneDateZamanTarihdate()time()FreelancerSerbestÇalışanJobsİşlerWebSiteVersionSürümGeçişUbuntuSunucuApachephpinfo()phpversion()FonksiyonHerseyiKopyalacopyallcopySızma TestiSQLMapWindowsPython810HotSpotWi-FiWlannetshhostednetworkAutoWlanJsGeri SayımTextAreaOtomatik KayıtSayacSaniyeCountDownXtbadminV2AjaxJavaScriptNumaraFormatPhoneNumberFormatTelefonNumarasıDebuggerDetectUnpackerDisassemblerSecurityReverseEngineeringAlgorithmMacDKHOSCTFCapture The FlagForensicTriviaIntelligenceCRC32CRYPTPASSWORD_HASHWin10StoreMağazaMicrosoftReInstallWSLPowerShellPOSTCyberSiberAdli BilişimHackerUSBCDLiveToolsBruterNmapMSSQL ServerMS SQL ExpressMS AccessOracleIBM DB2SybaseInterbaseInformixExceldBase DbfVisual FoxProMySQLConnectionŞifreleri BulCMDLaZagneEthernetTuxCutNetCutNetKillPerformansCronTabCronJobRestartStopStartBashShellWireSharkFlagUSOMBTKBase64QRÇözümlerWriteUpWrite-UpFinalReconOSINTToolScannerWebsite
    Bumerang - Yazarkafe