İnternet, bilgi, bilişim güvenliğine dair her türlü karalamalara sahiplik yapan kişisel bir blog.

Underdist: 3 Level 1 çözümü

Merhaba arkadaşlar. Bu yazımda Underdist 3 vuln labında ilk levelin çözümünden bahsedeceğim. İlgili makinayı sizde buraya tıklayarak indirebilir, kendi sanalınızda çözebilirsiniz. Ön bilgi olarak kısaca bu makinada neler yaptık onu söyleyeyim.

  • İlgili IP blogunu taradık. 80, 22 ve 25.portların açık olduğu makinanın hedef makinamız olduğunu anladık.
  • 80.portuna yani HTTP servisine ziyaret edip, sayfanın kaynak koduna baktık. Kaynak kodunda yorum satırında v.php?a… şeklinde devam eden bir şey fark ettik. Burada base64 ile encode edilen bir parametre olduğunu, bu parametre dosya adı taşıyor ve içeriye include ediyordu. Burada LFI yani Local File Include tespit ettik.
  • Diğer servisleri tırtıklamaya başladık. Bizi LFI zaafiyeti ile birlikte çalışabilecek, makinaya erişim sağlayabileceğimiz 25.portta çalışan smtp servisi vardı. Attığımız maili LFI ile okuyabiliyorduk. Bizde zararlı kodlar barındıran mail gönderdik ve LFI ile okuyarak bu mailin içerisindeki kodların çalıştırılmasını sağladık.
  • Ardından makinaya apache haklarıyla bağlantı sağladık. Dizin listeleyip kritik bilgi aradık. Burada b_g2214dg klasörü içerisinde bizi foo.backup karşıladı. Bu dosyanın private key olduğunu öğrendik. Ardından private key ile ssh bağlantısı sağlayıp ilk etabı tamamladık.
İlk işimiz makinanın tespiti. İlgilli ağda nmap ile sadece açık olan portları, adres çözümlemesi yapmadan SYN tarama yöntemiyle başlatıyorum.

İlk işimiz makinanın tespiti. İlgilli ağda nmap ile sadece açık olan portları, adres çözümlemesi yapmadan SYN tarama yöntemiyle başlatıyorum.

İlk resimdekinin yanı sıra bu port taramasında da direkt olarak hedefe yönelik yapılmıştır. Üzerinde çalışan servisler listelenmiştir. Makina üzerinde 80, 22 ve 25 portlarında servisler çalışmaktadır.

Makinanın 80.portuna yani HTTP servisine baktığımızda bizleri yukarıdaki ekran karşılıyor. Ha unutmadan ziyaretlerinizde artık kaynak koduna bakmayı alışkanlık haline getirmelisiniz.

Sayfanın kaynak kodunu incelediğimizde yorum satırı dikkatimizi çekmiş olmalı. foo yazısına link verilmiş ve v.php dosyasına a parametresinde değer gönderilmiştir. Sonundaki “==” ile base64 ile encode edildiğini anlayabilirsiniz. Bu linke ziyaret ettiğinizde bir include işlemiyle karşılacaksınız.

İlgili base64 kodunu bu siteden decode edebilirsiniz. Decode işlemi sonrasında ascii1.txt olarak sonuç alacaksınız. Yani v.php dosyası a parametresinde dosya isimlerini base64 ile encode ederek içeriye çağırmaktadır. Bir diğer deyişle include etmektedir. Burada hemen aklımıza LFI yani LOCAL FILE INCLUDE zaafiyeti geliyor.

Devam edelim. Peki ben base64 ile encode edildiğini anladım.
Peki aşağıdaki şekilde yapabilir miyim ?
v.php?a=/etc/passwd

Tabi ki yapamam, zira a parametresinde gelen değer base64 ile şifrelenmeli . Peki kuralına uygun davranalım.
/etc/passwd ‘nin base64 encode halini bulalım ve yerinde kullanalım. => L2V0Yy9wYXNzd2Q=
v.php?a=L2V0Yy9wYXNzd2Q=

Evet bizi boş bir sayfa karşıladı. Neden ? Çünkü; /etc/passwd dosyasının yoluna tam erişemedik. Bunun için bir üst patiya geçmemiz gerekiyor, yada bir üst daha, bir üst daha. Şimdi birkaç patika yukarı çıkabileceğimiz şekilde yazalım. Yani ../../../../../etc/passwd halinde. Bunun base 64 encode hali Li4vLi4vLi4vLi4vLi4vZXRjL3Bhc3N3ZA==

etcpasswd2

ve Bingo.. /etc/passwd dosyası karşımızda.

Evet şimdi sistemde LFI olduğuna inandık. Peki daha ileri gidebilir miyiz ? Evet gidebiliriz. passwd dosyasını incelediğimizde bash kabuğunda iki adet kullanıcı görüyoruz.

Çalışan servisleri hatırlayacak olursak 22, 25 ve 80 vardır. 80’ı kontrol ettik. Peki şimdi 25.porttan denemelerimize devam edelim. SMTP mailboxına /etc/passwd yazarak ulaşabilir miyiz ? Evet ulaşabiliriz. Peki nasıl ?

Maildir ile kullanıcıların mailboxları /var/mail/kullaniciadi şeklinde tanımlanır. Yani sonuç itibariyle biz bir şekilde, sistemde yer alan kullanıcıya mail atarsak, o maili LFI tekniğiyle /var/mail/kullaniciadi dosyasına erişilerek okunabilir. Peki sadece mail okuma mı ? Tabi ki hayır. Mailimizin içeriğinde yer alan zararlı kodlarda bu şekilde çalışması sağlanabilir. Bu adımımızda bu işlemi yapacağız.

Hemen sistemdeki bir kullanıcıya 25. port üzerinden netcat bağlantısı ile mail atalım. Ben hedef olarak www-data kullanıcısı seçtim. Konsolda yeşil ile belirtilen komutları sırasıyla giriniz.

postmail

 

Bu işlemi yaptıktan sonra hemen LFI zaafiyetiyle bu maili okumaya çalışalım.
v.php?a=../../../../../var/mail/www-data
a parametresinin aldığı değeri base64 ile encode edelim. Yani ../../../../../var/mail/www-data değerini.
v.php?a=Li4vLi4vLi4vLi4vLi4vdmFyL21haWwvd3d3LWRhdGE=

Attığımız mail aynı şekilde resimde gözüküyor arkadaşlar.

Düz mantıkla bakalım olaya. Madem biz sistemdeki bir kullanıcıya mail atabiliyoruz, ve bu maile ait kayıtları okuyabiliriz, O zaman şöyle düşünelim. Kullanıcıya zararlı içerik taşıyan bir mail atalım, bunu da LFI tekniğiyle okuyup, çalıştıralım. Böylece ters bağlantı yöntemiyle sistemde erişim sahibi olabiliriz. Evet maalesef bu kadar basit. Şimdi bu işlemleri yapalım sırasıyla. Zararlıyı ben weevely ile hazırlayacağım.

Evet şifresi “mustafa” olan zararlımızı oluşturduk. Şimdi ki aşamamız ise mustafa.php dosyasının içerisinde zararlı kodları mail ile hedefe gönderelim.

Oluşan mustafa.php dosyamın içerisindeki kaynak kodları kopyalıyorum.

Yine konsol üzerinde sadece yeşil ile belirtilen alanları sırasıyla giriyoruz ve zararlıyı gönderme işlemini tamamlıyoruz.

Mailimiz içerisinde zararlı PHP kodlarını gönderdik. Artık weevely aracıyla birlikte http://hedefmakine/v.php?a=Li4vLi4vLi4vLi4vLi4vdmFyL21haWwvd3d3LWRhdGE= adresine istek yapmam durumunda konsol ekranına düşebilirim.

Evet weevely aracına dosyamızın içeriğinin bulunduğu kısmı ve şifreyi verdikten sonra hedef makina üzerinde apache haklarıyla çalışıyoruz.

Hedef makina üzerinde :file.ls komutuyla birlikte o dizin üzerindeki dosyaların listelenmesini istedim. Gördüğünüz üzere LFI’ye sebep olan v.php dosyası da orada yer alıyor. Dikkatimizi b_g2214dg klasoru çekmiştir. Dizin dizin araştırmamızı sürdürelim.

İlgili klasöre girdiğimizde foo.backup adında bir dosya karşılıyor bizleri. Download edip analizimize bu dosya üzerinde devam edelim.

Dosyayı leafpad benzeri bir görüntüleyiciyle açmak yerine “file” komutu ile kontrol ettim. Öyle ki private key dosyası olduğunu anlıyoruz. Bash kabuğuna ulaşan üç kullanıcıdan birine ait olma ihtimali var. Deneyelim.

Elimizdeki bir private key var ise ssh -i dosyaadi [email protected] şeklinde bağlantı yapabiliyoruz. Private key’in cuervo kullanıcısına ait olduğunu anladık.

ve Underdist labının ilk levelini tamamlamış olduk.

Bu levelde neler yaptık. Bunları tekrarlayalım.

  • İlgili IP blogunu taradık. 80, 22 ve 25.portların açık olduğu makinanın hedef makinamız olduğunu anladık.
  • 80.portuna yani HTTP servisine ziyaret edip, sayfanın kaynak koduna baktık. Kaynak kodunda yorum satırında v.php?a… şeklinde devam eden bir şey fark ettik. Burada base64 ile encode edilen bir parametre olduğunu, bu parametre dosya adı taşıyor ve içeriye include ediyordu. Burada LFI yani Local File Include tespit ettik.
  • Diğer servisleri tırtıklamaya başladık. Bizi LFI zaafiyeti ile birlikte çalışabilecek, makinaya erişim sağlayabileceğimiz 25.portta çalışan smtp servisi vardı. Attığımız maili LFI ile okuyabiliyorduk. Bizde zararlı kodlar barındıran mail gönderdik ve LFI ile okuyarak bu mailin içerisindeki kodların çalıştırılmasını sağladık.
  • Ardından makinaya apache haklarıyla bağlantı sağladık. Dizin listeleyip kritik bilgi aradık. Burada b_g2214dg klasörü içerisinde bizi foo.backup karşıladı. Bu dosyanın private key olduğunu öğrendik. Ardından private key ile ssh bağlantısı sağlayıp ilk etabı tamamladık.

 

Mustafa

2004 yılından bu yana Web ve Bilgi Güvenliği üzerine araştırmalarda bulundum. Çok sayıda yerli yada yabancı websitelerinde bulunan zaafiyetleri ilgililere göndererek kapatılmasını sağladım. Octosec ailesindenim. Siber Güvenlik Eylem Planı kapsamında TSE Kayıtlı Sızma Uzmanı sertifikam bulunmaktadır.

2 Comments

Leave a Reply