Metasploit Framework Temel Kullanımı (msfconsole)

İçerik:

  1. Msfconsole Yardım Menusu (?, help, help )
    1. Bir Komutun Aldığı Parametreleri Öğrenmek (help <komut>, ? <komut>, <komut> -h)
  2. Modul Listesini Görmek (show)
  3. Msfconsole Kelime Arama (search, search <aranacakkelime>)
  4. Msfconsole Modulleri Kullanmak (use)
    1. Modulden Çıkmak (back)
  5. Kullandığımız Modul Hakkında Bilgi Almak(info, info <moduladı>)
  6. Msfconsole Bir Modulun Seçenekleri Görüntülemek (options)
  7. Msfconsole Modul Seçenekleri Değiştirmek (set)
  8. Msfconsole Bir Modulden Seçeneğin Değerini Silmek (unset)
  9. Msfconsole Modulu Çalıştırmak (exploit, run)

Metasploit terimlerini ve kurulumunu önceki blog yazımda anlatmıştım.

Bkz: Metasploit Penetration Testing Framework Giriş - İndirme ve Kurulum

Bkz: Metasploit Framework Terimler (exploit,vulnerability,payload vb.)

Şimdi metasploiti nasıl kullanacağımıza bakalım.

Terminal ekranını açıp msfconsole diyerek metasploiti başlatıyoruz.

user@pc:~$ msfconsole
Found a database at /home/user/.msf4/db, checking to see if it is started
Starting database at /home/user/.msf4/db...success
_                                                    _
/ \    /\         __                         _   __  /_/ __
| |\  / | _____   \ \           ___   _____ | | /  \ _   \ \
| | \/| | | ___\ |- -|   /\    / __\ | -__/ | || | || | |- -|
|_|   | | | _|__  | |_  / -\ __\ \   | |    | | \__/| |  | |_
      |/  |____/  \___\/ /\ \\___/   \/     \__|    |_\  \___\


       =[ metasploit v4.16.40-dev-                        ]
