Samouczek SQL Injection: Naucz się na przykładzie

Spisie treści:

Anonim

Dane są jednym z najważniejszych elementów systemów informatycznych. Aplikacje internetowe oparte na bazach danych są używane przez organizację do pobierania danych od klientów. SQL to skrót od Structured Query Language. Służy do pobierania i manipulowania danymi w bazie danych.

Co to jest wstrzyknięcie SQL?

SQL Injection to atak, który zatruwa dynamiczne instrukcje SQL w celu skomentowania pewnych części instrukcji lub dołączenia warunku, który zawsze będzie prawdziwy. Wykorzystuje wady projektowe źle zaprojektowanych aplikacji internetowych do wykorzystywania instrukcji SQL do wykonywania złośliwego kodu SQL.

W tym samouczku nauczysz się technik SQL Injection oraz dowiesz się, jak chronić aplikacje internetowe przed takimi atakami.

  • Jak działa wstrzykiwanie SQL
  • Działania hakerskie: wstrzyknięcie SQL do aplikacji internetowej
  • Inne typy ataków typu SQL Injection
  • Narzędzia automatyzacji do iniekcji SQL
  • Jak zapobiegać atakom typu SQL Injection
  • Działania hakerskie: użyj Havji do iniekcji SQL

Jak działa wstrzykiwanie SQL

Typy ataków, które można przeprowadzić przy użyciu iniekcji SQL, różnią się w zależności od typu silnika bazy danych. Atak działa na dynamiczne instrukcje SQL . Instrukcja dynamiczna to instrukcja generowana w czasie wykonywania przy użyciu parametrów hasło z formularza internetowego lub ciągu zapytania URI.

Rozważmy prostą aplikację internetową z formularzem logowania. Kod formularza HTML jest pokazany poniżej.

TUTAJ,

  • Powyższy formularz akceptuje adres e-mail i hasło, a następnie przesyła je do pliku PHP o nazwie index.php.
  • Posiada możliwość zapamiętania sesji logowania w ciasteczku. Wydedukowaliśmy to z pola wyboru Remember_me. Wykorzystuje metodę post do przesyłania danych. Oznacza to, że wartości nie są wyświetlane w adresie URL.

Załóżmy, że instrukcja na zapleczu do sprawdzania identyfikatora użytkownika jest następująca

SELECT * FROM users WHERE email = $ _POST ['email'] AND password = md5 ($ _ POST ['password']);

TUTAJ,

  • Powyższa instrukcja używa wartości tablicy $ _POST [] bezpośrednio bez ich oczyszczania.
  • Hasło jest szyfrowane algorytmem MD5.

Zilustrujemy atak SQL injection za pomocą sqlfiddle. Otwórz adres URL http://sqlfiddle.com/ w przeglądarce internetowej. Pojawi się następujące okno.

Uwaga: będziesz musiał napisać instrukcje SQL

Krok 1) Wprowadź ten kod w lewym okienku

CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT,`email` VARCHAR(45) NULL,`password` VARCHAR(45) NULL,PRIMARY KEY (`id`));insert into users (email,password) values ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));

Krok 2) Kliknij opcję Buduj schemat

Krok 3) Wprowadź ten kod w prawym okienku

wybierz * spośród użytkowników;

Krok 4) Kliknij Uruchom SQL. Zobaczysz następujący wynik

Załóżmy, że materiały użytkownika Ten adres e-mail jest chroniony przed robotami spamującymi. Aby go zobaczyć, konieczne jest włączenie obsługi JavaScript. i 1234 jako hasło. Instrukcja, która ma zostać wykonana na bazie danych, to

SELECT * FROM users WHERE email = ' Ten adres e-mail jest chroniony przed robotami spamującymi. Aby go zobaczyć, konieczne jest włączenie obsługi JavaScript. ' AND hasło = md5 ('1234');

Powyższy kod można wykorzystać, wykomentowując część hasła i dołączając warunek, który zawsze będzie prawdziwy. Załóżmy, że osoba atakująca podaje następujące dane w polu adresu e-mail.

Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie obsługi JavaScript. ' LUB 1 = 1 LIMIT 1 - ']

xxx jako hasło.

Wygenerowana instrukcja dynamiczna będzie następująca.

SELECT * FROM users WHERE email = ' Ten adres e-mail jest chroniony przed robotami spamującymi. Aby go zobaczyć, konieczne jest włączenie obsługi JavaScript. ' LUB 1 = 1 LIMIT 1 - '] AND hasło = md5 (' 1234 ');

TUTAJ,

  • Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie obsługi JavaScript. kończy się pojedynczym cudzysłowem, który kończy cudzysłów
  • LUB 1 = 1 LIMIT 1 to warunek, który zawsze będzie spełniony i ogranicza zwracane wyniki tylko do jednego rekordu.
  • - „AND…” to komentarz SQL, który eliminuje część hasła.

Skopiuj powyższą instrukcję SQL i wklej ją w polu tekstowym SQL FiddleRun SQL, jak pokazano poniżej

Działania hakerskie: wstrzyknięcie SQL do aplikacji internetowej

Mamy prostą aplikację internetową pod adresem http://www.techpanda.org/, która jest podatna na ataki SQL Injection wyłącznie w celach demonstracyjnych. Powyższy kod formularza HTML pochodzi ze strony logowania. Aplikacja zapewnia podstawowe zabezpieczenia, takie jak czyszczenie pola wiadomości e-mail. Oznacza to, że powyższy kod nie może zostać użyty do ominięcia logowania.

