Sekcje

Przejdź na skróty do treści. | Przejdź do nawigacji


Baza wiedzy Publikacje Burp Suite Professional - intruder

Burp Suite Professional - intruder

Wstęp

Chciałbyś zakupić licencję na burp suite? Pytaj o szczegóły: securitum@securitum.pl Sprzedajemy burp suite z polską fakturą VAT.

Wypróbuj burp suite w praktyce na szkoleniu z bezpieczeństwa aplikacji www

Burp intruder to zaawansowany i jednocześnie prosty w obsłudze fuzzer http. Jednym z zastosowań tego typu fuzzera jest możliwość półautomatycznego wykrywania podatności w aplikacji webowej. Połautomatycznego, ponieważ to na osobie korzystającej z narzędzia spoczywa:

  • określenie fuzzowanych punktów wejścia do aplikacji,
  • określenie sposobu wykonywania fuzzingu (np. zmienne fuzzowane kolejno, grupami, itp)
  • określenie charakteru fuzzingu (np. z wykorzystaniem błędów w obsłudze unicode, bruteforce, poszukiwanie podatności typu SQL injection, itd),
  • dokładne określenie samych payloadów.

Po wykonaniu opisanych powyżej akcji, następuje automatyczna praca fuzzera, który z kolei dostarcza niezinterpretowane wyniki. Interpretacja wyników należy również do audytora/pentestera.

Zobaczmy jak wygląda wykorzystanie Burp intrudera w praktyce.

Ustawienia punktów wejścia

Pierwszym krokiem jest określenie jakie parametry (punkty wejścia) chcemy poddać fuzzingowi. Możemy wykonać tą operację ręcznie (tworząc zapytanie HTTP od zera) lub przesłać request HTTP do fuzzera z innego modułu Burp Suite (np. z proxy). W tym drugim przypadku, program podpowiada nam sugerowane punkty wejścia - tj. parametry, które będziemy chcieli w zautomatyzowany sposób podstawiać innymi wartościami (payloadami), obserwując wyniki. Przykładowy, przesłany do intrudera  request HTTP prezentuję poniżej:

 

Burp intruder - ustawienia

 

Ustawienie sposobu podstawiania

Po ustaleniu punktów wejścia (oznaczonych w intruderze znakami §...§) należy określić w jaki sposób będą one podstawiane. Na zrzucie ekranowym powyżej została wybrana opcja sniper, która oznacza podstawiania punktów wejścia kolejno. To znaczy: w pierwszej wartości zostaną zastosowane podstawienia dla pierwszej ustalonej zmiennej (pozostałe przyjmują wartości domyślne), później dla drugiej zmiennej, itd.

Kolejny krok to określenie payloadów, którymi uzupełniane będą punkty wejścia.

Ustalenie payloadów

Program oferuje kilka gotowych szablonów fuzzingu, w zależności jaki zamierzamy osiągnąć efekt. Część szablonów prezentuję na liście rozwijanej znajdującej się na zrzucie ekranowym:

 

Burp intruder - ustalenia payloadów

 

Każdy z szablonów posiada dedykowane dla siebie ustawienia, za pomocą których sterujemy doborem zbioru payloadów. Przykładowo w szablonie 'preset list', dostępne mamy predefiniowane przez twórców Burp Suite zbiory, umożliwiające fuzzing zmierzający do osiągnięcia określonych celów (np. wykrycia pewnych podatności w aplikacji webowej). Możemy uzupełnić tą listę również o własne payloady. W takim przypadku lepiej jednak skorzystać z szablonu 'runtime file', gdzie istnieje możliwość załadowania własnego pliku tekstowego z payloadami (jeden payload na linię). Mając odpowiednią bazę plików możemy stosować wybrane jej elementy w zależności od potrzeby...

Poniżej znajduje się zrzut ekranowy ze szczegółami szablonu 'preset list'

Burp intruder - ustalenia payloadów

Jako ciekawy przykład innego szablonu, warto wspomnieć moduł umożliwiający wykrycie podatności związanych z nieprawidłową obsługą unicode:

Burp intruder - illegal unicode

Czy też szablon umożliwiający generowanie liczb:

Burp intruder - generacja liczb

Przykładowy atak

