Wapiti — samodzielne sprawdzanie witryn pod kątem podatności

Wapiti — samodzielne sprawdzanie witryn pod kątem podatności
W poprzedniej artykuł opowiedzieliśmy o Nemesida WAF Free - darmowym narzędziu do ochrony stron internetowych i API przed atakami hakerskimi, a w tym artykule postanowiliśmy przyjrzeć się popularnemu skanerowi podatności Wapiti.

Skanowanie strony internetowej pod kątem podatności to niezbędny krok, który, w połączeniu z analizą kodu źródłowego, pozwala ocenić poziom jej zabezpieczeń przed zagrożeniem kompromitacji. Skanowanie zasobów internetowych można wykonać za pomocą wyspecjalizowanych narzędzi.

Nikto, W3af (napisany w Pythonie 2.7, którego wsparcie zakończono) czy Arachni (od lutego nie jest już wspierany) to najpopularniejsze rozwiązania dostępne w bezpłatnym segmencie. Oczywiście są też inne, takie jak Wapiti, na którym chcielibyśmy się skupić.

Wapiti działa w przypadku następujących typów podatności:

  • ujawnienie pliku (lokalne i zdalne, fopen, readfile);
  • iniekcje (PHP / JSP / ASP / SQL i iniekcje XPath);
  • XSS (cross-site scripting) (odzwierciedlona i trwała);
  • wykrywanie i wykonywanie poleceń (eval (), system (), passtru ());
  • iniekcje CRLF (podział odpowiedzi HTTP, utrzymywanie sesji);
  • iniekcja XXE (eksternalne encje XML);
  • SSRF (fałszowanie żądań po stronie serwera);
  • wykorzystanie znanych potencjalnie niebezpiecznych plików (dzięki bazie danych Nikto);
  • słabe konfiguracje .htaccess, które można obejść;
  • istnienie plików kopii zapasowych ujawniających poufne informacje (ujawnienie kodu źródłowego);
  • Shellshock;
  • otwarte przekierowania;
  • niestandardowe metody HTTP, które mogą być dozwolone (PUT).

Możliwości:

  • wsparcie dla proxy HTTP, HTTPS i SOCKS5;
  • uwierzytelnianie za pomocą kilku metod: Podstawowego, Digest, Kerberos lub NTLM;
  • możliwość ograniczenia zakresu skanowania (domena, folder, strona, adres URL);
  • automatyczne usuwanie jednego z parametrów w adresie URL;
  • wielokrotne środki ostrożności przeciwko nieskończonym cyklom skanowania (przykład: ifor, ograniczenie wartości dla parametru);
  • możliwość nadawania priorytetu badaniu adresów URL (nawet jeśli nie mieszczą się w zakresie skanowania);
  • możliwość wykluczenia niektórych adresów URL z skanowania i ataków (na przykład: URL logout);
  • import plików cookie (uzyskiwanie ich za pomocą narzędzia wapiti-getcookie);
  • możliwość włączania / wyłączania weryfikacji certyfikatów SSL;
  • możliwość wydobywania adresów URL z JavaScript (bardzo prosty interpreter JS);
  • interakcja z HTML5;
  • kilka opcji zarządzania zachowaniem i ograniczeniami crawlera;
  • ustawienie maksymalnego czasu trwania procesu skanowania;
  • dodanie niektórych konfigurowalnych nagłówków HTTP lub dostosowanie użytkownika User-Agent.

Dodatkowe możliwości:

  • tworzenie raportów o lukach w różnych formatach (HTML, XML, JSON, TXT);
  • wstrzymywanie i wznawianie skanowania lub ataku (mechanizm sesji z użyciem baz danych SQLite3);
  • podświetlenie w terminalu dla wyróżnienia luki;
  • różne poziomy logowania;
  • szybki i prosty sposób na aktywację/dezaktywację modułów ataku.

Instalacja

Aktualną wersję Wapiti można zainstalować na 2 sposoby:

  • pobranie źródeł z oficjalnej strony i uruchomienie skryptu instalacyjnego, po wcześniejszym zainstalowaniu Python3;
  • za pomocą polecenia pip3 install wapiti3.

Po tym Wapiti będzie gotowy do pracy.

Praca z narzędziem

