Zgadywanie hasła konta pocztowego (JavaScript+PHP)

Uwaga: przedstawiony tu program ma charakter edukacyjny i nie powinien być używany do łamania/zgadywania haseł pocztowych innych osób bez ich wiedzy i zgody!

Wprowadzenie
Bardzo dużo osób szuka w internecie (czasami bezskutecznie) programu do łamania/zgadywania hasła do konta pocztowego, serwisu społecznościowego lub komunikatora internetowego (GG czy Tlenu). Często ściągają jakiś zawirusowany program, który prawdopodobnie i tak nie złamie szukanego hasła, a użytkownik będzie miał na swoim komputerze jakiegoś złośliwego robaka, o którego istnieniu może nawet nie wiedzieć. Oczywiście zdarzają się też bezpieczne programy, ale nie zawsze są skuteczne.

Większość programów do łamania haseł działa metodą brute-force, to znaczy mozolnego sprawdzania wszystkich możliwych kombinacji hasła, co oczywiście zajmuje bardzo dużo czasu, a przy hasłach dłuższych niż 6 znaków jest po prostu czasowo nieopłacalne. Przykładowo, hasło 6-znakowe, zawierające same małe litery oraz cyfry (łącznie 36 możliwych znaków) daje 36^6 możliwych kombinacji, czyli ponad 2 miliardy haseł do sprawdzenia. Taka metoda jest dobra, jak trzeba złamać zaszyfrowane (jakąś znaną metodą) hasło lokalnie na komputerze, a nie w internecie poprzez kolejne próby logowania do serwisu pocztowego.

Jest też jeszcze inna możliwość znajdowania hasła - metodą słownikową. Polega ona na tym, że przygotowujemy listę wszystkich możliwych do użycia haseł i kolejno je sprawdzamy. W internecie można znaleźć różne wersje słowników, ale często właściwe hasło i tak nie występuje w takim (nawet największym) słowniku, bo zawiera dodatkowe symbole modyfikujące (cyfry i znaki specjalne), czasami hasło składa się z kilku wyrazów połączonych ze sobą. Wprawdzie metoda słownikowa jest szybsza (sprawdzanych jest dużo mniej haseł), ale i tak nie gwarantuje znalezienia właściwego.

Często zdarza się tak, że przy tworzeniu hasła używa się jakiegoś słowa kluczowego, do którego dokleja się dodatkowe znaki specjalne (najczęściej cyfry). Wystarczy spojrzeć na jakąś listę z najpopularniejszymi hasłami, które wyciekły z jakiegoś serwisu, by zauważyć, że hasła składają się najczęściej z samych słów, liczb lub ich kombinacji. Często jest tak, że znamy rdzeń hasła (wyraz kluczowy hasła), a musimy zgadnąć tylko końcówkę (najczęściej liczbową) - wtedy moje rozwiązanie jest bardzo pomocne.

Opis prezentowanego rozwiązania
Aplikacja została przygotowana w HTML, który korzysta z JavaScriptu oraz krótkiego skryptu PHP na serwerze. To ostatnie powoduje, że potrzebujemy mieć jakieś serwer stron www z działającym interpreterem PHP. Można do tego wykorzystać jakiś darmowy serwis hostingowy albo postawić go samemu na lokalnym komputerze, np. przy pomocy programu XAMPP lub KRASNAL Serv. XAMPP jest dostępny na różne platformy (Windows, Linux, Mac OS X), wersja dla Windows posiada program instalacyjny a także kompletne archiwum gotowe do pracy po wypakowaniu.
Skrypt w PHP (check.php) jest potrzebny do sprawdzania poprawności podanych danych do konta pocztowego i jest wywoływany dla każdego kolejnego hasła jako żądanie XMLHttpRequest (AJAX) programu głównego, który korzysta z napisanej przeze mnie biblioteki WebAPI.

Możesz pobrać spakowane archiwum zawierające wszystkie niezbędne pliki do wykorzystania na swoim serwerze www (patrz też akapit "Instrukcja dla laików"), możesz też zobaczyć w działaniu demo tego programu. Powinno ono rozjaśnić ewentualne wątpliwości co do sposobu korzystania z niego. Demo z tej strony tylko symuluje sprawdzanie poprawności hasła (nie łączy się z żadnym serwerem pocztowym) - w sposób losowy (z prawdopodobieństwem 1/100) decyduje, czy dane hasło będzie poprawne, czy też nie. Dzięki temu nikt nie będzie mógł wykorzystywać tego programu w moim serwisie, ale będzie miał za to możliwość zobaczenia, jak ten program działa w praktyce.