W ramach przykładowego ataku z wykorzystaniem Burp Suite, pokażę mniej typowe wykorzystanie burp intrudera - mianowicie użycie techniki bruteforce do przełamania systemu uwierzytelnienia. Przykładowy atak wygląda następująco:

  1. Lokalizacja requestu HTTP, z wykorzystaniem którego będziemy wykonywać atak. Tutaj użyć można np. modułu proxy, który zachowa oryginalny request z przeglądarki. Po kliknięciu prawym przyciskiem myszy na odpowiednim requeście w historii komunikacji (proxy -> history), możemy skierować go do modułu intruder:


  2. W module intruder ręcznie ustalamy punkt wejścia. W tym celu w pierwszej kolejności usuwamy sugerowany punkt wejścia (przycik clear) a następnie dodajemy nowy punkt (przycisk add).
    W trakcie ataku będziemy generować requesty HTTP ze zmienionym nagłówkiem Authorization. W naszym przypadku nagłówek ten przyjmuje postać:
    Authorization: Basic Base64(user:password)
    gdzie Base64(...) to reprezentacja ciągu znaków w kodowaniu Base64. Dokładniej rzecz biorąc, będziemy zmieniać wartość Base64(user:password) i w ten sposób umieszczamy nasz punkt wejścia. Wartość która znajduje się wewnątrz tak określonego punktu (YTph), jest bez znaczenia, ponieważ w będzie ona zamieniona przez wartości payloadów. 

    Burp intruder - przykładowy atakBurp intruder - przykładowy atak
  3. W kolejnym kroku (selekcja payloadów) wybieramy szablon brute forcer. Ustalamy odpowiednio alfabet: [a-z]. Oraz dodatkowo parametry odpowiedniego zakodowania każdego payloadu, przed jego umieszczeniem w requeście HTTP - Base64, z prefixem admin. Będziemy bowiem zgadywać hasło dla użytkownika admin. Docelowo każdy z naszych umieszczonych w requeście HTTP payloadów będzie miał formę:
    Base64(admin:<nowo_wygenerowany_payload>)
    Z kolei nagłówek HTTP przyjmie formę:
    Authorization: Basic Base64(admin:<nowo_wygenerowany_payload>)

    Burp intruder - przykładowy atak bruteforce
  4. Po uruchomieniu fuzzera z określonymi wcześniej parametrami oraz zbiorem payloadów, następuje generowanie requestów HTTP przez fuzzer. W trakcie działania intrudera otrzymujemy listę wszystkich wykonanych requestów HTTP wraz z pewną charakterystyką (payload, zwrócony kod HTTP, ewentualny timeout przy odpowiedzi, długość odpowiedz HTTP, itp.). Listę wyników można sortować po dowolnej kolumnie, a także uzupełniać o pewne dodatkowe kolumny, co ułatwia analizę wyników. Przyznam jednak, że na dłuższą analiza tego typu może być to uciążliwa i przydałyby w aplikacji szablony ułatwiające tego typu pracę.

    W poniższym przykładzie od razu widać nietypową odpowiedź serwera www. Jej "nietypowość" polega na braku wygenerowania błędu - co oznacza że, podane przez fuzzer hasło było prawidłowe (w innych przypadkach serwer odpowiadał kodem 401 Unauthorized). Dodatkowym elementem wyróżniającym jest długość HTTP response, sugerująca serwowanie pełnej, prawidłowej odpowiedzi (56868 bajtów zamiast 433 jak w innych odpowiedziach HTTP):


Powyższy, prosty przykład pokazuje podstawową ideę fuzzingu:

  • wywołanie aplikacji z pewną pulą zmienionych wejść,
  • analiza wyniku pod względem nietypowych odpowiedzi,
  • finalnie, wysnucie na tej podstawie pewnych wniosków o aplikacji. 

W naszym przypadku był to "zwykły" bruteforce, gdzie:

  • wybrany został odpowiedni punkt wejścia (nagłówek HTTP Authorization),
  • payloady zostały dobrane jako zbiór wszystkich słów czteroznakowych składających się z małych liter [a-z],
  • analiza wyników pokazała jeden response HTTP nie zawierający kodu błędu, co zostało zinterpretowane jako udana próba zgadnięcia hasła.

Omawiany przykład jest dość prosty, jednak pokazuje zasadę działania fuzzera dostępnego w Burp Suite Professional. W podobny sposób można wykonać analizę aplikacji na pod względem występowaniach podatności, związanych z nieprawidłową obsługą wejścia.

 Podsumowanie

Moduł intruder zawarty w Burp Suite Professional, to rozbudowany fuzzer HTTP, z którego w zasadzie można zacząć korzystać "z marszu". Przemyślany interface powoduje, że z modułu korzysta się bardzo wygodnie, a predefiniowane bazy payloadów mogą pomóc rozpocząć korzystanie z narzędzia mniej zaawansowanym użytkownikom. Mam też nadzieję, że twórcy Burp-a rozbudują w jednej z kolejnych wersji moduł interpretacji wyników generowanych przez fuzzer.

Zalety modułu

  • Duże możliwości fuzzera.
  • Zadowalająca szybkość działania (praca wielowątkowa).
  • Przemyślany interfejs użytkownika.
  • Niezła integracja z pozostałymi modułami Burp Suite.
  • Możliwość prostej analizy czasowej podatności (np. SQL injection).
  • Pewne możliwości rozszerzenia narzędzia (poprzez zakodowanie odpowiednich interfejsów Java - dla zaawansowanych użytkowników)
  • Atrakcyjna cena.

Wady

  • Brak szablonów umożliwiających wsparcie interpretacji wyników (wyszukiwanie nietypowych odpowiedzi HTTP)
  • Brak możliwości zapisywania profili w module przygotowywania payloadów.

 

--michal.sajdak@securitum.pl

Przydatne informacje? Polub nas na facebooku.

Nawigacja
 
Darmowy magazyn o ITsec

zine
Subskrybuj RSS:
RSS