20-10-2019 / Burp

BURP - Intruder

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

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

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

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.

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

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

Ż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.

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.

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.

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.

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.

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.

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.

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łę.

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.

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.

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.

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.

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>.

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.