WEP lekcja #4 – DirBuster, bruteforce i włamanie do MySQL

W dzisiejszej lekcji szkolenia powiemy sobie o wstępnym szukaniu luk w stronach internetowych i zabezpieczaniu phpMyAdmina. W pierwszym w kroku cyberprzestępca lub pentester za pomocą wyszukiwarek internetowych (zindeksowane treści w Google) i dodatkowych narzędzi takich jak DirBuster poszukuje wektorów ataku. Ma to na celu znalezienie jak największej liczby interesujących skryptów (np. paneli logowania), plików konfiguracyjnych i innych danych,, umożliwiających znalezienie potencjalnych punktów dalszego ataku hakerskiego. Należy wiedzieć, że administratorzy strony najczęściej trzymają więcej skryptów niż jeden na serwerze (lub nawet kilka stron internetowych).

Czasami aby zaatakować skrypt główny np: bloga WordPress z wiadomościami ze świata, cyberprzestępca atakuje malutki gdzieś ukryty skrypcik, który jest źle zabezpieczony. Oczywiście powinieneś poszukiwać wektorów ataku nie tylko dedykowanych atakom słownikowym i brute-force. Gdy dowiesz się więcej z kolejnych lekcji o takich atakach jak SQL Injection lub XSS zrozumiesz wtedy, że większa ilość znalezionych folderów i plików na serwerze implikuje większą ilość potencjalnych luk możliwych do zaatakowania.

Materiał szkoleniowy DirBuster i  bruteforce– lekcja #4

Poniżej znajduje się czwarta już lekcja naszego szkolenia Web Application Pentesting. Zabezpieczamy i atakujemy zmodyfikowaną wersją brutforce, zarówno hasła jak i pliki i katalogi! Film dostępny jest w prawdziwym 1080p i 60fps. Miłego oglądania!

Fragment pliku konfiguracyjnego phpMyAdmin password

Plik domyślnie w pakiecie XAMPP znajduje się w C:\xampp\phpMyAdmin\config.inc.php. Jest to oczywiście zwykły plik konfiguracyjny phpMyAdmina napisany w języku PHP. Za jego pomocą możesz zabezpieczyć hasłem panel administracyjny phpMyAdmina.

/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '1234';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
$cfg['Lang'] = '';

/* Bind to the localhost ipv4 address and tcp */
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['connect_type'] = 'tcp';

Pamiętaj o ustawieniu również hasła w samej bazie danych w phpMyAdminie.

PhpMyadmin to tak naprawdę tylko rozbudowany skrypt PHP (web aplikacja), który łączy się z bazą danych MySQL. W naszym przypadku robi to za pomocą danych root i 1234. Działa to zupełnie tak jak skonfigurowany przez nas wcześniej DVWA. Dlaczego tak? Bo w jaki sposób miałby wiedzieć phpMyAdmin, czy dany użytkownik istnieje (może być ich więcej) i czy ma hasło? 🙂

Jako że nie chcieliśmy grzebać w ustawieniach serwera Apache to tutaj masz link do drugiej wersji phpMyAdmina, którą możesz umieścić w katalogu htdocs. My nazwaliśmy ten katalog PHP, w celu zaprezentowania działania w dalszej części filmu DirBustera. Użyta przez nas wersja phpMyAdmina to najnowsza na chwile obecną 4.6.0.

Użyte polecenia THC-Hydra http-post-form przeciwko phpMyAdmin 4.6.0 (bruteforce z wieloma loginami)

Poniżej została zaprezentowana komenda zaprezentowana w filmie. Warto zwrócić uwagę na parametr -L loginy.txt w którym zdefiniowaliśmy potencjalne loginy użytkowników systemu phpMyAdmin. Natomiast slownik.txt to typowy password dictionary.

hydra 192.168.0.14 -L loginy.txt -P slownik.txt http-post-form "/php/index.php:pma_username=^USER^&pma_password=^PASS^&server=1&target=index.php&token=04aeb2301c144c9ce8173af2dd1da6c1:F=Access denied" -V

