Pentest Challange: Necromancer (Part 1)

Belvando

Üye
3 Haz 2017
249
15
Mantı V2
Arkadaşlar merhaba

Bugün sizlere uzun zaman boyunca çözmeye uğraştığım bir CTF challange olan Necromanceri çözeceğiz.

Nekadar diğer CTF challangelarda söylemiş olduğum "Bu CTF şuana dek beni en çok zorlayan CTF diyebilirim" sözünü yeniden söylüyorum.

Şurdan rahatlıkla indirebilirsiniz
https://download.vulnhub.com/necromancer/necromancer.ova
Eğer indiremediyseniz şuradan rahatlıkla sayfasına gidebilirsiniz
https://www.vulnhub.com/entry/the-necromancer-1,154/

CTFe başlamadan önce şunu belirtmek isterimki bu CTF diğerlerine oranla farklı bir teknik kullandığından sizin bilgisayarınıza zarar verebilir.
İlerledikçe dediğimi anlayacaksınız.


Başlayalım,

Bağlı olduğumuz ağın geçitini öğrenmek için komutumuzu giriyoruz.
route



Ağ geçitini öğrendikten sonraki işlem ağda tarama yapmak olacaktır.
zenmap



Bu sefer farklılık olması için zenmapten başlangıç yaptım.
Ve 192.168.56.101 ip adresinini bizim sanal makinamız olduğunu anlıyorum.
Zenmapten devam ederek port taraması yapıyorum.




Ama hiçbir port açık değil.
Daha sonra tüm portları taraması için açık bırakıyorum ve uzun bir süreden sonrada hala herhangi bir portun açık olmadığını öğreniyorum.

Şuan itibari ile hiçbir sızma yöntemi bulamadık.
Birkaçkez sanal makinanın ağ yapısını değiştirerek açmaya çalıştım ve aynı sonuçlar elime geçiyor.
Uzun uzun düşüncelerden sonra bir ağı kontrol etmek aklıma geldi.
Wiresharkı açtığımda sanal makinadan bana bir istek gönderildiğini fark ettim.



Burada bizim 4444 nolu porta paket gönderdiğini ve bizde açık olmadığından ulaştıramadığından bende 4444 portunu dinlemeye aldım.
nc -lp 4444



Ve bize base64 ile şifrelenmiş bir metin yolluyor.
Bunu decode etmek için konsolu açıp komutumu giriyorum.
base64 -d (şifremiz)



Güzel bir hikayeye benziyor ve ben bunu düzgünce okumayacağım.
Ama önemli noktaları bakarakta belirleyebiliriz.
Bize md5 ile şifrelenmiş bir flag vermiş, ve en altta u666 yazmakta en başta nekadar anlamsız bir ibre olsada daha sonra gerçekten hayat kurtaran bir kısmımış.
İlk olarak md5 hashi çeviriyorum ve "opensesame" yanıtını alıyorum.
Daha sonra belki bir port açılabilmiş olabilceğini düşünerek 666 portunu tarattım.
nmap -sT -p 666 192.168.56.101

Ve bir sonuç yok.
Ya "u" hanesi UDPyi simgeliyorsa?
nmap -sU -p 666 192.168.56.101



Ve "u" ibresi UDPyi anlattığını anladık.
Ozaman başlayalım.

nc -u 192.168.56.101 666



Enbaşta hiçbir şey olmasada bize vermiş olduğu flagı girmemizi istiyordu ve bunu yerine getirdim.



Yine güzel bir hikaye ile bizi baş başa bırakıyor.
Tabiki ben Belvando bunu düzgünce okurmuyum tabiki hayır.
Bize bir flag vermiş ama bizim gelecek zamanlarda işimize yaramıyacak.
(Zaten kıramamıştım :D)
Ama 80 sayısından bahsediyordu tabiki her aklın ilk düşündüğü şey http.
Hemen bağlanıyoruz.



Yine herzamanki gibi konuşuyor, ve biz yine dinlemiyoruz.
Yapılabilcek bişey olmadığından hemen dirb aracımı kullanıyorum.



