9 Bezpieczeństwo stron WWW 6 minut czytania

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?

  1. Dane pobierane z formularza w żaden sposób nie były sprawdzane,
  2. 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++,
  3. brak odpowiednich uprawnień dostępu (CHMOD) do istotnych plików,
  4. jawne komunikaty o błędach,
  5. 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.




Akceptuję politykę prywatności

Raz w miesiącu e-mail z najlepszymi artykułami

Zdjęcie autora wpisu - Piotr Cichosz

Piotr Cichosz — autor wpisu

Frontend developer. Tworzę zaawansowane systemy webowe w JS. Swoją wiedzę nt. SEO wykorzystuję do rozwijania własnych projektów (z lepszym lub gorszym efektem). Dużo eksperymentuję i staram się określić jak bardzo można nagiąć cierpliwość algorytmów Google (:. Prowadzę teraz bloga technologicznego oraz bloga o Apple

Komentarze 9

author walker www 18.06.2007 14:28:54

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.

author dr_bonzo www 21.06.2007 12:50:11

A najlepsze ze to sa podstawy bezpieczenstwa, podstawowe rzeczy o ktore trzeba zawsze dbac :/

author Gucio www 27.06.2007 10:52:25

Dobre :)

author strife www 01.07.2007 03:41:31

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.

author Stwor www 04.07.2007 18:30:19

shpyo napisz coś nowego

author Kolon www 19.11.2007 19:12:02

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?

author Hosting Boy www 07.10.2010 23:00:14

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ć.

author Hosting Boy www 07.10.2010 23:00:14

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ć.

author Marian 26.07.2011 21:00:31

jak widać biedronka tnie koszty nie tylko na pensja dla pracowników wykładających towar, ale również oszczędza na programistach:P

Dodaj komentarz