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ż

Tworzymy skrót do zdalnego pulpitu, serwera, lub i... Jeżeli często wykorzystujesz zasoby sieciowe i chciałbyś mieć do nich ułatwiony dostęp, to warto utworzyć odpowiednie skróty na pulpicie komputera. Po...
Tworzymy profesjonalne intro na YouTube – kr... Jeżeli publikujesz, lub zamierzasz publikować wideo w serwisie YouTube, to z pewnością zainteresuje Cię możliwość stworzenia w prosty sposób profesjon...
Sterowanie telewizorem za pomocą smartfonu. Mi Pil... Chciałbym się z Wami podzielić ciekawą aplikacją na systemy Android, która umożliwia sterowanie urządzeniami RTV za pomocą telefonu. Jeżeli zepsuł Ci ...
Pies, który zrobił karierę na Instagramie! Niesamo... Był już pies, który jeździł koleją, ale nie było jeszcze psa, który stał się gwiazdą Instagramu! Rafael Mantesso wraz ze swoim pięcioletnim bullterier...

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

  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.