Umut Tosun

I love low level stuffs and cyber security

Hackingwars CTF Rev100/Rev200 Çözümleri

04 Jan 2017 » Cyber Security, Reverse Engineering

1-2 hafta önce yapılan Prodaft‘ın düzenlediği HackingWars adlı Ctf yarışmasını duyanınız, hatta katılanınız olmuştur.

Bu yazımda ctf teki reversing100 ve reversing200 ün çözümlerini yazacağım. Aslında ctf başladığında çok heyecanlıydım  sonunda reversing le ilgili bir şey yapacağım için fakat reversing sorularının linux üzerinde yapıldığını gördüğümde büyük bir hayal kırıklığı yaşadım. Çünkü linux üzerinde reversing le ilgili herhangi bir tool un adını dahi bilmiyordum. İlk önceliğim disassemble ve debugging için tool aramak oldu. Disassemble etmek için “objdump“, debugging içinde “gdb” araçlarını kullandım.

O zaman ilk önce rev100 ün çözümünü yapalım.

Rev100

İlk önce programı çalıştırıp neler olduğunu görelim.

HackingWars

Bizden bir şey girmemiz isteniyor.

HackingWars

Girdiğimizde ise ekrana “basit düşün” yazısını basıyor. Şimdi kolları sıvayabiliriz.

objdump” aracı ile programımızı disassemble edelim.

HackingWars

Evet, şimdi programımızın assembly halini “disassemble.txt” dosyasından görebiliriz. İlk aklıma gelen fikir programın bizden önceden belirlenmiş bir keyi girmemizi beklediğiydi. Fakat herhangi bir karşılaştırma işlemi göremedim assembly kodlarında. Biz ne girersek girelim program “think simple dude!” yazısını ekrana bastırıyor. Bunu gördüğümde ise büyük ihtimal hiç çağırılmayan bir fonksiyonun olabileceği ve eğer bu fonksiyonu zorla çağırabilirsem flag e ulaşabileceğimi düşünüp assembly kodlarını incelemeye başladım.

Assembly kodlarında bir fonksiyonun başladığını aşağıdaki gibi bir yapı gördüğümüzde anlayabiliyoruz.

push rbp
mov  rbp, rsp

disassemble.txt” dosyasını incelediğimde, hiç çağırılmayan bir fonksiyonun olduğunu gördüm. Kafamda zafer müzikleri çalmaya başlamıştı bile 🙂

0x4005b6” adresindeki fonksiyon programın hiçbir yerinde daha önce çağırılmamış. Bizim yapmamız gereken programın akışını bu adrese yönlendirmek. O zaman işe koyulalım.

gdb rev100” komutu ile programı gdb debugger ında açalım. Daha sonra 0x4004c0 adresine (entry point) breakpoint koyup programı run komutu ile çalıştıralım. Şimdi sıra “büyük atlamaya” geldi. “jump *0x4005b6” komutu ile atlamamızı yapıyoruz.

HackingWars

CONGRATS!!

Ekranda çıkan yazıyıda hextostring sitelerinden birinde çevirirsek flagimizin “ctf_{ecaf62e96c862336b09b6fb3d2038a6ef960e67e}” olduğunu görüyoruz.

Rev200

Bu soruda bize bir pdf dosyası veriliyor. Bu pdf içerisindeki flag i bulmamız isteniyor.

Pdf dosyasını bu siteye yüklediğimizde şöyle bir sonuç alıyoruz.

HackingWars

Aşağıdaki kısımda görüldüğü gibi bir javascript kodu bulunmakta. Bu javascript kodunu çalıştırdığımızda ise flag i elde ediyorduk.

Javascript kodunu normal bir html sayfasından çalıştırabileceğimiz gibi online siteler üzerinden de yapabiliriz. Ben bu siteyi kullandım.

Flag:CTF_{63c324a79ae311d86077b644517423413efeb0f8}

Kusura bakmayın reversing300 ve reversing400 ün cevaplarını yazamıyorum çünkü ctf i bırakmak zorunda kaldım. Bu yazımda bu kadardı, en kısa sürede görüşmek üzere 🙂