
W poprzedniej 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 .
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 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,xxeTen 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.jsonW trakcie pracy w trybie interaktywnym odpowiadamy na pytania i podajemy potrzebne informacje typu: login, hasło i inne:

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:

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:3128gdzie 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ść:

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:

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:

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:

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:

LFI/RFI
Skaner wykrył wszystkie ukryte 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