Ciekawostka: Z podstaw matematyki łatwo policzyć, że ilość zapytań POST (kombinacji login+hasło), które Hydra musimy wykonać jest równa iloczynowi ilości loginów i haseł w plikach. W uproszczeniu mówiąc, dla każdego loginu musi być sprawdzony słownik ponownie od początku do końca.

Materiały dodatkowe do lekcji Web Application Pentesting #4

Już kiedyś powstał na naszym blogu wpis o białym wywiadzie i szukaniu informacji. Zapraszamy do zapoznania się z nim.

Czym jest footprinting? | PORADNIK o identyfikacji osoby

Praca domowa we własnym zakresie

Kolejne prace domowe utrwalające i pobudzające szare komórki dla Ciebie. Nie bój się szukać rozwiązań w wszelakich dokumentacjach typu man systemu Linux i wyszukiwarkach internetowych. Staraj się jednak unikać gotowców. Pod poniższymi zadaniami są oczywiście zwinięte rozwiązania. Nie psuj sobie zabawy. Spróbuj najpierw samemu rozwiązać problem. Powodzenia!

-> Zadanie 1

Umieść w folderze htdocs pobrany katalog dirbuster, który możesz pobrać TUTAJ. Uwaga! Możesz go samemu utworzyć. Pliki są puste, ważna jest struktura plików i katalogów a wygląda ona następująco:

Polecenie tree i struktura katalogów DirBuster.
Struktura plików w folderze dirbuster. Przy okazji zwróć uwagę na ciekawą aplikacje wbudowaną w system Microsoft Windows o nazwie tree. Przełącznik /F oznacza w tym przypadku, aby program listował nie tylko foldery, ale i też pliki.

Dostęp z poziomu strony www do niego to oczywiście http://192.168.0.14/dirbuster, co wynika z powyższej treści (zmień na adresu swojego XAMPPA).

Twoje zadanie jest następujące (Kali Linux, program DirBuster):

  • podszyj się nim pod inną przeglądarkę internetową np: Firefox,
  • ustaw liczbę wątków na 1,
  • limit zapytań na sekundę DirBuster ma być jak najmniejszy,
  • znajdź w powyższy sposób wszystkie dziesięć plików tekstowych z folderu dirbuster,
  • zakresem poszukiwań mogą być same cyfry (bo tak nazywają się pliki których poszukujesz).

Twój wynik powinien być zbliżony do poniższego obrazka. Skanowanie, myślę że nie powinno zająć dłużej niż 1-2 minuty.

Wynik i raport programu DirBuster i phpmyadmin password metody bruteforce.
Powinnaś otrzymać w rezultacie programu DirBuster wszystkie 10 plików tekstowych.

Wygrywasz tylko w przypadku, gdy znalazłeś 10 plików tekstowych i w logach serwera (Logs -> Apache -> access.log) jesteś widoczny jako przeglądarka Firefox, Chrome, Opera lub Safari. Ilość zapytań na sekundę powinna być w zakresie błędu pomiarowego powiedzmy na poziomie jednego/dwóch na sekundę.