Aby zademonstrować działanie Wapiti, użyjemy specjalnie przygotowanego stanowiska sites.vulns.pentestit.ru (wewnętrzny zasób), które zawiera różne luki (Injection, XSS, LFI/RFI) i inne niedociągnięcia aplikacji webowych.

Informacje są podawane wyłącznie w celach informacyjnych. Nie łam prawa!

Podstawowe polecenie do uruchomienia skanera:

# wapiti -u <target> <options>

Istnieje dość szczegółowa dokumentacja z ogromną ilością opcji uruchamiania, na przykład:

—scope — zakres stosowania
Jeśli wraz z URL do skanowania podasz parametr scope, można regulować zakres skanowania strony, wskazując zarówno pojedynczą stronę, jak i wszystkie strony, które uda się znaleźć na stronie.

-s i -x — parametry dodawania lub usuwania konkretnych adresów URL. Te parametry są przydatne, gdy trzeba dodać lub usunąć konkretny adres URL w procesie skanowania.

—skip — podany parametr z tym kluczem będzie skanowany, ale nie będzie atakowany. Przydatne, jeśli są jakieś niebezpieczne parametry, które lepiej wykluczyć podczas skanowania.

—verify-ssl — włączenie lub wyłączenie weryfikacji certyfikatu.
Skaner Wapiti jest modułowy. Jednak, aby uruchomić konkretne moduły spośród tych, które są automatycznie aktywowane podczas pracy skanera, należy użyć klucza -m i wymienić potrzebne przez przecinek. Jeśli klucza nie użyjesz, będą domyślnie działały wszystkie moduły. W najprostszym przypadku będzie to wyglądać następująco:

# wapiti -u http://sites.vulns.pentestit.ru/ -m sql,xss,xxe

Ten przykład użycia oznacza, że będziemy używać tylko modułów SQL, XSS i XXE podczas skanowania celu. Oprócz tego można filtrować działanie modułów w zależności od wymaganego metody. Na przykład -m “xss: get, blindsql: post, xxe: post”. W takim przypadku moduł xss będzie stosowany do żądań przesyłanych metodą GET, a moduł blibdsql — do żądań POST itd. A propos, jeśli jakiś moduł, który został włączony do listy, nie był potrzebny podczas skanowania lub działa zbyt długo, można nacisnąć kombinację Ctrl+C, aby pominąć użycie bieżącego modułu, wybierając odpowiednią opcję w interaktywnym menu.

Wapiti obsługuje przesyłanie żądań przez serwer proxy za pomocą klucza -p i uwierzytelnienie na docelowej stronie internetowej za pomocą parametru -a. Można również określić typ uwierzytelnienia: Basić, Digest, Kerberos i NTLM. W przypadku dwóch ostatnich może być konieczne zainstalowanie dodatkowych modułów. Ponadto można wstawiać do żądań dowolne nagłówki (w tym arbitralny User-Agent) i wiele więcej.

Aby użyć uwierzytelnienia, można skorzystać z narzędzia wapiti-getcookie. Dzięki temu formułujemy cookie, które Wapiti będzie używać podczas skanowania. Formułowanie cookie wykonuje się za pomocą polecenia:

# wapiti-getcookie -u http://sites.vulns.pentestit.ru/login.php -c cookie.json

W trakcie pracy w trybie interaktywnym odpowiadamy na pytania i podajemy potrzebne informacje typu: login, hasło i inne:

Wapiti — samodzielne sprawdzanie witryn pod kątem podatności

Na wyjściu otrzymujemy plik w formacie JSON. Inną opcją jest dodanie wszystkich niezbędnych informacji przez parametr -d:

# wapiti-getcookie - http://sites.vulns.pentestit.ru/login.php -c cookie.json -d "username=admin&password=admin&enter=submit"

Wynik będzie podobny:

Wapiti — samodzielne sprawdzanie witryn pod kątem podatności

Rozważając podstawową funkcjonalność skanera, końcowym żądaniem do przeprowadzenia testowania aplikacji internetowej w naszym przypadku stało się:

# 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 i -o — format i ścieżka do zapisania raportu;

-m — włączenie wszystkich modułów — nie jest zalecane, ponieważ wpłynie na czas testowania i rozmiar raportu;

