W dzisiejszej lekcji powiemy sobie o mechanizmach przepisywania kodu z obrazka na stronach internetowych. Jest to tzn. captcha. Tego typy mechanizmy stosuje się w celu weryfikacji czy internauta jest rzeczywiście człowiekiem. Tego typu zabezpieczenie jest świetnym rozwiązaniem stosowanym w walce ze spamem, złośliwymi botami internetowymi, ochroną przed brute-force i innymi skryptami automatyzującymi ataki hakerskie.
Czy jednak zawsze mechanizm captcha jest bezpieczny? Sztampowe rozwiązania np: reCAPTCHA od Google na chwile obecną uważane są za bezpieczne. Co prawda w przeszłości istniały próby rozpoznawania kodu z obrazka za pomocą technik do rozpoznawania tekstu na zdjęciach typu OCR, nauczanie maszynowe, sieci neuronowe etc. Jednak dzisiaj tego typu badania na temat bezpieczeństwa są prowadzane jedynie w środowiskach akademickich.
W dzisiejszym wpisie chcielibyśmy zwrócić Twoją uwagę na błędy w implementacji pewnych mechanizmów na stronach internetowych. Pokażemy jak poprzez nieprzemyślany algorytm zaprojektowany przez programistę może dojść do nadużyć ze strony crackera…
Wideo szkoleniowe o captcha hackingu
Poniżej znajduje się 21 już film dotyczący błędnej implementacji mechanizmu reCAPTCHA w skrypcie szkoleniowym Damn Vulnerable Web Application.
Na podstronie skryptu DVWA o nazwie Insecure CAPTCHA istnieje możliwość wykonania ataku CSRF. Czy jednak captcha w tym przypadku jest dobrym zabezpieczeniem? Zapraszamy do filmu. 🙂
Konfiguracja reCAPTCHA w DVWA
W celu przystąpienia do samodzielnej próby złamania zabezpieczeń lekcji insecure captcha trzeba najpierw zarejestrować się na stronie Google reCAPTCHA.
Następnie uzyskasz tam specjalny specjalny klucz publiczny i klucz prywatny który należy wprowadzić do skryptu w którym chcesz używać zabezpieczenia captcha.
W naszym przypadku musisz edytować plik config.inc.php skryptu DVWA znajdujący się domyślnie (pakiet XAMPP) w lokalizacji C:\xampp\htdocs\config\config.inc.php.
Należy zmodyfikować linijkę w tym kodzie PHP ze zmiennymi tablicowymi następującą:
$_DVWA[ 'recaptcha_public_key' ] = ''; $_DVWA[ 'recaptcha_private_key' ] = '';
Po wprowadzeniu tych wartości i zapisaniu tego pliku php, moduł treningowy powinien już działać tak jak zostało to pokazane na poniższym obrazku.
Praca domowa
-> Zadanie 1
Za pomocą poznanych w poprzednich lekcjach narzędzi wykonaj automatyczny atak XSS wykorzystujący lukę CSRF w module Insecure CAPTCHA skryptu DVWA. Zmień w ten sposób hasło na programistamatol.
To zadanie jest formą utrwalenie poznanych już metod ataków i nie posiada zdefiniowanego przez nas rozwiązania.
-> Zadanie 2
Czasami się zdarza, że niekreatywny programista udostępnia internaucie kod captcha np: za pomocą pola formularza typu hidden.
Podsumowanie o złych praktykach programistów
Jak widzisz bezpieczeństwo pewnych mechanizmów takich jak przykładowa captcha na stronie internetowej często jest ściśle związane z wiedzą programistów HTML/PHP/JS i innych języków webowych. Bezpieczeństwo mechanizmu to jedno, a jego implementacji to już całkiem inna sprawa. Jak widzisz udało nam się dzisiaj obejść kod z obrazka bez wykorzystania zaawansowanych algorytmów sztucznej inteligencji i auto botów. Po prostu w naszym przypadku projektant przeoczył pewną sprawę w kodzie PHP.
Pamiętaj, że tego typu luki mogą dotyczyć wielu innych mechanizmów stron internetowych. Dlatego właśnie warto badać przekazywane parametry pochodzące od przeglądarki za pomocą np: lokalnego proxy typu Burp Suite lub Fiddler. Powodzenia w pracy domowej! 😉