Zapytania wygenerowane przy ataku brutforce. User-agent (odcisk przeglądarki) i godzina w logach serwera Apache XAMPP.
Access.log serwera apache dostępny z poziomu XAMPP wskazuje, że zapytania nie były bardzo często wykonywane. Potencjalnie mogą się wtopić na stronach posiadających większą ilość odwiedzających w informacje o innych prawdziwych użytkownikach strony www i zostać przeoczone przez administratora. Dodatkowo log nie wskazuje na użycie podejrzanego narzędzia typu DirBuster. Gdy cyberprzestępca wprowadza pewne bardziej ludzkie zachowania do swoich skryptów i aplikacji, może w ten sposób omijać systemy wykrywania włamań IDS. Przykładowo programując tego typu aplikacje w przyszłości, możesz zaimplementować funkcję losowej zmiany przeglądarki internetowej i dodatkowo cykliczne przerwy czasowe z losową ilością sekund. Uwaga! Jeśli plik jest za duży i długo się otwiera to po prostu zatrzymaj serwer Apache za pomocą przycisku STOP i usuń zawartośc pliku access.log.
Podpowiedź do zadania nr 1 - jeśli nie dajesz rady to spójrz!
Informacje o tym jak przedstawia się dokładnie dana przeglądarka internetowa, znajdziesz w swojej ulubionej wyszukiwarce internetowej pod frazą np: User-Agent. A potem pogrzeb w ustawieniach DirBustera… 😉

Ciekawostka: Nazwa przeglądarki internetowej wysyłana jest tak naprawdę w nagłówkach HTTP. Możesz to zobaczyć np: w wtyczce Live HTTP Headers programu Firefox. Najlepiej zrób to teraz (prawdziwy haker ma wszystko rozumieć a nie być bezmyślny). Nagłówki może każdy użytkownik sfałszować (również w tej samej wtyczce da się to zrobić). Konkluzja. Nigdy nie ufaj odwiedzającym! Wszystko co wysyła przeglądarka internetowa może być tak naprawdę fałszywe i odpowiednio spreparowane przez hakera… 

Uwaga! Rozwiązanie 1. Nie psuj sobie zabawy!

[caption id="" align="aligncenter" width="590"]DirBuster settings - konfiguracja wątków i ścieżki XAMPP. Poprawne rozwiązanie – ustawienia programu DirBuster.[/caption]

 

[caption id="" align="aligncenter" width="550"]DirBuster User-Agent HTTP Ustawienie HTTP User Agent w DirBuster -> Options ->Advenced Options -> Http Options przeglądarki (tutaj przykładowa, byle nie DirBuster).[/caption]

 

[caption id="" align="aligncenter" width="550"]limit number of requests per secound w DirBuster (Advenced Options) Ustawienie opcji w DirBuster -> Options -> Advenced Options -> Scan Options skanowania z limitem zapytań HTTP 1 na sekundę.[/caption]

Uwaga! Jeśli szukasz ciekawych słowników stworzonych przez inne osoby używaj takich fraz jak password dictionarykali linux wordlist lub passwords.txt.

-> Zadanie 2

Skrypt z poprzedniej lekcji został troszkę zmodyfikowany. Zapisz poniższy skrypt pod nazwą formularzLogowania2.php. Wytyczne zadania są następujące (rozwiązaniem jest jedno polecenie programu hydra):

  • Przeanalizuj poniższy skrypt i złam go Hydrą za pomocą prawdziwego brute-force (nie atak słownikowy).
  • Do łamania wykorzystaj same CYFRY a hasło ma być o potencjalnej długości od 3 do 4 znaków. Czyli po ludzku mówiąc Hydra powinna łamać formularz od wyrażenia 000 do 9999.
  • W poleceniu Hydry NIE MOŻE wystąpić ANI RAZU fraza 27062013 podpowiedź TUTAJ.
  • Wykorzystaj dodatkowo również parametr -F w celu przerwania łamania przy znalezieniu hasła.

Uwaga! Nie możesz modyfikować kodu PHP! :

<form action="formularzLogowania2.php" method="POST">
Podaj swoje login: <input type="text" name="nickname">
Podaj swoje haslo: <input type="text" name="passwd">
Podaj kod bezpieczeństwa: <input type="text" name="kod_bezpieczenstwa">
<input type="submit" value="Zaloguj">
</form>

<?php
$login = $_POST['nickname'];
$haslo = $_POST['passwd'];
$kod = $_POST['kod_bezpieczenstwa'];

if ($login=='admin' && $haslo=='1222' && $kod>27062013)
{
	echo('<b>Hey admin!</b>');
} else {
	echo('<b>Hey noob!</b>');
}
?>
Podpowiedź do zadania nr 2 - jeśli nie dajesz rady to spójrz!

  • polecenia man hydra w Kali Linux zawiera notkę o parametrze -x,
  • przy tym argumencie nie jest wymagany argument -P ze słownikiem,
  • nie może wystąpić w poleceniu hydry ani razu słowo 27062013? Przecież patrząc na kod i tak, akurat ten kod bezpieczeństwa by nie zadziałał…

Uwaga! Nie wiem czy problem występuje tylko na mojej wersji Windows 7 lub w tej wersji XAMPP. Czasami zdarza się, że w tym systemie XAMPP wywala błąd podczas tak szybkiego ataku (wyświetla informacje „Nie wysyłaj w Windowsie”). Kontroluj czy nadal strona działa a na pulpicie Microsoft Windows nie wyskoczył błąd. Problem nie zawsze występuje

Uwaga! Rozwiązanie 2. Nie psuj sobie zabawy!

hydra 192.168.0.14 -l admin -x 3:4:1 http-post-form "/formularzLogowania2.php:nickname=^USER^&passwd=^PASS^&kod_bezpieczenstwa=30000000:F=Hey noob!" -V -F

Krótkie objaśnienie:

  • parametr -x 3:4:1 oznacza, że łamiesz hasło metodą brutalnej siły. Hydra generuje potencjalne hasła o dugości od 3 do 4 znaków a ostatni jej parametr oznacza że wykorzystać chcesz tylko cyfry. W dokumentacji pojawia się przykład 1:2:a1%, który oznacza generowanie haseł o długości od 1 do 2 znaków i składających się z małych liter (a), cyfr (1) i znaków specjalnych (%). Powyżej autorzy dokumentacji stwierdzają, że istnieje jeszcze możliwość użycia A czyli dużych znaków,
  • jako że program hydra generuje hasła nie używasz w tym przypadku parametru definiującego słownik -L. W miejsce wyrażenia ^PASS^ wstawia hydra w standardowy sposób potencjalne hasło i tutaj nic nie wymaga zmiany,
  • Czemu użyłem tak dziwnego kodu bezpieczeństwa? Zwróć uwagę na kod źródłowy PHP i link  w poleceniu zadania. Występuje tam inny operator logiczny niż porównania ==. Chodzi o fragment $kod>27062013. Oznacza on, że przejdzie każdy kod bezpieczeństwa większy od liczby 27062013. Tutaj mogłeś wstawić również inną liczbę która spełnia ten warunek. Trochę podchwytliwe? 🙂

Podsumowanie o brute-force i phpMyAdmin

Jak widzisz ataki brutalne i słownikowe mogą być wykorzystywane przez hakera lub cyberprzestępce nie tylko do łamania haseł. Przydają się one również w sytuacji w której ręczne sprawdzanie dużego zakresu parametrów (np: adresów URL lub zmiennej przesłanej metodą GET) byłoby zbyt czasochłonne. Tego typu testy często noszą miano fuzzingu (fuzz testing).

W kolejnych lekcjach wykorzystamy również podobne aplikacje do automatyzacji szukania luk w skryptach webowych. W gruncie rzeczy był to praktycznie ostatni już temat o łamaniu w brutalny sposób haseł. Miej na uwodzę, że cyberprzestępca często wykonuje ataki brutalne na wiele usług naraz (protokołów), równolegle testując zabezpieczenia skryptów. Powodzenia w pracy domowej! 😉