+ -- --=[ 1739 exploits - 994 auxiliary - 300 post        ]
+ -- --=[ 526 payloads - 40 encoders - 10 nops            ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

msf > 

msfconsole komutunu verdikten sonra önceden yüklü olan database(veritabanı) olup olmadığını kontrol ediyor ve eğer database bulursa bu database'i başlatıyor. Daha sonra ise ekrana bir banner(afiş, başlık) basarak Metasploit Framework içerisinde barındırdığı exploit, auxiliary, post, payload, ve encoderların sayısını ekrana yazdırıyor.

Msfconsole, Metasploit Framework çatısının bize sağladığı modulleri ve araçları kullanabilmemize izin veren gelişmiş bir arayüz sağlar.

Msfconsole Yardım Menusu (?, help, help <komut>)

Msfconsole içerisindeki komutların neler olduğu ve hangi parametreler ile çalıştığını öğrenmek için kullanabileceğimiz komut help veya ? komutudur.

msf > help

ya da

msf > ?

Msfconsole ekranına help veya ? yazıp enter tuşuna bastığımızda msfconsole arayüzü içerisinde kullanabileceğimiz komutlar ekrana gelecektir.

Bir Komutun Aldığı Parametreleri Öğrenmek (help <komut>, ? <komut>, <komut> -h)

Belirli bir komutu hakkında detaylı bilgi almak ve hangi parametreler ile çalıştığını öğrenmek için;

msf > ? jobs

Şeklinde ? veya help yazdıktan sonra komut adını yazarak o komutun nasıl kullanıldığı ile ilgili detaylı bilgi alabiliriz.

msf > ? jobs
Usage: jobs [options]

Active job manipulation and interaction.

OPTIONS:

    -K        Terminate all running jobs.
    -S <opt>  Row search filter.
    -h        Help banner.
    -i <opt>  Lists detailed information about a running job.
    -k <opt>  Terminate jobs by job ID and/or range.
    -l        List all running jobs.
    -v        Print more detailed info.  Use with -i and -l
msf >

Yukarıdaki örnekte jobs komutunun nasıl kullanıldığı ve hangi parametreler ile çalıştığını ekrana yazdırdık.

Aynı işlem önce komut adı girilip sonrasında -h parametresi belirtilerek de yapılabilir.

msf > jobs -h
Usage: jobs [options]

Active job manipulation and interaction.

OPTIONS:

    -K        Terminate all running jobs.
    -S <opt>  Row search filter.
    -h        Help banner.
    -i <opt>  Lists detailed information about a running job.
    -k <opt>  Terminate jobs by job ID and/or range.
    -l        List all running jobs.
    -v        Print more detailed info.  Use with -i and -l
msf > 

Modul Listesini Görmek (show)

Metasploit Framework içerisinde bulunan modulleri görmek için show komutu kullanılabilir.

msf > show

Encoders
========

   Name                          Disclosure Date  Rank       Description
   ----                          ---------------  ----       -----------
   cmd/echo                                       good       Echo Command Encoder
   cmd/generic_sh                                 manual     Generic Shell Variable Substitution Command Encoder
   cmd/ifs                                        low        Generic ${IFS} Substitution Command Encoder
   ...
   ...

NOP Generators
==============
   ...

POST
====
   ...

Yukarıdaki çıktıda çok uzun olduğundan kısaltılmıştır. Her modul başlığının altı (=) işareti ile çizilmiş bulunmakta, her başlığın altında ilgili moduller yer almaktadır.


Encoders başlığının altında ilgili encoder modulleri yer almaktadır.

Name: Bu başlık altındakiler encoder modulunun adını göstermektedir.

Disclosure Date: Bu zafiyetin,exploitin bulunduğu tarih

Rank: Bu modulunun ne kadar etkili olduğu ile ilgili bilgi.

Description: Modulun kısa tanımımıdır.


Show komutunun nasıl kullanıldığı ile ilgili bilgiye bakalım.

msf > show -h
[*] Valid parameters for the "show" command are: all, encoders, nops, exploits, payloads, auxiliary, plugins, info, options
[*] Additional module-specific parameters are: missing, advanced, evasion, targets, actions

Yukarıda yeşil renkle gösterilen ifadeler show komutu ile kullanılabilecek parametrelerdir.

Kırmızı ile gösterilen ifadeler ise bir belirli bir modul içerisindeyken kullanılabilecek parametreleri gösterir.


Kullanılabilir payload modullerini listeleyelim.

msf > show payloads

Payloads
========

   Name                                                Disclosure Date  Rank    Description
   ----                                                ---------------  ----    -----------
   aix/ppc/shell_bind_tcp                                               normal  AIX Command Shell, Bind TCP Inline
   aix/ppc/shell_find_port                                              normal  AIX Command Shell, Find Port Inline
   aix/ppc/shell_interact                                               normal  AIX execve Shell for inetd
   aix/ppc/shell_reverse_tcp                                            normal  AIX Command Shell, Reverse TCP Inline
   ...
   ...
   windows/x64/vncinject/reverse_winhttp                                normal  Windows x64 VNC Server (Reflective Injection), Windows x64 Reverse HTTP Stager (winhttp)
   windows/x64/vncinject/reverse_winhttps                               normal  Windows x64 VNC Server (Reflective Injection), Windows x64 Reverse HTTPS Stager (winhttp)

msf >

Yukarıdaki örnekte kullanabileceğimiz payload modullerini listeledik, show komutu ile ilgili moduller listelenebilir.

msf > show          //tüm modulleri listeler
msf > show all      //tüm modulleri listeler
msf > show exploits //tüm exploit modullerini listeler
msf > show encoders //tüm encoder modullerini listeler
msf > show payloads //tüm payload modullerini listeler
msf > show nops     //tüm nops modullerini listeler
msf > show auxilary //tüm auxilary modullerini listeler
msf > show plugins  //tüm pluginsleri listeler
msf > show info     //info komutunun kullanımını getirir
msf > show options  //Bulunulan modul içerisinde kullanılabilecek seçenekleri getirir

Msfconsole Kelime Arama (search, search <aranacakkelime>)

Msfconsole içerisinde belirli bir kelimeyi aramak için search komutu kullanılablir.

msf > search -h
Usage: search [keywords]

Keywords:
  app       :  Modules that are client or server attacks
  author    :  Modules written by this author
  bid       :  Modules with a matching Bugtraq ID
  cve       :  Modules with a matching CVE ID
  edb       :  Modules with a matching Exploit-DB ID
  name      :  Modules with a matching descriptive name
  platform  :  Modules affecting this platform
  ref       :  Modules with a matching ref
  type      :  Modules of a specific type (exploit, auxiliary, or post)

Examples:
  search cve:2009 type:exploit app:client

Search komutu bir modulun ismi hatırlanmadığında çok kullanışlıdır. Aranacak kelime belirtilirdikten sonra kelimenin geçtiği moduller ekrana gelecektir.

msf > search ssh_login

Matching Modules
================

   Name                                    Disclosure Date  Rank       Description
   ----                                    ---------------  ----       -----------
   auxiliary/scanner/ssh/ssh_login                          normal     SSH Login Check Scanner
   auxiliary/scanner/ssh/ssh_login_pubkey                   normal     SSH Public Key Login Scanner
   exploit/linux/http/alienvault_exec      2017-01-31       excellent  AlienVault OSSIM/USM Remote Code Execution

msf >

Aynı zamanda aranacak kelime özelleştirilebilir.

msf > search cve:2009         //CVE id değerinde 2009 olan modulleri listeler
msf > search cve:2009 http    //CVE id değerinde 2009 olan moduller arasında http geçen modulleri listeler
msf > search type:exploit     //exploit modulleri arar
msf > search platform:windows //windows sistemi için olan modulleri arar

Platform seçeneğine: unix, bsd, ios, android, linux, multi gibi seçenekler yazılarak hedef sistem için olan moduller aranır.

Type seçeneğine: exploit, payload, auxilary, encoder, pop gibi seçenekler yazılabilir.

Msfconsole Modulleri Kullanmak (use)

Msfconsole altında modulleri listelemeyi ve aramayı gördük şimdi bir modul nasıl kullanılır ona bakalım. Bir modulu kullanmak için use komutundan sonra kullanılmak istenilen modul ismi belirtilir.

msf > ? use
Usage: use module_name

The use command is used to interact with a module of a given name.

use komutunun nasıl kullanılacağına baktığımızda bize bir modul ismi ile beraber kullanmamız gerektiği söylüyor. Örnek olarak auxiliary/scanner/ssh/ssh_version modulunu nasıl kullanacağımıza bakalım.

msf > use auxiliary/scanner/ssh/ssh_version
msf auxiliary(scanner/ssh/ssh_version) >

Bir modulu use komutu ile kullanmaya başlayınca msfconsole arayüzündeki istek satırının değiştini görürüz. Bu satırda kırmızı renkli ifade ile hangi modulde olduğumuz belirtilir.


Modulden Çıkmak (back)

Bir modulun içerisine girdikten sonra modulden çıkmak için back komutu kullanılabilir.

msf auxiliary(scanner/ssh/ssh_version) > back
msf >

Görüldüğü gibi msf alanına geri döndük.


Kullandığımız Modul Hakkında Bilgi Almak(info, info <moduladı>)

Modulumuzu use komutu ile kullanıma aldıktan sonra modulun kullanımına bakmamız doğru olacaktır. Bir modulun hangi seçeneklerle kullanıldığını ve ne işe yaradığını öğrenmek için info komutu kullanılabilir.

msf > info auxiliary/scanner/ssh/ssh_version

       Name: SSH Version Scanner
     Module: auxiliary/scanner/ssh/ssh_version
    License: Metasploit Framework License (BSD)
       Rank: Normal

Provided by:
  Daniel van Eeden <metasploit@myname.nl>

Basic options:
  Name     Current Setting  Required  Description
  ----     ---------------  --------  -----------
  RHOSTS                    yes       The target address range or CIDR identifier
  RPORT    22               yes       The target port (TCP)
  THREADS  1                yes       The number of concurrent threads
  TIMEOUT  30               yes       Timeout for the SSH probe

Description:
  Detect SSH Version.

References:
  http://en.wikipedia.org/wiki/SecureShell

msf >

Bir modulu kullanmadan önce modulun ne işe yaradığı hakkında fikir sahibi olmamız için info komutu önemlidir. Gelen çıktıda Description: kısmında modulun tanımı yapılmaktadır. Bu modul belirtilen hedefte çalışan(var ise) SSH versiyonunu tespit etmek için kullanılıyormuş.


Bir modulu use komutu ile kullanıma aldıktan sonrada aynı işlem yapılabilir.

msf auxiliary(scanner/ssh/ssh_version) > info

veya

msf auxiliary(scanner/ssh/ssh_version) > show info

Bu kullanımda bize aynı çıktıyı verecektir. Show komutunun kullanımında gördüğümüz gibi, show komutu ile beraber info komutunun kullanılabiliyor.

Bu üç kullanımın hepsi bize aynı sonucu gösterecektir.

Msfconsole Bir Modulun Seçenekleri Görüntülemek (options)

Show komutuna bakarken options seçeneğinin olduğunu hatırlayalım. Bu komut bir modulun çalıştırıldığı sırada kullancağı değerleri görüntülemek için kullanılır.

msf > ? options
Usage: options [mod1 mod2 ...]

Queries the supplied module or modules for options. If no module is given,
show options for the currently active module.

Yardım menusu bize options komutunu yazdıktan sonra bir veya daha fazla modul adını belirtmemizi söylüyor. Eğer bir modul belirtilmez ise aktif modulun seçeneklerini ekrana getirir.


msf > options auxiliary/scanner/ssh/ssh_version

Module options (auxiliary/scanner/ssh/ssh_version):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOSTS                    yes       The target address range or CIDR identifier
   RPORT    22               yes       The target port (TCP)
   THREADS  1                yes       The number of concurrent threads
   TIMEOUT  30               yes       Timeout for the SSH probe

Yukarıdaki çıktıda auxiliary/scanner/ssh/ssh_version modulunun aldığı ve alabileceği seçenekleri görüyoruz.


Aynı işlemi modulu seçtikten sonrada yapabiliriz.

msf auxiliary(scanner/ssh/ssh_version) > options

veya

msf auxiliary(scanner/ssh/ssh_version) > show options

Bu iki kullanımda ilk kullanımdaki çıktıyı verecektir.


Options komutunun bize getirdiği seçenekleri incelersek:

Name:             bu alan seçeneğin adının olduğu kısım
Current Settings: bu alan seçeneğin aldığı değeri içeren kısım
Required:         alanı seçeneğin bir değere sahip olup olmama zorunluluğunu gösteren kısım
Description:      alanı ise seçeneğin kısa tanımının yapıldığı alan

Modulumuzdeki seçeneklere baktığımızda tüm seçeneklerin dolu olması gerektiği belirtilmiş. (Required alanlarındaki değer yes)


Seçenekleri incelersek;

RHOSTS: Remote Hosts, hedef ip adresleri veya ip blokları

RPORT: Remote Port, hedef sistemin port numarası

THREADS: Modul için çalıştırılacak eşzamanlı thread sayısı

TIMEOUT: Timeout süresi

NOT: RHOSTS alanı bazı modullerde RHOST olarak tanımlıdır. Bizim kullandığımız modulde RHOSTS tanımılı olduğundan birden fazla hedef belirtilebilir.

Msfconsole Modul Seçenekleri Değiştirmek (set)

Bir modulun seçeneklerini değiştirmek için set komutu kullanılabilir.

msf auxiliary(scanner/ssh/ssh_version) > ? set
Usage: set [option] [value]

Set the given option to value.  If value is omitted, print the current value.
If both are omitted, print options that are currently set.

If run from a module context, this will set the value in the module's
datastore.  Use -g to operate on the global datastore

set yazdıktan sonra seçenek adı(options komutundaki liste) ve bu seçeneğe girilecek değeri belirterek kullanılabiliyormuş.


msf auxiliary(scanner/ssh/ssh_version) > set rport
rport => 22

Eğer seçeneğe girilecek değer girilmez ise belirtilen seçenekteki değer ekrana yazdırılır.


msf auxiliary(scanner/ssh/ssh_version) > set

Global
======

No entries in data store.

Module: scanner/ssh/ssh_version
===============================

  Name                 Value
  ----                 -----
  CHOST
  CPORT
  ConnectTimeout       10
  Proxies
  RHOSTS
  RPORT                22
  SSL                  false
  SSLCipher
  SSLVerifyMode        PEER
  SSLVersion           Auto
  ShowProgress         true
  ShowProgressPercent  10
  TCP::max_send_size   0
  TCP::send_delay      0
  THREADS              1
  TIMEOUT              30
  VERBOSE              false
  WORKSPACE

set komutu tek başına kullanılırsa bu modul için aktif seçenekleri ve bu seçeneklere atanmış değerleri görebiliriz.


Auxiliary modulumuz belirtilen hedef sistemdeki SSH versiyonunu öğrenmemizi sağlıyordu. Yani tek gereken RHOSTS alanına hedefi belirtmek. Hedef sistemimizin IP(IPv4) adresi 192.168.254.60 olsun.

msf auxiliary(scanner/ssh/ssh_version) > options

Module options (auxiliary/scanner/ssh/ssh_version):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOSTS                    yes       The target address range or CIDR identifier
   RPORT    22               yes       The target port (TCP)
   THREADS  1                yes       The number of concurrent threads
   TIMEOUT  30               yes       Timeout for the SSH probe

msf auxiliary(scanner/ssh/ssh_version) > set RHOSTS 192.168.254.60
RHOSTS => 192.168.254.60
msf auxiliary(scanner/ssh/ssh_version) > options

Module options (auxiliary/scanner/ssh/ssh_version):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOSTS   192.168.254.60   yes       The target address range or CIDR identifier
   RPORT    22               yes       The target port (TCP)
   THREADS  1                yes       The number of concurrent threads
   TIMEOUT  30               yes       Timeout for the SSH probe

Set komutunu kullanarak RHOSTS seçeneğine hedef sistemin IP adresini girdik.

Msfconsole Bir Modulden Seçeneğin Değerini Silmek (unset)

Bir modul içerisinde olan seçeneklerdeki değerleri unset komutunu kullanrak kaldırabiliriz.

msf auxiliary(scanner/ssh/ssh_version) > unset rhosts
Unsetting rhosts...
msf auxiliary(scanner/ssh/ssh_version) > options

Module options (auxiliary/scanner/ssh/ssh_version):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOSTS                    yes       The target address range or CIDR identifier
   RPORT    22               yes       The target port (TCP)
   THREADS  1                yes       The number of concurrent threads
   TIMEOUT  30               yes       Timeout for the SSH probe

Görüldüğü gibi az önce set ettiğimiz RHOSTS değeri unset komutu ile silindi.

Msfconsole Modulu Çalıştırmak (exploit, run)

Modulumuzu seçtik, gerekli tüm değerleri girdik artık modulumuzu çalıştırma vakti geldi. Modulumuzu çalıştırmak için iki farklı komut kullanılabilir exploit ve run komutları.

msf auxiliary(scanner/ssh/ssh_version) > options

Module options (auxiliary/scanner/ssh/ssh_version):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOSTS   192.168.254.60   yes       The target address range or CIDR identifier
   RPORT    22               yes       The target port (TCP)
   THREADS  1                yes       The number of concurrent threads
   TIMEOUT  30               yes       Timeout for the SSH probe

msf auxiliary(scanner/ssh/ssh_version) > run

[+] 192.168.254.60:22     - SSH server version: SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u2
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

SSH servisi eğer değiştirilmemiş ise öntanımlı(default) olarak 22.port üzerinde çalışır. Bu yüzden RPORT alanına dokunmadık, zaten auxiliary modulumuzun amacı SSH versiyonunu tespit etmek olduğundan RPORT değeri öntanımlı olarak 22 olarak geliyor.

run komutunu modulumuze verdiğimizde ekrana bazı şeyler yazdı. [+] ile başlayan satırda hedef sistemin SSH versiyonunu tespit etmiş ve ekrana yazdırmış.

Hedef sistemdeki SSH versiyonunun adı:SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u2

Hedef sistemde SSH-2.0 çalıştığını ssh_version auxiliary modulunu kullanarak öğrendik.


Bu işlem exploit komutu kullanılarakta gerçekleştirilebilir.

msf auxiliary(scanner/ssh/ssh_version) > exploit

[+] 192.168.254.60:22     - SSH server version: SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u2
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

exploit ve run komutları arasında aslında bir fark yoktur ancak genellikle exploit komutu exploit modullerde kullanılır.