—color — podświetlanie znalezionych luk w zależności od ich krytyczności według samego Wapiti;

-c — użycie pliku z cookie, wygenerowanego za pomocą wapiti-getcookie;

—scope — wybór celu ataku. Wybierając opcję folder będzie skanowany i atakowany każdy adres URL, zaczynając od podstawowego. Podstawowy URL musi kończyć się ukośnikiem (bez nazwy pliku);

—flush-session — umożliwia ponowne skanowanie, przy którym wcześniejsze wyniki nie będą brane pod uwagę;

-A — własny User-Agent;

-p — adres proxy serwera, jeśli to konieczne.

Kilka słów o raporcie

Wyniki skanowania przedstawione są w formie szczegółowego raportu dotyczącego wszystkich wykrytych podatności w formacie strony HTML, w zrozumiałej i przystępnej formie. Raport zawiera kategorie oraz liczbę wykrytych podatności, ich opisy, zapytania, polecenia do curl i porady dotyczące ich naprawy. Dla ułatwienia nawigacji w tytułach kategorii dodawane są linki, klikając które można się do nich przenieść:

Wapiti — samodzielne sprawdzanie witryn pod kątem podatności

Istotną wadą raportu jest brak mapy aplikacji webowej, bez której nie będzie jasne, czy wszystkie adresy i parametry zostały przeanalizowane. Istnieje także ryzyko fałszywych trafień. W naszym przypadku w raporcie figurowały „pliki kopii zapasowych” oraz „potencjalnie niebezpieczne pliki”. Ich liczba nie odpowiada rzeczywistości, ponieważ takich plików na serwerze nie było:

Wapiti — samodzielne sprawdzanie witryn pod kątem podatności

Możliwe, że nieprawidłowo działające moduły zostaną naprawione w przyszłości. Inną wadą raportu jest brak kolorowania wykrytych podatności (w zależności od ich krytyczności), lub przynajmniej ich podzielenia według kategorii. Jedynie w sposób pośredni możemy zrozumieć krytyczność wykrytej podatności, stosując parametr —color podczas skanowania, a wówczas wykryte podatności będą kolorowane różnymi kolorami:

Wapiti — samodzielne sprawdzanie witryn pod kątem podatności

Jednak w samym raporcie podobne kolorowanie nie jest przewidziane.

Podatności

SQLi

Skaner częściowo poradził sobie z wykrywaniem SQLi. Podczas poszukiwania podatności SQL na stronach, gdzie nie wymagana jest autoryzacja, nie występują żadne problemy:

Wapiti — samodzielne sprawdzanie witryn pod kątem podatności

Nie udało się znaleźć podatności na stronach, które są dostępne tylko po autoryzacji, nawet przy użyciu ważnych cookie, ponieważ najprawdopodobniej po pomyślnej autoryzacji dojdzie do "wylogowania z sesji" i cookie staną się nieważne. Gdyby funkcja dezautoryzacji była zrealizowana w formie osobnego skryptu odpowiedzialnego za obsługę tej procedury, można by ją całkowicie wykluczyć poprzez parametr -x, tym samym zapobiegając jej uruchomieniu. W przeciwnym razie nie da się wykluczyć jej obsługi. To problem nie konkretnego modułu, a narzędzia w ogóle, ale z powodu tego usterki nie udało się wykryć kilku iniekcji w zamkniętym obszarze zasobów.

XSS

Z zadanym zadaniem skaner poradził sobie doskonale i znalazł wszystkie przygotowane podatności:

Wapiti — samodzielne sprawdzanie witryn pod kątem podatności

LFI/RFI

Skaner wykrył wszystkie ukryte podatności:

Wapiti — samodzielne sprawdzanie witryn pod kątem podatności

Ogólnie rzecz biorąc, pomimo fałszywych alarmów i pominiętych podatności, Wapiti, jako darmowe narzędzie, osiąga całkiem niezłe wyniki. Należy przyznać, że skaner jest dość potężny, elastyczny i funkcjonalny, a co najważniejsze — darmowy, więc zasługuje na użycie, pomagając administratorom i programistom uzyskać podstawowe informacje o stanie zabezpieczeń aplikacji internetowej.

Dbaj o zdrowie i bezpieczeństwo!

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster