WEP lekcja #21 – Błędy w implementacji kodu captcha w PHP

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ą:

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.

Moduł PHP w Damn Vulnerable Web Application, umożliwiający atak CSRF mimo implementacji mechanizmu reCAPTCHA (kod z obrazka).
Mechanizm Google reCAPTCHA w skrypcie treningowym dla hakerów DVWA.

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.

Podpowiedź do zadania nr 1 - jeśli nie dajesz rady to spójrz!

Możesz również wykorzystać aplikacje xss-beef do ataków cross-site scripting i jej moduł Rider->Forge Request.

[collapse]

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. Poczytaj o innych podatnościach związanych z nieprawidłową implementacją przez programistów kodu captcha:

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! ;-)




Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *