Jak włamać się na stronę internetową – atak SQL Injection.

Tym razem artykuł związany z bezpieczeństwem aplikacji internetowych, a dokładnie opis ataku SQL Injection, który wykorzystywany do dziś umożliwia przejęcie danych logowania na niezabezpieczonej stronie internetowej, lub wykonanie niemal dowolnej operacji na bazie danych. Dowiedz się w jaki sposób można dokonać ataku na stronę internetową i wydobyć informacje o loginach i hasłach użytkowników. Dowiedz się jak sprawdzić podatność strony internetowej na atak SQL Injection.

atak-na-strony-internetowe Jak włamać się na stronę internetową - atak SQL Injection.

Źródło: pixabay.com, geralt

Atak SQL Injection – metoda ataku na strony internetowe

Na wstępie chciałbym napisać, że artykuł ma służyć tylko i wyłącznie do celów edukacyjnych i zwiększenia waszej wiedzy o zagrożeniach związanych z atakami na strony i aplikacje internetowe.

SQL Injection to metoda ataku komputerowego polegająca na wykorzystaniu luki w zabezpieczeniach opierającej się na niedostatecznym filtrowaniu danych wprowadzanych przez użytkownika. Innymi słowy programista nie przewidział sytuacji, w której użytkownik będzie chciał wprowadzić wartość inną niż oczekiwaną.

Załóżmy, że mamy formularz do wypełniania, w którym proszą nas o podanie kwoty niezbędnej do zrealizowania przelewu (pole kwota). Większość użytkowników w polu kwota wprowadzi wartość liczbową, na przykład 1000, 1500, 200.50, itp., ale całkiem prawdopodobne, że wśród użytkowników znajdzie się taki, który postąpi inaczej i w tym polu wpisze dowolnie inny ciąg znaków, na przykład sto, dwieście, tysiąc pięćset. Bez odpowiedniego filtrowania skrypt będzie próbował przetworzyć wpisaną przez użytkownika wartość, co spowoduje nieoczekiwany rezultat – na przykład pojawienie się błędu (tzw. wyjątku).

Tego typu sytuacje są szczególnie niebezpieczne, ponieważ umożliwiają przejęcie kontroli nad aplikacją, w tym między innymi uzyskanie informacji, których nie powinniśmy poznać (loginy, hasła użytkowników).

Atak SQL Injection – logowanie na konto administratora

Spora liczba stron internetowych posiada formularz umożliwiający logowanie użytkowników. Po wprowadzeniu danych wysyłane jest zapytanie do bazy danych, które sprawdza, czy użytkownik o danym loginie i haśle istnieje.

Przykładowe zapytanie dla danych (login: Przemo, hasło: 12345) będzie miało postać:

SELECT * FROM users WHERE login = ‘Przemo’ AND pass = ‘12345’

Dane zostaną zwrócone, jeżeli rzeczywiście istnieje użytkownik Przemo, dla którego zostało zdefiniowane hasło 12345 – warunkuje to operator relacji AND.

Zobaczmy co się stanie, jeżeli spróbujemy zalogować się na konto administratora (zazwyczaj loginem jest Admin):

SELECT * FROM users WHERE login = ‘Admin’ AND pass = ‘12345’

Jeżeli znamy hasło na konto administratora, to zapytanie zwróci poprawne dane, ale zakładając, że nie znamy hasła pojawi się komunikat o wpisaniu błędnych danych logowania.

Zobaczmy co się stanie, jeżeli programista nie zadbał o odpowiednie filtrowanie wprowadzonych danych. W formularzu logowania spróbujemy wpisać login jak poprzednio (Admin), natomiast w miejscu hasła wstawimy fragment kodu: 12345’ OR ‘1’ = ‘1’

Całe zapytanie będzie miało postać:

SELECT * FROM users WHERE login = ‘Admin’ AND pass = ‘12345’ OR ‘1’ = ‘1’

Nieważne jakie hasło wpiszemy, to zostaniemy zalogowani na koncie Admin, ponieważ spełniony został drugi z warunków, gdzie 1 = 1.

Osoba, która odkryła tego typu lukę na stronie internetowej może zrobić niemal dowolną czynność po stronie bazy danych – zmienić treść artykułów, usunąć tabelę, dodać nowych użytkowników z uprawnieniami administratora itp.

Obrona przed SQL Injection

Wiem, że tego typu wpis może okazać się kontrowersyjny, dlatego nie będę pokazywał na realnym przykładzie jak działa tego rodzaju atak – w Internecie znajdziecie mnóstwo stron, służących do testowania (specjalnie przygotowanych do tego celu).

Poniżej omówię, w jaki sposób można się bronić przed tego rodzaju atakami. Podstawowa zasada – jeżeli korzystamy z gotowych rozwiązań i CMS’ów na przykład WordPress to pamiętajmy o aktualizacji zarówno silnika, oraz wszystkich wtyczek, z których korzystamy. Nie instalujmy również przestarzałych dodatków, a zwłaszcza takich, które pochodzą z niewiadomego źródła.

Atak SQL Injection opiera się głównie na braku odpowiedniego filtrowania danych wejściowych, dlatego powinniśmy skupić się na tym jaki zestaw znaków może wprowadzić użytkownik w różnego rodzaju formularzach udostępnianych na naszej stronie internetowej.

Jeżeli oczekujemy od użytkownika wartości numerycznych korzystajmy z funkcji: is_numeric()

Aby usunąć znaki specjalne wprowadzone przez użytkownika (‘, ” itp.) warto przepuścić je przez fukcję: addslashes()

Przeczytaj również

Nie zarobisz już na filmikach z gier w Youtube ! Z... System Content ID na Youtube - czym jest i co zmienia w sposobie zarabiania ? Ograniczenia Content ID na YT ! Jeżeli dotychczas zarabiałeś na reklama...
Jak obrócić tekst w Open Office? Obrót tekstu w po... Open Office to jedno z najpopularniejszych, darmowych narzędzi do edycji tekstu, o możliwościach komercyjnego produktu Microsoft Word. Chciałbyś wydru...
Jak zabezpieczyć WordPress przed hakerami? Blokada... Jeżeli twoja strona oparta na systemie CMS WordPress została zaatakowana przez hakerów, albo zauważyłeś wzmożone zużycie transferu, to warto przyjrzeć...
Tworzymy odizolowane środowisko do testowania prog... Jeżeli w swojej pracy macie do czynienia z wieloma programami komputerowymi, które zmieniacie dość regularnie, albo macie wątpliwości związane z ich b...

  1. Szkoda, że w XXI wieku nie wymyślono nic co by gwarantowało 100% pewność braku włamu. Jak się okazuje o to nietrudno, wielu robi to dla zabawy a nie dla zysku.

Dodaj komentarz

Twój adres email nie zostanie opublikowany.