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.
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:
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.
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ę.
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…
[caption id="" align="aligncenter" width="590"] Poprawne rozwiązanie – ustawienia programu DirBuster.[/caption]
[caption id="" align="aligncenter" width="550"] 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"] 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 dictionary, kali 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>'); } ?>
- 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
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! 😉
Co ile będą mniej więcej wychodzić nowe odcinki kursu ?
Odpowiedź jest w komentarzach na YT. Staramy się co 1-2 dni. 😀
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?
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 –
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.
dirbuster -> Options ->Advanced Options ->Http Options -> Http User-Agent
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
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
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?
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
Mam ten sam problem
Czy ktoś zna rozwiązanie?
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ć.
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