Dünyayı Kurtaran Hacker Yarışması Sonuçu Adımları
Evet arakdaşlar adından da anlaşılacağı gibi, Dünyayı Kurtaran Hacker yarışması 16 Aralık 19:00 başlamış ve 21 Aralık 00:00 da sona ermiştir, toplam da 1599 kişi katılmıştır. Ancak yazma fırsatı buluyorum sizlere arkadaşlar, yarışma sorularına http://www.dunyayikurtaranhacker.com/site/questions adresinden erişebilirisiniz. Yarışmada 1. olan “Ex” rumuzlu hacker’ın tüm soruları çözerken izlediği yöntem ve metodlar kendi anlatımı ile şu şekildedir;
Bölüm 1:
Bu bölümde bir .exe dosyası veriliyor. Hikayeye göre suyu bulmanız gerekiyor.
Uzun yol:
Exe dosyasını bir disassembler’da veya debugger’da açınız. Örneğin, ollydbg bu iş için uygun ücretsiz bir çözüm.
Ollydbg altında dosyayı açın. Sağ tıklayın ve “Search for…” “binary string” yapın, (kısaca Ctrl B).
Exe’yi çalıştırıp kovanın sapını tutamadığınızda çıkan hata mesajının bir kısmını burada arayın.
“Yanlis”kelimesini aratınca ilgili kod öbeğini buluyorsunuz. Burada biraz yukarı çıktığınızda aşağıdaki gibi kodları ve referans edilen stringleri görebilirsiniz. Burada cevap anahtarı gözükmektedir.
Başka bir çözüm biraz daha kısa bir yol olarak; exe dosyası nispeten küçük bir dosya ve reference string’ler çok az, ollydbg’da sağ tıklayıp “Search for” “All referenced texts”’e bastığınızda listede ref edilen textlerde cevap anahtarı yine gözükmektedir.
Kısa yol:
Gelelim kısa yola, madem yarışmadayız zaman önemli, Unix ortamlarda çalışıyorsanız veya windows ortamında gnu tools yüklü ise çözüm size sadece tek satır uzaklıkta, konsol penceresi açın ve:
“strings su.exe|grep -i su” yazıp enter’a basın. Cevap anahtarı karşınızda, 10 saniyenizi aldı mı?
Bu komut ne yapar diye merak edenler için kısaca açıklamak isterim. Strings ile binary bir dosyadan printable karakter dizilerini listelersiniz. Buradan çıkan sonuçları grep’e atarak içinde “su” isimli diziyi ararsınız ve -i ile bu işi büyük küçük harf ayrımı olmadan yapmış olursunuz.
Bölüm 2:
Hackatolia’yı Google’da arayınca çıkan sonuçlarda bu isimde kayıtlı domainlere ait whois bilgileri de aramalarda çıkıyor. Emin olmak için yine bir terminal penceresi açıp, whois hackatolia.com yazıp enter’a basınca cevap anahtarı karşımıza geliyor.
Kullandığınız işletim sisteminde whois komutu yoksa free whois sorguları yapabileceğiniz sitelerde bu domain’i aratabilirsiniz.
Bölüm 3:
Bomba sorusunda sizden bir imaj dosyasını incelemeniz isteniyor. Exif bilgileri ilk bakılabilecek yerlerden biri. Resmin özelliklerine tıkladığınızda bu bilgiye ulaşabilirsiniz. Eğer resim düzenleme programları yerine hex kodlar daha çok hoşunuza giderse ve jpg dosyalarında exif datanın baştaki header’larda olduğunu biliyorsanız ya da daha zor bir şey olabilir şüphesi içerisindeyseniz, yaptığımı yapıp terminal penceresi açın, “hexedit Boom.jpg” yazıp enter’a basın. İlgili cevap anahtarı karşınızda.
Bölüm 4:
Harika bölüm isminin sizi aldatmasına izin vermeyin. Elbette packet.pcap dosyasındaki bir ftp trafiği. Wireshark ile açtığınızda tcp stream’i takip edin. Parola cevap anahtarı.
Daha da kısa yol olarak:
Her ne kadar bu küçük bir packet dump olsa da büyük dosyalarda wireshark makinanızı zorlayabilir. Siz de benim gibi el alışkanlığı önce tcpdump diyorsanız ve çokça FTP dump’larıyla uğraştıysanız bir terminal açın ve alışkanlıklarınızı yerine getirin:
“tcpdump -r packet.pcap -n -X|grep -A2 -i pass”
Cevap anahtarı tek hamlede karşınızda.
Bölüm 5:
Bu bölümde karşınıza ufak bir web sayfası çıkıyor. Kaynak kodu hızlıca incelediğimizde pack edilmiş daha doğrusu obfuscate edilmiş bir javascript kodu görüyoruz. uneval etmelisiniz.
Javascriptte şunu yazın bunu yazın diye uzatmaya gerek yok. Google’da “unpack javascript code“ diye arattığınızda karşınıza gelen bir script sitesini kullanabilirsiniz. Örneğin:http://dean.edwards.name/unpacker/
Kodu paste edin. Açılmış kod çok temiz olarak ne yapmanız gerektiğini söylüyor:
var variable=document.forms.myForm.key.value;var hash=calcMD5(“chA&a4R!nu”);if(calcMD5(variable)==hash){document.write(“Success, send key chA&a4R!nu”)}else{document.write(“Fail”)};
Bölüm 6:
Olur da bir şekilde motoru çok yorduysanız mola vermek için güzel bir bölüm. Herhalde herkes ne yapacağını biliyor bu soruda.
Bölüm 7:
Gelelim kıyamet alışverişine. Burada sayfanın kaynak koduna bakın, her ürünün hash değeri mevcut fakat ihtiyacımız olan ürün malesef bizlere uygun değilmiş. Uygun hale getirmek için hash değerini bulmamız gerekiyor. Burada ürünün hash değeri ne olabilir sorusunu cevaplamak lazım. Ürün isminin md5‘ini alalım. Bunu md5 hesaplayan bir programla veya md5 hesaplama yapabilen bir site yardımıyla veya bir terminal penceresi açarak:
“echo -n “Gas Mask”|md5sum” yazarak yapabilirsiniz.
ff17e6433b3bf9548a6ef169892a81e9 –
Bu hash değerini ürünün hash bilgisi olarak kaynak kodunda düzeltiniz. E tabi ürün bütçeyi aşıyor orayı da uğramışken düzeltin (hidden olan “price” alanı). Artık gaz maskeniz var.
Bölüm 8:
İpucuna bakalım. Burada kullanıcı adının ve parolanın ne olması gerektiğini görüyoruz. Kullanıcı adı sabit ama o da ne, parola sabit değil. date komutu ile sunucunun saatini alıyor, sonuna “simdi_tam_zamani” string’ini ekliyor ve md5‘ini alıyor.
Neyse ki çözüm basit. (Deterjan reklamı gibi oldu.)
Yanlış bir kullanıcı adı ve parola girerek başlayalım.
Sunucu saati karşımıza geldi. Örneğin; 05:01:02 olsun. Tam bu anda, sunucu bizden şu bilgileri girmemizi istiyor.
md5(“05:01:02“).”simdi_tam_zamani”
Olmuşla ölmüşe çare yok, geçmişe gidip bu string’i gönderemeyiz. Şimdi zamanı henüz gelmemiş bir tarihe ayarlayalım ve bir md5 hesaplayalım.
md5(“05:05:05“).”simdi_tam_zamani” gibi…
Sunucudan sürekli bu bilgileri isteyelim ve bunu loop’a sokarak yapalım.
Terminal penceresi açıp bash’te basit bir loop yapalım. Wget ile siteden sürekli istediğimiz değerler ile bilgi alalım. Aşağıdaki satırı yazıp enter’a basmanız sonucu verecektir:
while [ 1 ]; do wget “http://50.16.16.17/tamzamani/login.php?username=dunyayi_kurtaran_hacker&password=d8afaa7aaa20926f3466e26ecd5b8326simdi_tam_zamani” ; done
Sürekli sayfanın ürettiği sonuçlar dosyalara kaydedilecek. Doğru vakitte istenilen dosya ise cevap anahtarını içerecek.
Bölüm 9:
Sessiz oyun bölümünde bir packet dump var. Wireshark ile açınız. UDP trafiğini göreceksiniz. Birileri ya çok oyun oynamış ya da dosya isminden ve “sessiz oyun” ipucundan da belli olduğu gibi bir VoIP trafiği söz konusu. İnceleyelim. UDP paketlerinden ilgili stream’e tıklayıp decode as komutuna basın ve RTP protokolü olarak işaretleyin. Böylelikle bu trafiğin bir RTP trafiği olarak yorumlanması sağlanacak.
Telephony menüsünden RTP->Stream analysis yapın. Payload ‘u kaydedin ve dinleyin. Biri size bir şeyler söylecek.
Bölüm 10:
Burada ipucunda da belirttiği gibi reverse engineering ile zaman kaybetmeyin. Tek yapmanız gereken basit bir memory manipulation tool. Ben burada tsearch’ü kullandım. Google’da ararsanız onlarca kopyasına denk gelebilirsiniz, başka tool da kullanabilirsiniz.
Oyunu açıp tsearch ile uygulamanın belleğine erişin. Elinizdeki para miktarını arama özelliği ile bellekte arayın. Daha sonra oyunda bir el oynayın ve para miktarı değişsin. İkinci aramayı yapın, gerekiyorsa adımı tekrarlayın. Bellek adresini bulduğunuzda editleyin ve ne kadar paraya ihtiyacınız varsa en az o kadar girin. Cevap anahtarı gözükecek. Para bu soruda mutluluk getirdi.
Bölüm 11:
Kredi kartı sorusunda telefon ile bazı tuşlara basılıyor ve sizden bunları decode etmeniz bekleniyor. Öncelikle elimizdeki veriyi biraz sadeleştirelim. Audacity veya benzer bir program ile ilgilendiğimiz alanı kesip alalım.
Amacımız DTMF kodlarını dosyadan almak olduğu için diğer taraflar kullanacağımız yazılımın kafasını karıştırmasın. Windows ortamında dtmf decoder isimli yazılımı aratıp indirirseniz bununla çözebilirsiniz. Eğer gürültü yoksa başarılı bir yazılım. Bunun dışında basit bir yol olarak şu siteyi öneririm.http://www.dialabc.com/sound/detect/
Buraya sadeleştirdiğiniz dosyayı upload ettiğinizde dial tone’ları alacaksınız.
Eğer bu yöntemler çalışmasaydı yıllar evvel kendi yaptığım bir çalışma vardı onunla deneyecektim. Machine learning algoritmaları kullanan bu yazılım gürültülü ortamlarda bu sesleri süzüp alıyor ve sınıflandırıyor. Neyse ki bu kadarına gerek kalmadı.
Bu teknik ile dizilerde, filmlerde karakterlerin aradığı numaraları tespit edebilirsiniz. (Uyarı: Bu teknik muhteşem yüzyılda çalışmayabilir.)
Bölüm 12:
Bu başlarda yaptığım sorulardan değildi. Rar dosyalarının kriptoları oldukça iyidir. Güncel versiyonları AES kullanıyor. Dolayısıyla ya verilen hikayedeki kelimeler ile nokta atışı bruteforce yapacaktım ya da başka bir çözümü vardı. Hikayede geçen kelimeler ile word list oluşturup elcomsoft’un rar cracker’i ile denemelerimden bir şey çıkmadı. Zaten oluşturduğum word listler çok kısa olduğu için birkaç saniyede olasılıklar tükeniyordu. Bay Ramatlasan mı Bayram atlasan mı acaba derken bu soruyu sona bırakmaya karar verdim.
Bilgi toplamak ve elinizdeki verileri doğru analiz etmek bu işlerde sonuca ulaştıran yegane aktivitedir. Bilgi toplamak, Onur Bey’i tanımak derken facebook’ta sayfasına umutsuzca denk gelmek her şeyi çözmüştü. Like kısmındaki abinin isim ve soyadı ile denediğim kombinasyonlar sonunda tuttu.
Bölüm 13:
Bu bölüm oldukça kolaydı. Önceden bildiğim bir güvenlik açığıydı ve bu zafiyeti detaylıca incelemiştim, görür görmez tanıdım. Hem open source exploit hem de ElcomSoft’un cracker tool’u bu açıklığı iyi şekilde değerlendirebiliyor.
Açıklık kriptolu bir zip dosyasında şifreli olduğu bilinen açık bir bölümünü bildiğiniz zaman işe yarıyor. Winzip’i yazan yazılımcılardan biri seed’i hesaplarken toplama işlemini yapmayı unutuyor veya kodu pack ederken packer bu kısmı atıyor ve winzip’in binary’si zayıf bir şekilde dosyayı encrypt ediyor.
Amacımız bilindik.jpg’i kullanarak bilinmedik.zip’deki ufak key space’i taramak ve dosyayı decode eden anahtar ile dosyanın tamamını açmak.
Kolaylık olarak Elcomsoft’un advanced archive recovery tool’unu tavsiye ederim. Plain text attack moduyla dosyayı açabilirsiniz.
Open source olan tool ile de bunu yapabilirsiniz, güncel versiyonu çıktı mı araştırmadım ama eskiden manuel bir patch etmek gerekiyordu bir yerini. Yoksa key space reduction yaparken bir ufak bug’ı vardı anahtarı atlıyordu. Güncel versiyonu çıktıysa bu bölümü fixlemiş olabilirler. Bir alıştırma ödevi olarak okuyucuya bırakıyorum.
Bölüm 14:
Bu bölüm oldukça kolaydı, ilk başta ascii’ye mi çevirmemiz lazım acaba kartların üstündeki rakamları derken çözüm sandığımdan da basit çıktı. 8 adet kart var. 8 bit = 1 byte.
Kapalı kartlar 0, açık kartlar 1.
Videoyu izleyin ve not aldığınız rakamları ascii’ye çevirin.
Hesap makinası ile tek tek uğraşmayın tabi.
Online converterlar işinizi görür:http://www.roubaixinteractive.com/PlayGround/Binary_Conversion/Binary_To_Text.asp
Bölüm 15:
Log yönetimi bölümünde bir log dosyası var ve wireless parolasının kırılabilmesi için gerekli datayı içeriyor. Parola aslında konsepte uygun tahmin edebileceğiniz bir şey. Zaman kaybetmemek için bunu arka planda çalıştırıp bıraktım. Genelde bu tür şeylerde başarılı word list “rockyou” kullanıyorum. Yine işe yaradı. Yarışmalarda eziyet olmasın diye genellikle rakam kombinasyonları soruluyor. Şimdi de durum böyleydi. Aircrack-ng kullanarak bruteforce yaptım. GPU kullanarak bunları daha hızlı çözebilirsiniz. Ben normal CPU’da yaptım.
Bölüm 16:
Bu bölüm basit bir kripto sorusu var. Şifrelenmiş text’i çözmeye çalışıyorsunuz. CTF ve konferansları takip edenlere bu soru tanıdık gelebilir.
Substitution, caesar, atbash, rot vb. temel teknikleri çözmek için crank yazılımını öneririm. Bir dakika gibi bir sürede bu sorunun cevabını alabilirsiniz.
http://crank.sourceforge.net/downloads.html
Yarışma olduğu için zaman kaybetmeyin diyorum, yoksa elbette bu temel teknikleri bilmiyorsanız arama motorlarına bakmanın tam zamanı. Eğlenceli şeyler. Kağıt kalem ile de çözebiliyor olmanız gerekir.
Bölüm 17:
Kolay bir exploit bölümü. Sunucuda çalışan forum yazılımının ismini arattığınızda exploit koduna rastlıyorsunuz. Sıfırdan açığı bulma ve exploit’ini yazmakla uğraşmanıza elbette gerek yok.
Exploit kodu size sunucuda istediğiniz kodu çalıştırma hakkı veriyor, tabi web sunucu haklarıyla. Root almanıza gerek yok, etrafa bakındığınızda flag.txt dosyasını göreceksiniz. /home/kamil
Bölüm 18:
Bu bölümde URL’e dikkat ederseniz SEO friendly bir url göreceksiniz. index.php’ye parametre olarak sırayla kullanıcı ve komut geliyor. user’i admin ile, view’i edit ile değiştirirseniz administrator panel’e geleceksiniz ve burada Ekle link’ine basmalısınız. FTP ile bağlanmanızı belirten bir mesaj çıkıyor. Bağlanın dosyalara bakın, aradığınızı bulacaksınız.
Bölüm 19:
Beni zorlayan sorulardan biri oldu. Ekranımın brightness’i biraz düşük ve renk körüyüm. Galiba bunlarla ilgili.
Biraz uğraştım masadaki biber gazı görünümlü resimden şüphelendim, hexedit vb. derken GIMP ile resmi incelemeye başladım. Invert ettim bir şey göremedim geri aldım, value invert ettim ve anahtar oradan bana bakıyordu.
Bölüm 20:
Zor bir bölümdü bence. Steganography’den şüphelendim. Araştırdım durdum. Resimleri kesip http://www.google.com/imghp üzerinde image search yaptım. Logoyu görünce tanıdık geldi aslında. Sağ taraftaki resim hakkında da bilgi topladım. Heist kelimesi yine ipucu veriyordu.
Security Pacific Bank, heist derken sonuca ulaştım. Stanley amca’nın marifetleri.
Bölüm 21:
Ses dosyasını dinlediğimizde dosyanın başında garip sesler duyuyoruz. Audacity ile baktığımda herhangi bir şey göremememe rağmen konu hakkında biraz araştırma yapınca sonic visualiser yazılımına denk geldim. Bu yazılımın spectrogram özelliği var. Layer olarak eklediğinizde (Layer menüsünden add spectogram’ı seçiniz) gizli mesajı görebilirsiniz.Göremiyorsanız alıcınızla değil görüntünün boyutlarıyla oynayın.
Bölüm 22:
Bir vmem dosyası var. Memory dump. Volatility tool ile bu dump’ları inceleyebilirsiniz. Forensics işi yaptıysanız bu tool ile baya bir haşır neşir olmuşsunuz demektir.
Aslında çok detaylı bir kullanımı var ama size bu soruyu çözecek kadar temel hashdump bilgisi vermek için birkaç satır karalıyorum:
-f ile dosya ismini veriyoruz. hivelist ile ihtiyacımız olan system ve sam bilgilerini alıyoruz. Bunların offset’leri önemli. O noktalara gidip ilgili verileri toplayacağız.
vol.py -f 564d0ae0-f8f6-a6bf-653e-e43a6d9d9fcd.vmem hivelist
Bir çok satır gelecek fakat bize bu ikisi lazım:
0xe1540b60 0x08216b60 \Device\HarddiskVolume1\WINDOWS\system32\config\SAM
0xe10182f8 0x020d62f8 \Device\HarddiskVolume1\WINDOWS\system32\config\system
İlk kolon offsetler. Aslında sağdakilerin virtual mapteki yerleri yani bizi ilgilendiren kısım.
-y ve -s ile bunları volatility’nin hashdump komutuna verelim:
vol.py -f 564d0ae0-f8f6-a6bf-653e-e43a6d9d9fcd.vmem hashdump -y 0xe10182f8 -s 0xe1540b60
Bu noktada bkhive ile alternatif çözümler olsa da hashdump ile biraz daha pratik gideceğim.
Gelen hashdump’lar arasında flag var. LM/NTLM hashleri sizi rahatsız edebilir.
İsterseniz john ile ama tavsiyem rainbow table’lar ile bu hashleri kırınız.
Ya da eğer benim gibi şanslıysanız cracker.offensive-security.com ‘dan priority kodunuz vardır.
Cevap saniyeler içerisinde karşınıza gelir.
Kısa yol:
Çalıştığım şirket için pen-test yaparken 40-45 kadar vmem’e rastlamıştım. Bunların hashdump’larını hızlıca alıp unique hale getirip açmam gerekiyordu. O dönem find’in -exec parametresi ile çalıştırmak üzere çok basit bir bash script’i yazmıştım. Volatility’ye wrapper gibi çalışan bir script ve 40 45 imajı otomatik text file olarak almamı sağlamıştı. Sizinle paylaşıyorum:
hashthese.sh:
#!/bin/bash
if [ ! -f “$1” ];
then
echo “Dosya yok.”
exit
fi
sam=$(vol.py -f $1 hivelist 2>&1|grep “config\\\\SAM”|awk ‘{print $1}’)
syst=$(vol.py -f $1 hivelist 2>&1|grep “config\\\\system”|awk ‘{print $1}’)
vol.py -f $1 hashdump -y $syst -s $sam
Eğer sizin de böyle çok dosyayı incelemeniz gerekirse veya bir gün yarışmada denk gelirse tek komutta hash’lere ulaşabilirsiniz:
./hashthese.sh 564d0ae0-f8f6-a6bf-653e-e43a6d9d9fcd.vmem
Bölüm 23:
Bu kolay bölümlerdendi. “Gerçek şifreleme” Truecrypt yazılımını size anımsatıyorsa gerisi oldukça kolay. Şans mıdır ayarlama mıdır bilmiyorum bugünlerde Elcomsoft truecrypt için bir bruteforce yazılımı da çıkarıyor. Güncel bir konu. Anımsamak daha kolay oluyor.
Macarca bir ipucu var. Gel macarca wordlist dene diyor. Bruteforce’a geçmeden önce kripto konusunda macarları araştırdım. Pek bir şey bulamadım.
Hungary wordlist diye arattığımızda gelen wordlist’i kullanmaya başladım. Elcomsoft’un ürününü değil Truecrack yazılımını kullandım. Yanlış kelimesinin macarcası parolaydı. Flag dosyası encrypted dosyada bulunuyordu.
Bölüm 24:
Bu soruyu en son yaptım. Aslında random() numaralar verilse 50 gibi bir şey gelirdi, 2/3‘unu aldım 33.33 çıkıyor. Ama ortalamanın bundan da düşük çıkacağı konu vergi olunca daha büyük ihtimal gibi geldi bana. 24 ile 30 arasında bir şey girmem gerekliydi ben 27 verdim. Optimum rakam son sonuçlara göre 23 çıkmış. Fena değil hata payı ama bir miktar şans elbette vardı.
Bölüm 25:
Bu soru cevabını bulduğumda gerçekten sevindiğim bir soruydu. İlk gece bulamadım. Aslında Şirince’nin koordinatlarını yazmıştım ama sanırım ya saat geç olduğu için E ve N değerlerini ters girdim ya da biraz kaymış koordinatlar girdim. O gece olmadı. İstanbul, Cape town derken veri girmememiz gerektiğini düşündüm. Geoip kullanıyorlarsa ya DB’den sorgulanıyordur diye sql injection ya da komut satırından exec ile çalıştırıyorlarsa command line injection yapmalıyım diye düşündüm. Boşuna…
Ertesi gün toplantı odasında yine toplantıyı pür dikkat (!) dinlerken masada sunum için kullanılan aletten denemeleri yaparken dün bir şeyi atlamış olabilirim diye tekrar denedim ve tamamdı. Kıyamet beklentisi varken pencereden uzak kapıya yakın oturmanın bir kere daha ne kadar önemli olduğunu anlayıp topuklayıp toplantıdan çıkıp odamdaki bilgisayardan yarışmacı key’imi alıp cevabı gönderdim.