Ve 3 Nisan 2015 tarihinde ikincisi düzenlenen Pi Hediyem Var hacking oyununun çözüm yolu ile Raspberry Pi 2’yi kazanan talihli karşınızda!
KAYNAK KODU:
Hack 4 Career - Siber Güvenlik Blogu < ?php $username = 'misafir'; $secret = 'H4ck4C4r33r'; $pos = ''; if(isset($_GET['username'])){ $username = $_GET['username']; $username = strtolower($username); } if(isset($_GET['hash'])){ if (preg_match('#[0-9a-f]{32}#i', $_GET['hash'])) { $hash = $_GET['hash']; $hash = strtolower($hash); } } // Debug //print "
" . (hash("md5",$secret.$username)); //exit; if(isset($username) and isset($hash)){ // print "
" . $username; // print "
" . $secret; if(hash("md5",$secret.$username) == $hash){ $pos = strpos($username, "admin"); if ($pos !== false) { print "Tebrikler $username , artık en yüksek yetkiye sahipsin :)"; print "
Pi Hediyem Var çekilişine katılmak için bu ekran görüntüsünü ve çözüm yolunu Mert SARICA ile paylaşabilirsin"; } else { print "Merhaba $username , hala sefil kullanıcı yetkisine sahipsin :("; print "
Raspberry Pi 2 çekilişine katılabilmek için admin yetkisi ile giriş yapabilmen lazım!"; print "
Referans: https://www.mertsarica.com/pi-hediyem-var-2/"; } } else { $username = 'misafir'; $loc = "Location: " . "https://www.mertsarica.com/ctf/ctf2.php?" . "username=" . $username . "&hash=" . hash("md5",$secret.$username); header($loc); exit; } } else { $username = 'misafir'; $loc = "Location: " . "https://www.mertsarica.com/ctf/ctf2.php?" . "username=" . $username . "&hash=" . hash("md5",$secret.$username); header($loc); exit; } ?>
ÇÖZÜM:
https://www.mertsarica.com/ctf/ctf2.php sayfasının kaynak koduna bakılarak Et tu, Brute?
(Sen de mi Brütüs) cümlesinden bunun Sezar‘a ait bir söz olduğundan yola çıkarak gizlenmiş mesajın Sezar’ın Şifrelemesi ile oluşturulduğunu (ROT-3 kullanılmıştır) tahmin edebilirdiniz. Çözmek için ise Google’dan faydalanabilirdiniz.
Ortaya çıkan aşağıdaki PHP kodundan, Merkle–Damgård hash fonksiyonunun MAC (mesaj doğrulama kodu) olarak kullanıldığının ve bunun da hash uzunluk genişletme zafiyetine yol açtığını anlayabilirdiniz.
... if(hash("md5",$secret.$username) == $hash){ $pos = strpos($username, "admin"); if ($pos !== false) { print "Tebrikler $username , artık en yüksek yetkiye sahipsin :)"; ...
strpos fonksiyonu ile username parametresinde admin karakter dizisi (string) kullanıldığında, kullanıcıya yönetici yetkisi (admin) verildiği için, hash uzunluk genişletme saldırısından faydalanarak username parametresine admin karakter dizisini manuel olarak veya hash_extender aracı ile (deneme yanılma yöntemi ile secret değişkeninin 11 hane olduğunu bulacaktınız) ekleyebilir, yeni üretilen hash değerini de hash parametresi ile birlikte sunucuya göndererek başarıyla admin yetkisine sahip olabilirdiniz.
https://www.mertsarica.com/ctf/ctf2.php?username=misafir%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%90%00%00%00%00%00%00%00admin&hash=373fb330afbc0b1a5688ff4a3ef1b2a6
OYUNU BAŞARIYLA TAMAMLAYANLAR: Halit Alptekin, Deniz Parlak, Mert Arısoy, Alper DÖM, Melih Burak SARI, Mert TAŞÇI, Harun GÜLEÇ, Ali AĞDENİZ, Selim YILDIZ, Ceylan BOZOĞULLARINDAN, Ertugrul BAŞARANOĞLU, Cihad ÖGE, Kürşat Oğuzhan AKINCI (geç bildirim), Sipke Mellema
ÇEKİLİŞ ve KAZANAN TALİHLİ:
Başta kazanan talihli Ceylan BOZOĞULLARINDAN olmak üzere oyunu başarıyla çözen, katılan, destekleyen, sponsor olan herkese teşekkür eder, yeni oyunlarda görüşmek dileğiyle herkese güvenli günler dilerim.
14 comments
Evet hocam ortak noktasi var :)
Carsi olarak buyuk harfa karsiyiz sadece :)
Hocam yaziyi gorunce($secret = ‘h4ck4C4r33r’;)
gonderdigim crackme yi cozdugunuzu anlayabilirmiyiz :).Yoksa Daha bakmadiniz mi?
Yok henüz çözme fırsatım olmadı ama anlaşılan benzer bir nokta var :)
Sayenizde yeni bir açık daha öğrendim çok sağolun :)
:)
Hocam elinize sağlık böyle CTF\’ler oluşturup hediye veriyor olmanız işi gerçekten çok keyifli bi hale getiriyor. Ben CTF ile çok kısa bir süre uğraştım, çözdüm ama göndermedim. Onun dışında \”Et tu, Brute?\” gerçekten çok hoştu, bir gülümseme belirdi benim yüzümde, başka arkadaşlarda da olmuştur eminim. Uzun lafın kısası, elinize sağlık, umarım bir üçüncüsü daha gelir bu yarışmanın :) . İyi günler dilerim
Rica ederim.
Yakın zamanda üçüncüsü de gelecek ;)
uğraştım ama bir türlü bulamadım cevap bulabilmek için \” Sen de mi Brutus? \” demek gerekirdi :))
11 haneli olan secret değişkeni neydi? başta bruteforce yaparken baya merak etmiştim :)
$secret = ‘H4ck4C4r33r’;
e aynı hash :)
url ye hash değeri olarak ne girildiği görünmüyor ekran görüntülerinde
Teşekkürler, çok güzeldi, sayende yeni şeyler öğrendik..
Yanlız anlamadığım birşey var secret uzunluğu ne olursa olsun md5 değeri hep aynı çıkıyor, ben de bu yolu bulmuştum ama uzunluğu hesap etmedim hepsi aynı çıktığı için o ayrımın nasıl yapıldığını anlamadım.
O ayrımın nasıl yapıldığını yeni yazımda anlayacaksın :)
Resimde görünmeyen kısmı resimlerin altına kopyaladım.