Do szukania hasła danego konta pocztowego musimy znać przede wszystkim adres e-mail, z którego uzyskamy nazwę użytkownika serwisu pocztowego. Zazwyczaj tą nazwą (loginem) jest wszystko do znaku "@" (małpki), choć w tych serwisach, w których możemy wybrać sobie domenę dla konta pocztowego z kilku dostępnych (np. w Onet), trzeba w nazwie użytkownika podawać wtedy pełny adres e-mail - tak jak to trzeba robić przy logowaniu się do poczty poprzez stronę internetową. Kolejną rzeczą, którą trzeba znać, to adres serwera pocztowego (tu mamy do wyboru POP3 a czasami także IMAP). Dane te są dostępne na stronach internetowych danego serwisu, tu podam je tylko dla kilku najpopularniejszych serwisów:
  - poczta WP: pop3.wp.pl (POP3) oraz imap.wp.pl (IMAP);
  - poczta Onet: pop3.poczta.onet.pl (POP3) oraz imap.poczta.onet.pl (IMAP);
  - poczta Tlen (O2.pl): poczta.o2.pl (POP3 oraz IMAP);
  - poczta Interia: poczta.interia.pl (POP3);
  - poczta Interia: poczta.interia.pl (POP3);
  - poczta outlook.com / live.com: pop3.live.com (POP3) oraz imap-mail.outlook.com (IMAP);
  - poczta Office 365 / MS Exchange: outlook.office365.com (POP3 oraz IMAP);
Dodatkowo trzeba wiedzieć, że usługa POP3 działa na porcie 110 a IMAP na 143, zaś w przypadku używania bezpiecznego połączenia SSL odpowiednia na porcie 995 (POP3) lub 993 (IMAP). Połączenie szyfrowane jest trochę wolniejsze, ale za to nikt postronny nie zobaczy naszego hasła podczas logowania się - co akurat w przypadku szukania tego hasła nie ma dużego znaczenia. Co ciekawsze, poczta Microsoftu (dwie ostatnie pozycje na powyższej liście) koniecznie wymagają szyfrowanego połączenia SSL.
Warto też wiedzieć, że nie wszystkie serwisy oferują usługę IMAP, dlatego pewniej będzie skorzystać z POP3.

Opis korzystania z aplikacji
Poniżej prezentuję wygląd aplikacji do zgadywania hasła konta pocztowego:
Aplikacja do zgadywania hasła konta pocztowego
W polu Mail login wpisujemy nazwę użytkownika (login) konta pocztowego, następnie w polu Server address podajemy właściwy adres serwera pocztowego (uwzględniając resztę podawanych danych), poniżej w polu Server type z listy rozwijanej wybieramy typ używanej usługi (pop3 lub imap), w polu Server security wskazujemy, czy korzystamy z szyfrowania połączenia SSL (domyślnie nie), a w polu Server port wpisujemy adres tej usługi (domyślnie 110 dla pop3 bez SSL).
Pole Delay jest przydatne wtedy, gdy przy zbyt szybkim sprawdzaniu haseł serwer pocztowy będzie odmawiał usługi i zgłaszał jakiś nietypowy błąd (patrz okienko Check status zawierające odpowiedzi serwera pocztowego) - wtedy warto zwolnić tempo odpytywania takiego serwera i ustawić stosowną wartość takiej przerwy.
Pole Generate the first capital letter (domyślnie zaznaczone) służy to utworzenia i sprawdzenia dodatkowego hasła, w którym pierwsza występująca litera zostanie zamieniona na dużą - np. dla hasła "pass123" utworzy hasło "Pass123" (a dla hasła "123abc" - hasło "123Abc").
Istnieją dwie listy, gdzie można wpisywać hasła do sprawdzenia: Passwords list oraz Suffix list. Jedna z list może być pusta, w przypadku gdy są podane obie, to program sprawdza wszystkie kombinacje łączenia haseł z obu list. Przydaje się to wtedy, gdy znamy rdzeń hasła (albo mamy ich kilka/kilkanaście do wytypowania) i wiemy, że po nim następuje jakiś inny ciąg znaków (często cyfry albo jakaś data). Hasła na obu listach można dowolnie rozdzielać znakami nowej linii (Enterami) w celu poprawy czytelności - puste linie są przez program ignorowane. Program nie bierze pod uwagę zmiany ich zawartości w trakcie swojej pracy (sprawdzania kolejnych haseł), sprawdza za to każdorazowo wartość pól Delay oraz Generate the first capital letter.
Uruchomienie sprawdzania haseł następuje po kliknięciu na przycisk Search password. Śledzenie stanu sprawdzanych haseł jest możliwe dzięki stosownym komunikatom w polu tekstowym pod przyciskami oraz w okienku Check status. Działanie programu można przerwać przyciskiem Stop search a potem wznowić przyciskiem Continue search.
Jeśli program znajdzie właściwe hasło to wyświetli stosowną informację i przerwie swoje działanie. Analogiczny komunikat pojawi się po nie znalezieniu hasła w wyniku sprawdzenia wszystkich przewidzianych do tego haseł.

Program jest krótki, prosty i dość czytelny (nie zawiera podejrzanych działań), można go we własnym zakresie przerobić i wykorzystywać do innych działań o podobnym charakterze. Program jest rozdzielony na część HTML (wraz z kodem JavaScript) oraz skrypt w PHP po to, by była wygodna kontrola i podgląd wykonywanych czynności - to samo zadanie dałoby się zrealizować w całości przez skrypt PHP, ale problemem byłoby prezentowanie na bieżąco wyników sprawdzania haseł oraz dość długi czas działania takiego skryptu i wynikająca z tego konieczność użycia funkcji set_time_limit (co nie jest możliwe w trybie safe mode - tzw. trybie bezpiecznym).

