Nasza-klasa owned!
Włamałem się do systemu NK? Nie. Ale ofiara pewnego triku, na który wpadłem przyglądając się fanatykom fotkowania na naszej-klasie może tak pomyśleć.
Ile to osób może zacząć gotować się ze złości, gdy pilnie potrzebuje jakiejś WARTOŚCIOWEJ informacji z Sieci, a nie może, gdyż osobnik(i) o zazwyczaj ilorazie inteligencji zmierzającym ku zeru okupuje kompa, trwoniąc czas na oglądanie „komci i foci” na lepszym klonie fotka.pl? Najczęściej takiego osobnika nie da się łatwym sposobem wykurzyć sprzed komputera, więc czemu by nie sprawić, aby taka osoba wykipiała ze złości zwalniając komputer?
Można by było po prostu wyciąć cały ruch na photos.nasza-klasa.pl. Ale po co? Prawdziwy BOFH nigdy nie przegapi okazji, aby się trochę zabawić.
Inspiracją był dla mnie tekst napisany przez pewnego BOFH-a, któremu wbijano się do sieci bezprzewodowej. Mógłby zaszyfrować cały ruch, ale czemu by się nie zabawić? Postanowił on przepuszczać wszystkie obrazki osób spoza sieci przez diabelski skrypt, który czynił z nimi różne psikusy. Można je np. obrócić je o 180°… Oczywiście, można puścić wodze fantazji i np. przekierowywać na zdjęcia śmiesznych fotek.
studium przypadku – czysty PC
Stoi komp z Windows na pokładzie. Nie ma na nim zainstalowanego żadnego serwera www, ogólnie czysty system przygotowany do serfowania po Sieci.
Aby trik się udał, potrzebujemy zainstalować i uruchomić serwer WWW, który będzie obsługiwał żądania wysyłane przez przeglądarkę do photos.nasza-klasa.pl. Pewnie niektórzy się domyślą, o co może chodzić, ale zapraszam do dalszej lektury.
Nie ma sensu katować systemu Apachem, wystarczy nam dowolny serwer obsługujący PHP i przepisywanie adresów (rewrite). Po krótkich poszukiwaniach znalazłem Abyss Web Server. Nie robiłem testów przeciążeniowych, ale jest to bardzo lekki serwer oferujący całkiem przyzwoitą funkcjonalność, w dodatku umożliwia w standardzie komunikację z PHP przez interfejs FastCGI oraz – z czym się spotkałem tylko w przypadku MS SQL Servera – „nazwanych rurek” (named pipes). Bardzo miła niespodzianka. O nim napiszę innym razem.
Instalacja do szczególnie skomplikowanych nie należy, jedynie przy ostatnim kroku ukazuje się okienko, które pyta, w jakim trybie startować serwer. Jeśli ma startować przy każdym uruchomieniu systemu, to polecam odpalanie w trybie usługi.
Po instalacji zgadzamy się na wystartowanie serwera i odpalenie konsoli. Otworzy się przeglądarka z panelem służącym zarządzaniem serwerem. Wybieramy język, podajemy nazwę użyszko… administratora serwera i hasło. Po zatwierdzeniu zmian, logujemy się z wykorzystaniem ustalonych danych.
Teraz ukaże się lista z jednym dostępnym serwerem. Jeśli w kolumnie port widnieje inna liczba niż 80, to znaczy, że należy się upewnić, czy jakaś inna usługa nie pełni roli serwera. Może to być również Skype, który w opcjach ma włączoną opcję Użyj portów 80 i 443 jako alternatywnych dla połączeń przychodzących (zaawansowane/połączenie).
Jeśli port nie był ustawiony na 80 i uporaliśmy się z aplikacją zajmującą port, to klikamy na General i zmieniamy opcję HTTP Port na Default HTTP Port (80) i zatwierdzamy zmiany przyciskiem OK.
Teraz przyszła pora na instalację PHP. Ściągamy paczkę dla Windows i rozpakowujemy w jakimś katalogu (może być nawet w katalogu serwera; najważniejsze, aby wiedzieć, gdzie ;)). Zmieniamy nazwę pliku php.ini-recommended na php.ini i otwieramy w notatniku. Upewnij się, że odpowiednie opcje są ustawione:
- extension_dir = „./ext”
- allow_url_fopen = On
- ;extension=php_gd2.dll – usuwamy średnik z początku linii
Pozostaje tylko zapisać plik i wracamy do konfiguracji w panelu.
Klik na Scripting Parameters i w grupie Interpreters klikamy Add. W Interface zmieniamy wartość na FastCGI (Local Pipes). Następnie, wskazujemy lokalizację do pliku php-cgi.exe. Można wpisać ręcznie, można „wyklikać” (przycisk browse). Teraz zmień Type na PHP Style. W grupie Associated Extensions kliknij Add i wpisz php. Zatwierdź wszystkie zmiany powracając do indeksu konsoli zarządzania serwerem.
I przyszła kolej na ostatni etap konfiguracji serwera, czyli przepisywanie adresów. URL Rewriting, Add. W polu Virtual Path Regular Expression wpisujemy .*, Redirect to – /index.php.
Zatwierdzamy wszystkie zmiany, po czym klikamy na Restart. Koniec konfiguracji serwera.
Aby sprawdzić, czy wszystko działa prawidłowo, wpisz 127.0.0.1 w pasku adresu przeglądarki. Jeśli wyświetla się strona testowa serwera, to znaczy, że działa OK. Jeśli nie, przeanalizuj konfigurację jeszcze raz; sprawdź, czy nic nie blokuje portu serwera, itp.
developer z Apache
Pewnie masz zainstalowany Apache, więc problem z serwerem masz z głowy. Jeśli jednak go masz – zapraszam do lektury.
Jedyne, co jest dodatkowo wymagane w przypadku Mohikanina, to zdefiniowanie wirtualnego serwera:
NameVirtualHost *:80
DocumentRoot "D:/tmp/nk"
ServerName photos.nasza-klasa.pl
No i oczywiście, .htaccess w katalogu docelowym:
RewriteEngine On
RewriteRule .* index.php
Magia
Zasada działania skryptu jest bardzo prosta. Ze względu na to, iż w ostatnim kroku posłużymy się pewnym oszustwem w stosunku do systemu operacyjnego, żądanie musimy wysłać bezpośrednio wg adresu IP. Pobrany obrazek obrabiamy przy użyciu funkcji biblioteki GD, a te stwarzają dość duże pole do manewru, ja użyłem prostego do góry „nogami”. Nic nie stoi na przeszkodzie, aby zaadaptować skrypt do współpracy z ImageMagick.
Pobieramy skrypt i zapisujemy go jako index.php w katalogu htdocs serwera. Można skasować wszystkie pozostałe pliki, nie przydadzą się.
Mała uwaga: w przypadku Apache, trzeba zamienić $_SERVER[’URL’] na $_SERVER[’REQUEST_URI’]. To wszystko.
…i małe oszustwo
Teraz trzeba wmówić systemowi, że wszystkie żądania wysyłane do photos.nasza-klasa.pl mają być wysyłane do siebie. W tym celu, otwieramy w notatniku plik \Windows\System32\Drivers\etc\hosts i dopisujemy na końcu linijkę:
127.0.0.1 photos.nasza-klasa.pl
i zapisujemy zmiany. Na wszelki wypadek, przyda się wykonanie komendy ipconfig /flushdns.
działa?
Jeśli zmiany nie będą wprowadzone od razu, to wystarczy zrestartować system. A efekt zmian? Hmm, wystarczy popatrzeć.
Oczywiście, nic nie stoi na przeszkodzie, aby z tego tricku skorzystać pod Linuskiem („cha-cha”). Wystarczy zastosować inny demon serwera.
PS. Aby wrócić do poprzedniego stanu, wystarczy wykasować dodaną linijkę z pliku hosts i ew. zrestartować system.
Hmm. Bardzo Ciekawy wpis, sprobuje takie cos uzyskac u siebie na localhoscie.