Çıkan sonuçlardan işe yarar birşey çıkmadı.
Yeniden index sayfasına gidiyoruz ve yapıcak birşey arıyorum.
Source kodlarında bir şey yok.
Cookielerde birşey yok.
Vb. şeylerde birşey yok.
Sonra doğru ilerleyip resimi indirdim.
Resime binwalk ile baktığımda içinde bir zip olduğunu gördüm.
binwalk pileoffeathers.jpg



Binwalkın extract özelliğiyle içindeki zip doyasını çıkartıyorum.
Bu çoğu CTF lerde kullanılan bir yöntem olduğundan işinize yarayacak bir bilgi daha.
binwalk -e pileoffeathers.jpg



Resimi açtıktan sonra bir dosya içerisinde bir txt dosyası beni bekliyordu.
Txt dosyasını açınca yine bir base64 ile şifrelenmiş bir yazı ile karşılaştık.



Çözmek için yine aynı işlemi yapacağız.
base64 -d (şifre)



Karşıma bir uzantı çıktı ve bunu tarayıcımıza yapıştırınca bizi hemen bir sayfaya atmakta.



Evet yine benzer bir sayfa ile karşımızda.
Tabiki ilk resimi indirdim, ama içi boş çıktı.
Daha sonra source kodlarına baktım ve yine birşey çıkmadı.
Cookiede boş.
Uzun bir süre boyunca uğraştım ve hiçbir sonuca varamadım.
Malesef bunu yapmak istemesemde çözmek için 1 gün uğraştım (abartmıyorum) sonra zoraki bir şekilde bunu çözen yabancı bir kaynaktan çözüme baktım.
Ve bir CTFde yapılmaması gereken bir şey yaptıklarından ben bunu çözememişim.
Bizden güzel bir wordlist ile tarama yapmamız istenmekteymiş.
Bunun için özür diliyorum ancak yapmam gerekiyormuş.


Yapılan işlemde /talisman adında bir uzantıyı bize sunuyordu.
Uzantıya girdiğimde bir dosya indirildi.
İndirilen dosya bir ELF dosyasıydı.
En başta çalıştırdım ve bir hata olduğu burada açık bir şekilde görünüyor.



ELF dosyası yazılırken bilerek hata yapılmış olacakki bizden tersine mühendislik yapmamız istenmekte.
Gelin görünki bu beceride bende bulunmuyor en yakın zamanda öğrenmeye çalışacağım.
Bunun için Par4d0x1D hocamdan yardım istedim ve beni sağolsun kırmayıp yardım etti.
Kendisine çok teşekkür ediyorum.

Ve buda Par4d0x1D hocamızın bana yolladığı cevap.

Öncelikle uygulamanın içerisinde yer alan sembollere göz atalım,

Kod:
[0x080485b5]> dc
[0x080485b5]> fs symbols
[0x080485b5]> f~chantToBreakSpell
0x08048550 1 chantToBreakSpell
0x08048a37 2795 sym.chantToBreakSpell
"chantToBreakSpell", bu methoda erişim direkt olarak "sym.wearTalisman" veyahut "sym.main" üzerinden yapılmamakta, myPrintf adında bir fonksiyon üzerinden erişiliyor - her neyse ileriki safhalarda ihtiyacımız olacak.



Farkındaysan uygulama bir "user input" almakta, bu da aklımıza hemen herhangi bir hafıza taşması olasılığını getirmeli. GDB üzerinden uygulamanın PID'ine bağlanıp, yüksek miktarlarda karakter girdiğimde de bunu gözlemlemiş oldum. Tamı tamına 32 karakter sonrasında, gelen verilerin spotladığı bellek konumuna sıçramakta. Hatta şu tarz bir şekilde teyit de edebilirsin,

Kod:
gdb-peda$ run <<< $(for i in {1..32}; do echo -n A; done; echo -n BBBB)
[..]
Legend: code, data, rodata, value
Stopped reason: SIGSEGV
0x42424242 in ?? ()
0x42424242 -> BBBB'ye denk gelmekte zaten. Devam edelim, overflow meydana geldi, peki nereye sıçrayacağız? Tabii ki de, hiç çalıştırılmamış lakin sembollerimizden birisi olan "sym.chantToBreakSpell"a, yukarıda da görüldüğü üzere konumu "0x08048a37" olarak belirlenmiş.

