ProHoster > Blog > administracja > Wapiti - samodzielne sprawdzanie witryny pod kątem luk w zabezpieczeniach
Wapiti - samodzielne sprawdzanie witryny pod kątem luk w zabezpieczeniach
W przeszłości Artykuł rozmawialiśmy o Nemesida WAF za darmo - bezpłatne narzędzie do ochrony stron internetowych i API przed atakami hakerów, w tym przypadku postanowiliśmy sprawdzić popularny skaner podatności Wapiti.
Skanowanie strony internetowej pod kątem podatności jest niezbędnym działaniem, które w połączeniu z analizą kodu źródłowego pozwala ocenić poziom jej bezpieczeństwa przed zagrożeniami kompromitującymi. Możesz skanować zasób sieciowy za pomocą specjalistycznych narzędzi.
Nikto, W3af (napisany w Pythonie 2.7, który nie jest już wspierany) czy Arachni (nie jest już wspierany od lutego) to najpopularniejsze rozwiązania prezentowane w segmencie darmowym. Oczywiście są też inne, jak na przykład Wapiti, na którym postanowiliśmy się skupić.
Wapiti współpracuje z następującymi typami luk:
ekspansja plików (lokalna i zdalna, fopen, readfile);
zastrzyki (wstrzyknięcie PHP/JSP/ASP/SQL i wstrzyknięcie XPath);
XSS (Cross Site Scripting) (refleksyjny i trwały);
wykrywanie i wykonywanie poleceń (eval(), system(), passstru());
Zastrzyki CRLF (dzielenie odpowiedzi HTTP, utrwalanie sesji);
osadzanie XXE (zewnętrzny podmiot XML);
SSRF (fałszowanie żądań po stronie serwera);
wykorzystanie znanych, potencjalnie niebezpiecznych plików (dzięki bazie Nikto);
słabe konfiguracje .htaccess, które można ominąć;
obecność plików kopii zapasowych ujawniających poufne informacje (ujawnienie kodu źródłowego);
Nerwica wojenna;
otwarte przekierowania;
niestandardowe metody HTTP, które można rozwiązać (PUT).
Cechy:
Obsługa proxy HTTP, HTTPS i SOCKS5;
uwierzytelnianie przy użyciu kilku metod: Basic, Digest, Kerberos lub NTLM;
możliwość ograniczenia obszaru skanowania (domena, folder, strona, adres URL);
automatyczne usunięcie jednego z parametrów w adresie URL;
liczne zabezpieczenia przed niekończącymi się pętlami skanowania (przykład: ifor, ograniczanie wartości parametru);
możliwość ustawienia priorytetu sprawdzania adresów URL (nawet jeśli nie znajdują się one w obszarze skanowania);
możliwość wykluczenia niektórych adresów URL ze skanowania i ataków (np. wylogowanie z adresu URL);
importuj pliki cookie (pobierz je za pomocą narzędzia wapiti-getcookie);
możliwość włączenia/wyłączenia weryfikacji certyfikatu SSL;
możliwość wyodrębnienia adresów URL z JavaScript (bardzo prosty interpreter JS);
interakcja z HTML5;
kilka opcji zarządzania zachowaniem i ograniczeniami przeszukiwaczy;
ustawienie maksymalnego czasu procesu skanowania;
dodanie niestandardowych nagłówków HTTP lub skonfigurowanie niestandardowego klienta użytkownika.
Dodatkowe funkcje:
tworzenie raportów podatności w różnych formatach (HTML, XML, JSON, TXT);
wstrzymywanie i wznawianie skanowania lub ataku (mechanizm sesji wykorzystujący bazy danych SQLite3);
podświetlenie terminala w celu uwydatnienia luk;
różne poziomy rejestrowania;
Szybki i łatwy sposób na aktywację/dezaktywację modułów ataku.
Instalacja
Aktualną wersję Wapiti można zainstalować na 2 sposoby:
pobierz źródło z oficjalnego źródła сайта i uruchom skrypt instalacyjny, mając wcześniej zainstalowany Python3;
za pomocą polecenia pip3 install wapiti3.
Po tym Wapiti będzie gotowy do pracy.
Praca z narzędziem
Aby zademonstrować działanie Wapiti, skorzystamy ze specjalnie przygotowanego stoiska sites.vulns.pentestit.ru (zasób wewnętrzny), zawierającego różne luki w zabezpieczeniach (Injection, XSS, LFI/RFI) i inne niedociągnięcia aplikacji webowych.
Informacje są podawane wyłącznie w celach informacyjnych. Nie łam prawa!
Podstawowe polecenie uruchamiające skaner:
# wapiti -u <target> <options>
Jednocześnie dostępna jest dość szczegółowa pomoc z ogromną liczbą opcji uruchamiania, na przykład:
--zakres - obszar zastosowań
Jeśli określisz parametr zakresu wraz z adresem URL przeszukiwania, możesz dostosować obszar przeszukiwania witryny, określając zarówno pojedynczą stronę, jak i wszystkie strony, które można znaleźć w witrynie.
-s и -x — opcje dodawania lub usuwania określonych adresów URL. Opcje te są przydatne, gdy trzeba dodać lub usunąć określony adres URL podczas procesu indeksowania.
--pominąć — określony parametr za pomocą tego klucza zostanie przeskanowany, ale nie zostanie zaatakowany. Przydatne, jeśli istnieją jakieś niebezpieczne parametry, które najlepiej wykluczyć podczas skanowania.
--weryfikuj-ssl — włącz lub wyłącz weryfikację certyfikatu.
Skaner Wapiti jest modułowy. Aby jednak uruchomić określone moduły, w tym te, które są automatycznie podłączane podczas działania skanera, musisz użyć przełącznika -m i wyświetlić listę potrzebnych modułów, oddzielając je przecinkami. Jeśli klucz nie zostanie użyty, domyślnie będą działać wszystkie moduły. W najprostszej wersji będzie to wyglądać następująco:
Ten przykład użycia oznacza, że podczas skanowania celu będziemy używać wyłącznie modułów SQL, XSS i XXE. Dodatkowo możesz filtrować działanie modułów w zależności od pożądanej metody. Na przykład -m „xss: pobierz, blindsql: wyślij, xxe: wyślij”. W tym wypadku moduł xss będzie dotyczyć żądań wysyłanych metodą GET oraz modułu blibdsql - do żądań POST itp. Nawiasem mówiąc, jeśli jakiś moduł, który znalazł się na liście, nie był potrzebny podczas skanowania lub zajmuje bardzo dużo czasu, to wciskając kombinację Ctrl+C można pominąć korzystanie z bieżącego modułu, wybierając odpowiednią pozycję w interaktywnym menu.
Wapiti obsługuje przekazywanie żądań przez serwer proxy za pomocą klucza -p i uwierzytelnianie w witrynie docelowej za pomocą parametru -a. Możesz także określić typ uwierzytelniania: Podstawowy, Digest, Kerberos и NTLM. Dwa ostatnie mogą wymagać instalacji dodatkowych modułów. Dodatkowo możesz wstawiać do żądań dowolne nagłówki (w tym dowolne User-Agent) i wiele więcej.
Aby skorzystać z uwierzytelniania, możesz skorzystać z narzędzia wapiti-getcookie. Z jego pomocą formujemy ciastko, którego Wapiti użyje podczas skanowania. Tworzenie ciastko zrobione za pomocą polecenia:
Rozważając główną funkcjonalność skanera, ostateczną prośbą o przetestowanie aplikacji webowej w naszym przypadku było:
# wapiti --level 1 -u http://sites.vulns.pentestit.ru/ -f html -o /tmp/vulns.html -m all --color -с cookie.json --scope folder --flush-session -A 'Pentestit Scans' -p http://proxy.office.pentestit.ru:3128
gdzie wśród innych parametrów:
-f и -o — format i ścieżka zapisu raportu;
-m — nie zaleca się łączenia wszystkich modułów, ponieważ wpłynie na czas testowania i rozmiar raportu;
--kolor — podkreśla znalezione luki w zależności od ich krytyczności według samego Wapiti;
-c - użycie pliku z ciastko, wygenerowany przy użyciu wapiti-getcookie;
--zakres — wybór celu ataku. Wybór opcji falcówka Każdy adres URL będzie przeszukiwany i atakowany, zaczynając od podstawowego. Podstawowy adres URL musi zawierać ukośnik (bez nazwy pliku);
--sesja spłukiwania — pozwala na wielokrotne skanowanie, w którym poprzednie wyniki nie będą brane pod uwagę;
-A - własny User-Agent;
-p — adres serwera proxy, jeśli to konieczne.
Trochę o raporcie
Wynik skanowania prezentowany jest w formie szczegółowego raportu o wszystkich wykrytych podatnościach w formacie strony HTML, w przejrzystej i łatwej do odczytania formie. W raporcie zostaną wskazane kategorie i liczba wykrytych luk, ich opisy, żądania, polecenia curl i wskazówki, jak je zamknąć. Dla ułatwienia nawigacji do nazw kategorii zostanie dodany link, po kliknięciu na który można do niej przejść:
Istotną wadą raportu jest brak samej mapy aplikacji webowych, bez której nie będzie wiadomo, czy wszystkie adresy i parametry zostały przeanalizowane. Istnieje również możliwość fałszywych alarmów. W naszym przypadku raport zawiera „pliki kopii zapasowych” i „pliki potencjalnie niebezpieczne”. Ich liczba nie odpowiada rzeczywistości, ponieważ na serwerze nie było takich plików:
Być może z czasem nieprawidłowo działające moduły zostaną naprawione. Kolejną wadą raportu jest brak kolorowania wykrytych podatności (w zależności od ich krytyczności), a przynajmniej podziału na kategorie. Jedynym sposobem, w jaki możemy pośrednio zrozumieć krytyczność znalezionej luki, jest użycie parametru --kolor podczas skanowania, a następnie znalezione luki zostaną pokolorowane różnymi kolorami:
Ale sam raport nie zapewnia takiego zabarwienia.
Luki w zabezpieczeniach
SQLi
Skaner częściowo poradził sobie z wyszukiwaniem SQLi. Podczas wyszukiwania luk SQL na stronach, które nie wymagają uwierzytelnienia, nie pojawiają się żadne problemy:
Nie udało się znaleźć luki na stronach dostępnych dopiero po uwierzytelnieniu, nawet przy użyciu valid ciastko, ponieważ najprawdopodobniej po pomyślnym uwierzytelnieniu ich sesja zostanie „wylogowana” i ciastko stanie się nieważne. Gdyby funkcja cofnięcia autoryzacji została zaimplementowana jako osobny skrypt odpowiedzialny za przetwarzanie tej procedury, wówczas możliwe byłoby jej całkowite wykluczenie poprzez parametr -x i tym samym uniemożliwienie jej uruchomienia. W przeciwnym razie nie będzie możliwości wykluczenia jego przetwarzania. Nie jest to problem konkretnego modułu, ale narzędzia jako całości, jednak z powodu tego niuansu nie udało się wykryć kilku zastrzyków w zamkniętym obszarze zasobów.
XSS
Skaner doskonale poradził sobie z postawionym zadaniem i znalazł wszystkie przygotowane podatności:
LFI/RFI
Skaner znalazł wszystkie podstawowe luki:
Ogólnie rzecz biorąc, pomimo fałszywych alarmów i brakujących luk, Wapiti, jako darmowe narzędzie, wykazuje całkiem niezłe wyniki wydajnościowe. W każdym razie warto przyznać, że skaner jest dość wydajny, elastyczny i wielofunkcyjny, a co najważniejsze, jest darmowy, więc ma prawo być używany, pomagając administratorom i programistom uzyskać podstawowe informacje o stanie bezpieczeństwa sieci aplikacja.