Instrukcja dla kompletnych laików
Ponieważ zauważyłem duże zainteresowanie moją aplikacją, a jak się okazało głównym problemem jest posiadanie na swoim komputerze własnego serwera www (Apache) i PHP, postanowiłem przygotować poniższą instrukcję (dwie wersje postępowania).
Aby jak najbardziej ułatwić i uprościć przygotowanie środowiska XAMPP z moją aplikacją na swoim komputerze, przygotowałem gotową "paczkę", zawierającą wszystkie potrzebne elementy (m.in. Apache 2.4.10, PHP 5.4.32, MySQL 5.5.39 i OpenSSL 1.0.1i). Plik o nazwie xampp-1.8.2-7-win32.zip (247 MB) znajduje się (tymczasowo) na moim serwisie i można go sobie bezpośrednio pobrać i zapisać na swoim komputerze.

Poniżej przedstawiam instrukcję postępowania dla bardziej ambitnych osób, które chcą własnoręcznie przygotować sobie środowisko XAMPP korzystając z oficjalnej strony tego projektu:
Krok 1. Ze strony XAMPP wybieramy pozycję PHP 5.4 (XAMPP for Windows) i pobieramy jego spakowaną wersję ZIP lub 7zip w zależności jaki program pakujący posiadamy (jak ktoś się nie orientuje, niech pobierze wersję ZIP). Jest to wersja XAMPP 1.8.2 (zawierająca PHP 5.4), która bezproblemowo działa w systemach Windows XP i nowszych.
Krok 2. Wypakowujemy pobrany plik na dysk C: do głównego folderu (C:\) tak, by w efekcie uzyskać folder C:\xampp, a w nim zawartość serwera (mając program 7-Zip klikamy prawym klawiszem myszki na pobranym na dysk pliku i z menu wybieramy "Wypakuj pliki", a potem w polu "Wypakuj do:" wpisujemy C:\ i dajemy OK). W innym programie do wypakowywania należy postępować analogicznie. Jak ktoś nie ma żadnego programu do rozpakowywania, może pobrać i zainstalować sobie darmowy 7-Zip (ważny jest wybór wersji programu w zależności od posiadanej wersji systemu operacyjnego).
Po wypakowaniu mamy folder C:\xampp, w którym są 24 podfoldery oraz 22 pliki. Jeśli komuś wyszło inaczej (np. ma dodatkowy podfolder xampp w folderze C:\xampp) niech przeniesie pliki we właściwe miejsce.
Krok 3. Teraz pobieramy spakowane archiwum z moją aplikacją do zgadywania haseł pocztowych i wypakowujemy z niego 3 pliki do folderu C:\xampp\htdocs. Przy wypakowywaniu należy się zgodzić na nadpisanie pliku index.html
Krok 4. Otwieramy folder C:\xampp, w nim kolejny php i znajdujemy plik php.ini (ma on ok. 77 KB). Otwieramy go w notatniku i szukamy linii zawierającej ciąg "php_imap". Wiersz, w którym się ten ciąg znajduje, wygląda tak: ";extension=php_imap.dll" - usuwamy z jego początku znak ";" (średnik) i zapisujemy plik. Przygotowałem taki poprawiony plik php.ini bezpośrednio do pobrania i jego zastąpienia tutaj (wybierz "Zapisz jako").
Krok 5. Teraz otwieramy folder C:\xampp, w nim znajdujemy i uruchamiamy program xampp-control.exe. Przy pierwszym uruchomieniu program zapyta się o język (angielski lub niemiecki) i jeśli klikniemy na przycisk Save, to później już się o to nie będzie pytał. Potem otworzy się główny Panel sterowania XAMPP.
Krok 6. W Panelu sterowania trzeba teraz uruchomić serwer Apache poprzez kliknięcie na pierwszy przycisk Start. Po poprawnym uruchomieniu serwera Apache jego nazwa zostanie podświetlona oraz pojawią się dwie liczby w kolumnach PID(s) oraz Port(s). Teraz można już zamknąć Panel sterownia przyciskiem Quit.
Krok 7. Teraz trzeba uruchomić dowolną przeglądarkę internetową i wpisać w polu URL adres localhost/index.html (lub kliknąć na tym linku), co spowoduje otwarcie strony z moją aplikacją do zgadywania haseł poczty.
Krok 8. Teraz trzeba podać login do konta pocztowego oraz pozostałe dane dotyczące serwera pocztowego. Można skorzystać z szybkiej konfiguracji (Quick configuration) i wybrać jedną z predefiniowanych przeze mnie konfiguracji (zazwyczaj sekcja Serwery POP3 będzie właściwym wyborem). Pozostaje też wpisać możliwe hasła i uruchomić wyszukiwanie haseł przyciskiem Search password.
Życzę powodzenia!

Powrót do strony z wykazem projektów

Valid HTML 4.01 TransitionalValid CSS