Czasami zdarzają się pentesty, w których dane jakie dostarcza klient ograniczają się jedynie do zakresu adresów IP hostów, które powinny zostać przetestowane (zakres publiczny ofc), BA czasami i nawet ta kwestia pozostaje do ustalenia przez pentestera.
Sporą ilością wektorów ataków o dużym impakcie (RFI,LFI,SQLi,PathTraversal,…) charakteryzują się web aplikacje, dlatego ich odkrycie w przestrzeni adresowej należącej do klienta może mieć znaczący wpływ na wydźwięk naszego końcowego raportu ;). Odnalezienie samych demonów httpd jest kwestią przeważnie trywialną, jednak kiedy demon został skonfigurowany do obsługi virtual-hostów to przy próbie odwołania się do niego bez znajomości powiązanych domen dostaniemy jedynie np. “Site underconstruction (IIS)” czy “Bad Request (Invalid Hostname)” dla apache. W takim przypadku, jak pewnie dobrze wiecie, z pomocą może przyjść nam jedna z komend bing’a a mianowicie ip:173.236.133.83.
Kiedy mamy do przeskanowanie jeden adres ip nie ma problemu, można sprawdzić istniejące hosty przy pomocy bing’a ręcznie. Jednak kiedy do przeskanowania przychodzi nam /24 czy większa ilość hostów, a następnie zebranie rezultatów, to raczej nie jest to możliwe do wykonania w sensownym okresie czasu.
Dlatego, aby zautomatyzować ten proces do głowy przyszedł mi pomysł stworzenia modułu do metasploit o nazwie vhost_finder. Jak dokładnie on działa i jak wyglądają rezultaty skanowania przedstawię później, na razie rzućmy okiem na to jak stworzyć przykładowe środowisko programistyczne do “wygodnego” tworzenia kodu dla metasploit’a.
>> Konfiguracja środowiska
Musze przyznać, że długi okres czasu byłem jedynie biernym użytkownikiem tego frameworku ze względu na język, w którym został napisany.
Nie chodzi o to, że byłem uprzedzony do ruby, a raczej o fakt, że znałem już python’a, który w zupełności mi wystarczał :D.
Jednak ze względu na rosnącą chęć ingerowania w działanie frameworku, przypływ wolnego czasu i pewnie ciekawość nowego dla mnie języka programowania, postanowiłem rozklikać temat;).
Nie wiem jakie jest wasze podejście kiedy zabieracie się do kodzenia w nowym języku, ale pierwszą rzeczą jaką ja muszę mięć jest porządne IDE.
I okazuje się, że NetBeans + ruby plugin świetnie się do tego nadaje:
Recz, którą warto zrobić tuż po utworzeniu projektu jest oczywiście dodanie katalogu z lib’ami pochodzącego z metasploit’a, abyśmy mogli w pełni korzystać z dobrodziejstwa uzupełniania składni, podpowiedzi odnośnie metod/pól obiektów itd.
>> Testowanie modułu auxiliary
Myślę, że większą część modułów auxiliary można testować na dwojaki sposób:
“stand-alone”
Pisząc stand-alone, w tym kontekście mam na myśli, tworzenie i testowanie kodu modułu bez umieszczania go w szablonie modułu.
Dzięki temu możemy testować nasz kod jak kod normalnego skryptu, korzystając przy tym z debuger’a.
Moim zdaniem warto wybrać takie rozwiązanie, i przenieść całość kodu do szablonu w momencie kiedy kod jest już gotowy.
“praca z szablonem”
Kiedy zdecydujemy się od początku na wypełnianie szablonu naszym kodem jesteśmy zmuszeni (chyba, że znacie jakiś jak to z chęcią poznam) do wykonywania testów z pod msfconsole. Oczywiście w takim wypadku możemy zapomnieć o dobrodziejstwie debuger i pozostaje nam jedynie printowanie wartości na ekran. Należy również pamiętać o każdorazowym przeładowaniu modułu po wykonaniu poprawki komendą reload.
msf auxiliary(vhost_finder) >
Jak dokładnie działa vhost_finder?
Oczywiście wykorzystuje bing’a, ale robi to w dwóch trybach w zależności od wyboru:
1. bez podawania klucza do API Bing’a
Moduł odwołuje się bezpośrednio do strony bing’a i pobiera wyniki parsując jej kontent.
2. z kluczem
Kwestia oczywista. Klucz można uzyskać tutaj Bing API
Dorzuciłem obsługę API Bing’a z tego względu, że parsowanie strony będzie działać do momentu, aż ktoś w MS nie postanowi zmienić tagów opisujących URL’e. Wtedy bez konieczności modyfikacji kodu modułu lub czekania na mój patch:P, można skorzystać z wersji wykorzystującej API.
Tryb wykorzystujący API nie jest w żaden sposób lepszy, BA!!! wyniki pochodzące z API są bardzo często mocno okrojone w porównaniu do tych, które otrzymujemy bezpośrednio odwołując się do Bing’a.
Myślę, że resztę detali zdradzi wam czytanie kodu jak i ten przykład użycia:
msf auxiliary(vhost_finder) > info Name: VHOST finder using Bing. Module: auxiliary/gather/vhost_finder Version: $Revision:$ License: Metasploit Framework License (BSD) Rank: Normal Provided by: Marcin 'Icewall' Noga <martin[at]hispasec<dot>com> Basic options: Name Current Setting Required Description ---- --------------- -------- ----------- BING_API_KEY no Set Bing API Key to use API interface. FULL_URL false no Display all found URLs related with specific IP(s). When this option is set to false only domains will be displayed. IPRANGE yes The IP or address range for which you want to check vhosts. Description: Find all VHOST's belongs to particular IP(s) using Bing. Without setting BING_API_KEY module makes simple query to bing.com and parses results. Keep in mind that returned results from Bing API are usually limited compare to these obtained from bing.com msf auxiliary(vhost_finder) > set IPRANGE 173.236.133.83 IPRANGE => 173.236.133.83 msf auxiliary(vhost_finder) > run [*] VHOSTS for 173.236.133.83: [+] http://agnieszkarosik.art.pl [+] http://archive.stradis.com [+] http://art.vexillium.org [+] http://cuth.net [+] http://draftspace.art.pl [+] http://elmoreblog.com [+] http://euphoriapastries.com [+] http://goldenrulerepublicans.com [+] http://gynvael.lunarii.org [+] http://j00ru.vexillium.org [+] http://kateappleton.com [+] http://lunarii.org [+] http://memek.vexillium.org [+] http://re.coldwind.pl [+] http://samlis.lunarii.org [+] http://sectoids.nekrataal.vexillium.org [+] http://sellarostudios.com [+] http://sil2100.vexillium.org [+] http://stradis.com [+] http://thedarkroomfilm.com [+] http://thestateworkers.com [+] http://unavowed.vexillium.org [+] http://vexillium.org [+] http://willsaar.com [+] http://www.andrewmurphie.org [+] http://www.differentviewpoint.com [+] http://www.eiroresearchglobal.com [+] http://www.icewall.pl [+] http://www.macrotactics.com [+] http://www.oshogbo.vexillium.org [+] http://www.thestateworkers.com [+] http://www.torinochurch.com [*] Auxiliary module execution completed
Jako, że znalezione vhost’y są raportowane do bazy (oczywiście jeżeli wcześniej wykonaliśmy db_connect) to jesteśmy później w stanie wykorzystać te informacje przy tworzeniu raportu czy do dalszych ataków np. z wykorzystaniem WMAP’a
msf auxiliary(vhost_finder) > load wmap [*] [WMAP 1.0] === et [ ] metasploit.com 2011 [*] Successfully loaded plugin: wmap msf auxiliary(vhost_finder) > wmap_sites -l [*] Available sites =============== Id Host Vhost Port # Pages # Forms -- ---- ----- ---- ------- ------- 0 173.236.133.83 agnieszkarosik.art.pl 80 0 0 13 173.236.133.83 re.coldwind.pl 80 0 0 14 173.236.133.83 samlis.lunarii.org 80 0 0 15 173.236.133.83 sectoids.nekrataal.vexillium.org 80 0 0 16 173.236.133.83 sellarostudios.com 80 0 0 17 173.236.133.83 sil2100.vexillium.org 80 0 0 18 173.236.133.83 stradis.com 80 0 0 19 173.236.133.83 thedarkroomfilm.com 80 0 0 2 173.236.133.83 art.vexillium.org 80 0 0 20 173.236.133.83 thestateworkers.com 80 0 0 21 173.236.133.83 unavowed.vexillium.org 80 0 0 22 173.236.133.83 vexillium.org 80 0 0 23 173.236.133.83 willsaar.com 80 0 0 24 173.236.133.83 www.andrewmurphie.org 80 0 0 25 173.236.133.83 www.differentviewpoint.com 80 0 0 26 173.236.133.83 www.eiroresearchglobal.com 80 0 0 27 173.236.133.83 www.icewall.pl 80 0 0 28 173.236.133.83 www.macrotactics.com 80 0 0 29 173.236.133.83 www.oshogbo.vexillium.org 80 0 0 3 173.236.133.83 cuth.net 80 0 0 30 173.236.133.83 www.thestateworkers.com 80 0 0 31 173.236.133.83 www.torinochurch.com 80 0 0 ... msf auxiliary(vhost_finder) > wmap_targets -t 173.236.133.83 msf auxiliary(vhost_finder) > wmap_run -e data/wmap/wmap_sample_profile.txt [*] Using profile data/wmap/wmap_sample_profile.txt. [*] Testing target: [*] Site: agnieszkarosik.art.pl (173.236.133.83) [*] Port: 80 SSL: false [*] ============================================================ [*] Testing started. 2011-11-15 02:50:08 +0100 [*] =[ SSL testing ]= [*] ============================================================ [*] Target is not SSL. SSL modules disabled. [*] =[ Web Server testing ]= [*] ============================================================ [*] Module auxiliary/scanner/http/http_version [*] 173.236.133.83 Apache ( 302-http://agnieszkarosik.digartfolio.pl/ ) [*] Module auxiliary/scanner/http/options [*] =[ File/Dir testing ]= [*] ============================================================ [*] Module auxiliary/scanner/http/dir_scanner: [*] Path: / [*] Detecting error code [*] Using code '302' as not found for 173.236.133.83 [*][*] Found http://agnieszkarosik.art.pl:80/Ftp-old/ 503 (173.236.133.83) Found http://agnieszkarosik.art.pl:80/Friends/ 302 (173.236.133.83) [*][*][*] Found http://agnieszkarosik.art.pl:80/Flashtest/ 302 (173.236.133.83) Found http://agnieszkarosik.art.pl:80/Frames/ 302 (173.236.133.83) Found http://agnieszkarosik.art.pl:80/FilterIssues/ 302 (173.236.133.83) [*] Found http://agnieszkarosik.art.pl:80/GW5/ 503 (173.236.133.83) [*][*][*] Found http://agnieszkarosik.art.pl:80/Log/ 503 (173.236.133.83) ...
Download
Kod modułu na chwilę obecną jest do pobrania stąd -> vhost_finder.rb. Myślę że lada chwila i zmigruję z nim na Git’a, a w niedługim czasie powinien trafić on do oficjalnego releasu.
Bibliografia:
Metasploit Redmine – miejsce gdzie możesz zaraportować bug czy wrzucić swoją propozycję modułu.
Dokumentacja API frameworku
Podręcznik programisty Metasploit
dzięki, przyda się 😉
cool 😉