0x08048a37'in Little Endian karşılığı, baytların ters çevrilmesi - yani 0x378a0408. Bu noktaya sıçramak için, az önce BBBB olarak belirlediğimiz noktaya bu veriyi giriyoruz.

Kod:
gdb-peda$ run <<< $(for i in {1..32}; do echo -n A; done; printf "\x37\x8a\x04\x08")
Ardından,

Kod:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
You fall to your knees.. weak and weary.
Looking up you can see the spell is still protecting the cave entrance.
The talisman is now almost too hot to touch!
Turning it over you see words now etched into the surface:
flag4{ea50536158db50247e110a6c89fcf3d3}
Chant these words at u31337
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Görüldüğü üzere, bayrağımız "flag4{ea50536158db50247e110a6c89fcf3d3}".


Ve yapılan işlemden bize bir port ve flag vermiş.
Bende flagı çevirdim ve "blackmagic" flagini elde ettim.

Hemen bende bağlanmak için netcatimi hazırlıyorum.
nc -u 192.168.56.101 31337



Girdileri verdiğimde bana yine benzer bir sonuçla geri döndü.
Uzantıyı yine girdiğimde yine benzer bir sayfaya yolladı.



Bu sayfada anlayabildiğim "İşte karşında necromancer abimiz".
Aynı şekilde necromancer derken bir uzantıya gönderen bir linkle belirtilmiş.
Sayfayı aşşağıya indirdiğimde bir yazı ile daha karşılaştım.



Sonra gidip belirtiği linke tıkladığımda bir "necromancer" adında dosya indirdi.
Ve gariptirki dosyayı indirdikten 15 saniye sonra leptobumun fanı bir güzel üflemeye başladı.
Masaüstündeki işlemci yükünü izleyen eklentime baktığımda gerçekten zorlandığını gördüm.



Aynı şekilde ilerlerken muhtemelen bir hata ile karşılaşıp sanal makinamla iletişim kuramıyordum.
Tshrak ile sanal ağı dinlemeye aldım ve yeniden bağlanmaya çalışırken herhangi bir cevap veremediğini gördüm.



Tabiki bunun çözümüde sistemi yeniden kurmaktı.
Ancak bağlantının koması normalde olmaması gerektiğini ve işlemcimin çıldırmasının her indirme linkine tıklamamda gerçekleştiğini anladım.
(Yaklaşık 6 kez kurup sildikten sonra :) )
Muhtemelen CTFi hazırlayan kişinin oynayan kişiyi yeniden ayıltmak için yapmış olduğu bir hareket olacakki, bunu yerine getirebildi.




Konumuz devam edecektir.
Yeterince uzun bir konu olduğundan 2 part halinde yapmaya karar kıldım.
Diğer konuya hemen şuradan erişebilirsiniz.
http://www.turkhackteam.org/siber-g...allange-necromancer-part-2-a.html#post7175170
 
Son düzenleme:

Anonim6

Yeni üye
29 Şub 2012
0
5
Ellerine sağlık, gayet anlaşılır ve kesin bir Write-Up olmuş. Forumda, onca çöp konuyu eleştiren, zaman zaman yakınan insanların bu tarz konularda tek "destek" mesajı olmaması ise durumumuzu gayet sade bir biçimde özetliyor. Yazılarını keyifle okuyorum, senin de bir o kadar keyifle yazdığın apaçık ortada. Devamı gelsin lütfen :)
 

Belvando

Üye
3 Haz 2017
249
15
Mantı V2
Ellerine sağlık, gayet anlaşılır ve kesin bir Write-Up olmuş. Forumda, onca çöp konuyu eleştiren, zaman zaman yakınan insanların bu tarz konularda tek "destek" mesajı olmaması ise durumumuzu gayet sade bir biçimde özetliyor. Yazılarını keyifle okuyorum, senin de bir o kadar keyifle yazdığın apaçık ortada. Devamı gelsin lütfen :)

Güzel yorumunuz ve desteğiniz için teşekkür ederim.
 
Ü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.