Aby to obejść, możemy zamiast tego wykorzystać pole hasła. Poniższy diagram przedstawia kroki, które należy wykonać

Załóżmy, że atakujący dostarcza następujące dane wejściowe

  • Krok 1: Wpisz Ten adres e-mail jest chroniony przed robotami spamującymi. Aby go zobaczyć, konieczne jest włączenie obsługi JavaScript. jako adres e-mail
  • Krok 2: Wpisz xxx ') LUB 1 = 1 -]
  • Kliknij przycisk Prześlij
  • Zostaniesz przekierowany do pulpitu nawigacyjnego

Wygenerowana instrukcja SQL będzie następująca

SELECT * FROM users WHERE email = ' Ten adres e-mail jest chroniony przed robotami spamującymi. Aby go zobaczyć, konieczne jest włączenie obsługi JavaScript. ' AND hasło = md5 ('xxx') LUB 1 = 1 -] ');

Poniższy diagram ilustruje wygenerowanie wyciągu.

TUTAJ,

  • Instrukcja inteligentnie zakłada, że ​​używane jest szyfrowanie md5
  • Uzupełnia pojedynczy cudzysłów i nawias zamykający
  • Dołącza warunek do stwierdzenia, które zawsze będzie prawdziwe

Ogólnie rzecz biorąc, udany atak typu SQL Injection obejmuje szereg różnych technik, takich jak te przedstawione powyżej, w celu przeprowadzenia udanego ataku.

Inne typy ataków typu SQL Injection

SQL Injections może wyrządzić więcej szkody niż tylko przez przekazanie algorytmów logowania. Niektóre ataki obejmują

  • Usuwanie danych
  • Aktualizacja danych
  • Wstawianie danych
  • Wykonywanie poleceń na serwerze, które mogą pobierać i instalować złośliwe programy, takie jak trojany
  • Eksportowanie cennych danych, takich jak szczegóły kart kredytowych, wiadomości e-mail i hasła, na zdalny serwer osoby atakującej
  • Pobieranie danych logowania użytkownika itp

Powyższa lista nie jest wyczerpująca; to tylko daje wyobrażenie o tym, co SQL Injection

Narzędzia automatyzacji do iniekcji SQL

W powyższym przykładzie wykorzystaliśmy techniki ataku ręcznego oparte na naszej rozległej znajomości języka SQL. Istnieją zautomatyzowane narzędzia, które mogą pomóc w skuteczniejszym przeprowadzaniu ataków w jak najkrótszym czasie. Te narzędzia obejmują

  • SQLSmack - https://securiteam.com/tools/5GP081P75C
  • SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
  • SQLMap - http://sqlmap.org/

Jak zapobiegać atakom typu SQL Injection

Organizacja może przyjąć następujące zasady, aby chronić się przed atakami typu SQL Injection.

  • Nigdy nie należy ufać wprowadzaniu danych przez użytkownika - zawsze należy je oczyścić przed użyciem w dynamicznych instrukcjach SQL.
  • Procedury składowane - mogą hermetyzować instrukcje SQL i traktować wszystkie dane wejściowe jako parametry.
  • Przygotowane instrukcje - przygotowane instrukcje działają poprzez utworzenie najpierw instrukcji SQL, a następnie traktowanie wszystkich przesłanych danych użytkownika jako parametrów. Nie ma to wpływu na składnię instrukcji SQL.
  • Wyrażenia regularne - mogą służyć do wykrywania potencjalnie szkodliwego kodu i usuwania go przed wykonaniem instrukcji SQL.
  • Prawa dostępu użytkowników do bazy danych - tylko niezbędne uprawnienia należy nadawać kontom używanym do łączenia się z bazą danych. Może to pomóc w zmniejszeniu tego, co instrukcje SQL mogą wykonywać na serwerze.
  • Komunikaty o błędach - nie powinny one ujawniać poufnych informacji i dokładnie określić, gdzie wystąpił błąd. Proste niestandardowe komunikaty o błędach, takie jak „Przepraszamy, występują błędy techniczne. Skontaktowano się z zespołem technicznym. Spróbuj ponownie później ”zamiast wyświetlania instrukcji SQL, które spowodowały błąd.

Działania hakerskie: użyj narzędzia Havij do wstrzykiwania kodu SQL

W tym praktycznym scenariuszu zamierzamy użyć programu Havij Advanced SQL Injection do przeskanowania witryny internetowej pod kątem luk w zabezpieczeniach.

Uwaga: Twój program antywirusowy może go oznaczyć ze względu na swoją naturę. Powinieneś dodać go do listy wykluczeń lub wstrzymać oprogramowanie antywirusowe.

Poniższy obrazek przedstawia główne okno Havij

Powyższe narzędzie może służyć do oceny podatności witryny internetowej / aplikacji.

Podsumowanie

  • SQL Injection to typ ataku wykorzystujący błędne instrukcje SQL
  • Wstrzykiwanie SQL może służyć do omijania algorytmów logowania, pobierania, wstawiania oraz aktualizowania i usuwania danych.
  • Narzędzia do iniekcji SQL obejmują SQLMap, SQLPing i SQLSmack itp.
  • Dobra polityka bezpieczeństwa podczas pisania instrukcji SQL może pomóc w ograniczeniu ataków polegających na iniekcji SQL.