13 thoughts to “WEP lekcja #4 – DirBuster, bruteforce i włamanie do MySQL”

  1. Na kali linuxie po uzyciu dirbustera lub przegladarki w access_log nie wyswietlaja mi sie informacje o uzywanej przegladarce, ani systemie. Wiesz co moge miec zle?

    1. Tutaj przykladowy wycinek access_log: 127.0.0.1 – – [07/Dec/2016:10:37:09 -0500] „GET /dirbuster/dirbuster/1.txt HTTP/1.1” 200 –
      127.0.0.1 – – [07/Dec/2016:10:37:10 -0500] „HEAD /dirbuster/dirbuster/5/ HTTP/1.1” 200 –

    2. Nie pamiętam całego kursu, ale w ustawieniach DirBuster da się zmienić user-agenta. Być może obecna konfiguracja obecnej wersji DirBustera pozostawia User-Agent (odcisk przeglądarki) jako pusty. Wydaje mi się, że w którymś filmie lub lekcji coś było o zmianie właśnie przeglądarki. W User-Agencie również zaszyta jest informacja o systemie i języku. Tak jak mówię, z tego co pamiętam to jest taka funkcja dostępna gdzieś w opcjach DirBustera.

  2. Robie wszystko jak w poradniku lecz wszystkie możliwości wyświetlają mi się na zielono nawet ta z prawdziwym loginem i hasłem. Parametry które wpisałem:
    hydra 192.168.0.12 -L loginy.txt -P slownik.txt http-post-form „/php/index.php:pma_username=^USER^&pma_password=^PASS^&server=1&target=index.php&token=04aeb2301c144c9ce8173af2dd1da6c1:F=Access denied” -V
    Jakiś może pomysły co jest nie tak ? Bo kurcze jeżeli tego nie ogarne nie mogę przejść dalej.
    Pozdrawiam

    1. Wpis i wideo ma ponad blog. Logiczne, że oprogramowanie się zmienia. Prawdopodobnie zły jest TOKEN lub warunek fałszu (F:= lub sukcesu S:=) do danej wersji MySQL (ma inne napisy). Jesteś pewny, że używasz tak jak było powiedziane w pierwszych lekcjach „XAMPP 5.6.14-3 [WAŻNA JEST WERSJA]”. Polecam również: https://www.youtube.com/watch?v=h-93Ybv3dow

  3. Rozwiązanie 2:
    jako że program hydra generuje hasła nie używasz w tym przypadku parametru definiującego słownik -L. W miejsce wyrażenia ^PASS^ wstawia hydra w standardowy sposób potencjalne hasło i tutaj nic nie wymaga zmiany,
    miałeś na myśli parametr -P?

  4. Hej! Mam problem podobny do @MROZIN –> Wszystkie polecenia, token etc wpisuję dobrze (do konsoli w hydrze, tak jak robisz to na swoim filmie). Zainstalowałem również XAMPP’a w wersji:5.6.14-3.
    Pomimo tych zabiegów nadal dostaję od hydry informacje o 96 prawidłowych hasłach (Które oczywiście nie są prawidłowe…);o. Próbowałem szukać rozwiązania na własną rękę, jak na razie bezskutecznie… Dlatego nasuwa mi się na język pytanie: W czym może leżeć problem? Było by mi niezmiernie miło za odpowiedź, bo chciałbym jak najszybciej przejść do zadania domowego, oraz dalszej nauki z kursu Haker.edu.pl 😉
    Pozdrawiam, Robciu

  5. Wiem, że temat jest stary, ale mam problem, ponieważ mi również wszystkie możliwości wyświetlają na zielono. Warunek prawdy czy fałszu zapisałem dobry, a token wydaje się być prawidłowy. Nie mam pojęcia co mógłbym zrobić.

  6. Miałem to samo ale sprawdziłem jak jest wysyłany form do phpMyAdmin i okazało się, że GET a nie post :). Zmieniłem '”hydra 192.168.0.x -l user.txt -P hasla.txt http-get-form "/php/index.php:set_session=3pur7m80ptm6k6m7l6mrd7pf6a&pma_username=^USER^&pma_password=^PASS^&server=1&route=/&token=5e65573d46695b6d4d26406f2d40746c:F=Nie udało się zalogować na serwer MySQL" -V -F"' i poszlo. Pozdrawiam

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *