Tworzenie modułu do Metasploit'a – vhost_finder

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&#91;at&#93;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

This entry was posted in Development and tagged , , , , , , . Bookmark the permalink.

2 Responses to Tworzenie modułu do Metasploit'a – vhost_finder

  1. pentester says:

    dzięki, przyda się 😉

Comments are closed.