biedronka.pl - behind the scenes
Na mojego bloga coraz więcej osób trafia z Google z hasła „bezpieczeństwo stron www” oraz różnych zbliżonych fraz. To dobrze. Oto przecież chodzi. Co jakiś czas dostaję maila z pytaniami jak się włamać na stronę WWW. To już nie jest dobre. W tym dziale dawno nie było niczego nowego... do teraz.
Nie tak dawno w sieci pojawił sie link do strony sieci sklepów Biedronki – biedronka.pl. W tym adresie nie byłoby nic dziwnego gdyby nie komentarz do niego.
Na stronie sieci Biedronka nie ma możliwości sprawdzenia listy sklepów. Po wpisaniu nazwy miejscowości pojawia się... Sami sprawdźcie.
Po wpisaniu nazwy miejscowości w której chcieliśmy znaleźć punkty w tabeli z wynikami, zamiast adresów pojawiał się napis "hacked" ;).
Przeprowadzenie ataku (krok po kroku)
Od tego momentu na stronie biedronki można było znaleźć ciekawe informacje.
Ale od początku. Skoro komuś się udało podmienić zawartość danych, to dlaczego ja mam być gorszy? Na pierwszy ogień poszedł formularz do wyszukiwania miejscowości. Bingo. Wprowadzenie do niego apostrofu wyrzuciło ładny komunikat z błędem SQL, nazwą pliku oraz numerem linii gdzie jest błąd (książkowy przykład sql injection). Tym feralnym plikiem okazał się plik /inc/szukaj_biedronki.h. Teraz po wpisaniu do paska adresu http://biedronka.pl/ inc/szukaj_biedronki.h pojawiło się całe źródło pliku.
Linijka kodu odpowiedzialna za to:
$sql = "SELECT * FROM biedronka_lokalizacje WHERE bl_miasto = '$miasto1' OR bl_miasto_unpolish='$miasto_unpolished' ORDER BY bl_miasto, bl_kod";
Widać wyraźnie, że dane przesyłane z formularza nie są w żaden sposób sprawdzane.
Kolejna ciekawa informacja to początek tego pliku.
include ("$INCLUDE_PATH/db.h");
include_once("$INCLUDE_PATH/winiso.h");
//...
Dla osób mało obeznanych w tworzeniu aplikacji www zmienna $INCLUDE_PATH może stanowić problem nie do przejścia w dalszej części ataku. W tym konkretnym przypadku wartością tej zmiennej jest katalog /inc.
Teraz dobieramy się do pliku inc/db.h (jest on podejrzany informacje na temat bazy danych). Tak jak poprzednio można zobaczyć jego źródło.
$CONST_DB_CONNECT="host=sql4.gammanet.pl port=5744 user=biedronk password=ala19 dbname=biedronkadb";
W tym momencie mamy podane wszystko jak na tacy: login, hasło, nazwę bazy danych oraz serwer. Mając te dane możemy zdalnie łączyć się z bazą danych biedronki i modyfikować dane odpowiednimi zapytaniami SQL.
Teraz już wiadomo w jaki sposób dane o sklepach zamieniły się w napis "hacked".
Dlaczego doszło do ataku?
- Dane pobierane z formularza w żaden sposób nie były sprawdzane,
- dość nieszablonowe rozszerzenie plików - *.h; w ogóle nie rozumiem dlaczego twórca tej aplikacji umieścił kod w plikach z rozszerzeniem dla plików C/C++,
- brak odpowiednich uprawnień dostępu (CHMOD) do istotnych plików,
- jawne komunikaty o błędach,
- można się jeszcze przyczepić hasła ala19, jest to książkowy błąd, prawdopodobnie są to dane osobowe obiektu westchnień programisty lub dane programistki ;).
Można było uniknąć tej wpadki, gdyby programista/-tka miał/-a większą wiedzę na temat bezpieczeństwa aplikacji internetowych.
Do danych przesyłanych przez formularz wystarczyłoby dodać znak ucieczki (za pomocą funkcji addslashes();), ponadto ustawić odpowiednie prawa dostępu do katalogu /inc i plików znajdujących się w środku. Ponadto można ukrywać informacje o błędach używając odpowiednich dyrektyw, a same błędy zapisywać w odpowiednich plikach.
Komentarze 9
No tak... jaki wniosek sie nasuwa? Ktos, kto bardzo lekko liznal C/C++ (pliki z rozszerzeniem *.h) zaczal sie bawic PHP, co mu kompletnie, jak widac, nie wychodzi. A przeciez samo zabezpieczenie tego, to nie jest tak okropnie duzo roboty. No ale coz... trzeba jeszcze o tym miec jakies pojecie.
Iscie groteskowa byla riposta tej calej(-ego?) ala19 na wykopie i na stronie biedronki.
A najlepsze ze to sa podstawy bezpieczenstwa, podstawowe rzeczy o ktore trzeba zawsze dbac :/
Dobre :)
Ciekawe. Dziwne, że serwer obsługiwał połączenia zdalne do bazy, w moim hostingu jest to niemożliwe akurat ( i bardzo dobrze ).
Pozdrawiam.
PS. error_repoting(0) chyba by załatwiło sprawę, w tym konkretnym wypadku :) Nie mniej jednak, ciekawy wpis.
shpyo napisz coś nowego
O kurde. W sumie nie wiele z tego rozumiem, ale pewnie na większość stron można się włamać. Czy ważne jest rzeczywiście, żeby było inne hasło do ftp i bazy? Bo w sumie zawsze utrudnia to trochę funkcjonowanie, a nie wiem czy dla hakera to wielki problem?
Dzięki temu, że hakerzy robią takie dowcipy przynajmniej Biedronka się "obudzi" i zacznie traktować poważnie bezpieczeństwo swojej strony. Mój znajomy chcąc ściągnąć plik PDF ze stron jednego z banków jakimś sposobem natrafił na listę klientów banku z nazwiskami i numerami kont, adresami! Jak powiedział o tym bankowi to go chcieli oskarżyć o włamanie! Gdzie zwyczajnie tak jak biedronka nie zrobili nic żeby się chronić.
Dzięki temu, że hakerzy robią takie dowcipy przynajmniej Biedronka się "obudzi" i zacznie traktować poważnie bezpieczeństwo swojej strony. Mój znajomy chcąc ściągnąć plik PDF ze stron jednego z banków jakimś sposobem natrafił na listę klientów banku z nazwiskami i numerami kont, adresami! Jak powiedział o tym bankowi to go chcieli oskarżyć o włamanie! Gdzie zwyczajnie tak jak biedronka nie zrobili nic żeby się chronić.
jak widać biedronka tnie koszty nie tylko na pensja dla pracowników wykładających towar, ale również oszczędza na programistach:P