20-10-2019 / Burp

BURP - Intruder

Posiadasz listę loginów i haseł do serwisu, dla którego przeprowadzasz test penetracyjny.

Lista kont

Chcesz sprawdzić, które z nich należą do administratorów, a które to konta zwykłych użytkowników.

Typ konta

Niestety, typ konta wyświetla się na innej podstronie niż ta, która jest zwracana przez serwer po zalogowaniu.

Rozwiązanie w Pythonie

Oczywiście możesz napisać kawałek skryptu w Pythonie, który najpierw zalogował by się przy użyciu podanych danych a następnie pobrał treść podstrony profil.

Ale można to również zrobić bezpośrednio z Burpa korzystając z makr.

Popatrzmy na przykład.

Formularz logowania

Widzimy tutaj formularz z miejscem na login i hasło.

Po prawidłowym zalogowaniu widzimy nazwę użytkownika.

Typ konta

Żeby sprawdzić jego typ, musimy przejść do podstrony profil.php.

Tam to zwracany jest ciąg user albo admin w zależności od typu konta.

Pary loginów i haseł przechowujemy rozdzielone dwukropkiem w pliku tekstowym.

Lista kont

Do testów użyjemy narzędzia Intruder.

Najpierw z listy wybieramy żądanie, w którym to próbowaliśmy się zalogować.

Ono będzie stanowiło naszą bazę do wykonywania dalszych żądań.

Klikamy prawym przyciskiem myszy i wybieramy opcję: Send to intruder.

Wybór żądania

Przechodzimy do podświetlonej zakładki.

Teraz musimy wskazać gdzie znajduje się login i hasło – tak aby oprogramowanie wiedziało, w którym miejscu ma wstawiać dodatkowe kombinację.

Burp sam wykrył 4 potencjalne miejsca, zaznaczając je na zielono.

Usuwamy dwa nieistotne, które zostały oznaczone przez pomyłkę.

Możemy tego dokonać zaznaczając odpowiedni ciąg i wykorzystując guzik Clear.

Potencjalne miejsca

Intruder pozwala na przeprowadzanie różnych rodzajów ataków bruteforce.

Zazwyczaj mamy jakąś listę loginów i haseł i próbujemy wszystkich możliwych kombinacji.

W naszym przypadku – wiemy dokładnie jaki jest login i hasło do konkretnego konta.

Wykorzystamy więc opcję Pitchfork.

Opcja pitchfork

W niej to definiuje się dla każdej pozycji osobną listę.

Mamy więc osobną listę dla loginów oraz osobną dla haseł.

Intruder tworząc nowe żądanie bierze pierwszy element z listy loginów i łączy go z pierwszym elementem z listy haseł.

Listy definiujemy w zakładce payloads.

Set pierwszy to nasz login, który został wcześniej oznaczony na zielono.

Wczytujemy wcześniej przygotowane dane z pliku tekstowego.

Tutaj natrafiamy na mały problem.

Wybór danych

Intruder traktuje cały ciąg z pliku jako login a nie tylko dane znajdujące się przed pierwszym dwukropkiem.

Możemy to naprawić korzystając z dodatkowej opcji, która pozwala na przetwarzanie listy przed jej użyciem w żądaniu.

Match/replace to zwykłe znajdź zamień z wykorzystaniem wyrażeń regularnych.

Wyrażenie regularne

Przy jego pomocy usuwamy wszystko, co znajduje się po pierwszej kropce: :(.*?)$.

Analogicznie postępujemy w przypadku haseł – delikatnie zmieniając wyrażenie: ^(.*?):

Możemy teraz przetestować atak.

Test ataku

I rzeczywiście widzimy, że logowanie się powiodło.

Pora na drugą część – czyli sprawdzanie typu zalogowanego konta.

Burp pozwala na wykonywanie dodatkowych, automatycznych żądań, gdy spełnione zostaną odpowiednie kryteria.

Możemy je ustawić w zakładce Project Options -> Sessions.

Tutaj tworzymy nową regułę.

Reguła Run a post-request macro

Jako jej akcję ustawiamy Run a post-request macro.

Teraz tworzymy nowe makro – czyli wybieramy żądanie, jakie ma się automatycznie wykonać.

Z listy wybieramy to, które prowadzi do podstrony profil.php.

Ta podstrona wykorzystuje ciasteczka w celu sprawdzenia czy użytkownik jest zalogowany.

To ciasteczko, ustawiane jest wcześniej przez moduł Intrudera.

Obsługa ciasteczek

Aby zostało ono użyte również w tym żądaniu musimy zaznaczyć opcję: Use cookies from the session handling cookie jar in requests.

Standardowo, Intruder otrzymał by wynik żądania ze strony login.php.

My chcemy aby zamiast tego przekazana została treść profil.php.

Zaznaczamy więc opcję Pass back the final response from the macro.

Szczegóły akcji

Pozostało zdefiniowanie zakresu kiedy dana reguła ma działać.

W naszym przypadku ma to być moduł Intruder oraz jeden, specyficzny adres URL.

Na koniec musimy upewnić się, czy w zakładce Cookie jar zaznaczona jest opcja Intruder.

W innym wypadku, ciasteczka nie będą odpowiednio przekazywane pomiędzy dwoma modułami Burpa.

Pora na testy.

Wynik

Całość działa poprawnie – to jest w wynikach widzimy typ konta.

Tylko, że wchodzenie w każde żądanie z osobna i poszukiwanie odpowiedniej treści jest na dłuższą metę męczące.

Naszym celem jest wyciągnięcie tych informacji i wyświetlenie ich w odpowiedniej kolumnie.

Opcja grep-extract

Służy do tego opcja: grep-extract.

Definiujemy tutaj gdzie znajdują się interesujące nas informację.

Typ konta znajduje się pomiędzy tagiem <b>.

Skorzystamy więc z prostego wyrażenia regularnego: <b>(.*?)</b>.

Wynik opcji grep-extract

Tym razem całość wygląda zdecydowanie lepiej.

Co więcej, teraz możemy sortować otrzymane wyniki w zależności od typu użytkownika.