Co to jest Injection SQL?

Liczba witryn i stron w sieci stale rośnie. Do rozwoju wchodzą wszyscy, którzy mogą tylko. A początkujący twórcy stron internetowych często używają niebezpiecznego i starego kodu. A to stwarza wiele luk prawnych dla intruzów i hakerów. Czego używają. Jedną z najbardziej klasycznych luk to iniekcja SQL.

Trochę teorii

Wiele osób wie, że większość witryn i usług w sieci używa do przechowywania bazy danych SQL. Jest to uporządkowany język zapytań, który pozwala zarządzać hurtowniami danych i nimi administrować. Istnieje wiele różnych wersji systemów zarządzania bazami danych Oracle, MySQL i Postgre. Bez względu na nazwę i typ, wykorzystują żądania danych w równym stopniu. To właśnie tutaj leży potencjalna luka. Jeśli programista nie był w stanie obsłużyć żądania poprawnie i bezpiecznie, atakujący może go użyć i zastosować określoną taktykę, aby uzyskać dostęp do bazy danych, a stamtąd - i zarządzać całą witryną.


Aby uniknąć takich sytuacji, należy poprawnie zoptymalizować kod i ściśle monitorować, jaki rodzaj wniosku jest przetwarzany.

Sprawdzanie wtyczki SQL

Aby określić dostępność luk w sieci, istnieje wiele gotowych zautomatyzowanych systemów oprogramowania. Ale możesz wykonać prosty czek i ręcznie. Aby to zrobić, musisz przejść do jednej z badanych stron i spróbować spowodować błąd bazy danych na pasku adresu. Na przykład skrypt w witrynie może przetwarzać zapytania i nie przycinać ich. Na przykład istnieje some_site /index.php? Id = 25 najprostszy sposób -po 25 cytatach i wyślij zapytanie. Jeśli nie wystąpił błąd, na stronie wszystkie żądania są filtrowane i przetwarzane poprawnie lub ich dane wyjściowe są wyłączone w ustawieniach. Jeśli strona została ponownie uruchomiona z problemami, to istnieje luka w zabezpieczeniach SQL injection.


Po odkryciu możesz spróbować się go pozbyć. Aby zaimplementować tę lukę, musisz trochę wiedzieć o poleceniach SQL. Jednym z nich jest UNION. Łączy w sobie wiele wyników zapytania w jeden. Możesz więc obliczyć liczbę pól w tabeli. Przykładem pierwszego wniosku jest:
  • nekyy_sayt /index.php? Id = 25 UNION SELECT 1.
  • W większości przypadków taki zapis powinien wydać błąd?. Oznacza to, że liczba pól nie jest równy 1. Tak więc, wybierając opcje z 1 lub więcej, można ustalić ich dokładną liczbę:
  • nekyy_sayt /index.php? id = 25 UNION SELECT 123456.
  • Oznacza to, że gdy błąd? przestanie się pojawiać, stąd liczba pól jest odgadywana. Istnieje również alternatywne rozwiązanie tego problemu. Na przykład, gdy liczba pól jest duża - 3060 lub 100. Jest to polecenie GROUP BY. To grupy Wyniki kwerendy z takich względów ID:
  • nekyy_sayt /index.php J = 25 GROUP przez 5.
  • W przypadku błędu nie została odebrana, wówczas więcej pól niż 5. W ten sposób, zastępując? opcje o dość szerokim zasięgu, możesz obliczyć, ile naprawdę są. Jest to przykład wstrzyknięcia SQL dla początkujących, którzy chcą spróbować swoich sił w testowaniu swojej strony. Ważne jest, aby pamiętać, że nieuprawniony dostęp do kogoś innego jest artykułem Kodeksu karnego.

    Główne typy iniekcji

    Wdrażanie luk w zabezpieczeniach za pomocą iniekcji SQL może być kilkoma opcjami. Oto najpopularniejsze techniki:
  • Wstrzykiwanie zapytania UNION SQL. Prosty przykład tego typu został już rozważony powyżej. Jest on implementowany z powodu błędu w weryfikacji przychodzących danych, który nie jest filtrowany.
  • Wstrzykiwanie SQL oparte na błędach. Jak wynika z tytułu, ten typ również wykorzystuje błędy, wysyłając wyrażenia, które są syntaktycznie niepoprawne. Następnie przechwytywane są nagłówki odpowiedzi, analizując, które z nich są w stanie wydać kolejny SQL injection.
  • Ułożone zapytania SQL Injection. Luka ta jest określana przez wykonywanie kolejnych zapytań. Charakteryzuje się łączeniem na końcu znaku ;; ". To podejście jest najczęściej realizowane w celu uzyskania dostępu do implementacji odczytu i zapisu danych lub sterowania funkcjami systemu operacyjnego, jeśli pozwalają na to uprawnienia.
  • Wyszukiwarka luk w zabezpieczeniach SQL

    Dostępne w przypadku iniekcji SQL, programy zazwyczaj składają się z dwóch elementów: skanowania witryny w celu wykrycia potencjalnych luk w zabezpieczeniach i ich wykorzystania w uzyskiwaniu dostępu do danych. Istnieją takie narzędzia dla praktycznie wszystkich znanych platform. Ich funkcjonalność znacznie ułatwia testowanie strony pod kątem możliwości SQL injection.

    Sqlmap

    Bardzo wydajny skaner, który współpracuje z większością znanych DBMS. Obsługuje różne metody implementacji SQL injection. Ma możliwość automatycznego rozpoznawania typu hasła hashowania i jego hakowania w słowniku. Istnieje również funkcja ładowania i usuwania plików z serwera.
    Instalacja w środowiskuLinux jest wykonywane za pomocą
  • , GIT klon https://github.com/sqlmapproject/sqlmap.git sqlmap-DEV,
  • cdsqlmap-dev /,
  • ./sqlmap.py --wizard
  • W przypadku systemu Windows jest to opcja w linii poleceń i graficznego interfejsu użytkownika.

    jSQL wtrysku

    jSQL Injection - multiplatform narzędzie do badania wykorzystywania luki SQL. Napisane w Javie, więc JRE musi być zainstalowany w systemie. W stanie obsłużyć żądania GET, POST, header, cookie. Ma wygodny interfejs graficzny.
    Instalacja systemu oprogramowania jest SO-: wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | grep-E -o „/ron190/jsql-injection/releases/download/v[0-9]{12}.[0-9]{12}/jsql-injection-v[0-9]{12}. [0-9] {12} .jar '| głowa-n 1`
    Wprowadzenie przeprowadzone za pomocą java -jar ./jsql-injection-v*.jar Aby rozpocząć sprawdzanie podatności SQL-site, należy wprowadzić adres w górnym polu. Są oddzielne dla GET i POST. Jeśli wynik dodatni w lewym okienku wyświetlana jest lista dostępnych tabel. Możesz je zobaczyć i znaleźć pewne poufne informacje. Aby wyszukać panele administracyjne, użyj karty Strona administracyjna. Używa specjalnych szablonów do automatycznego wyszukiwania rekordów systemowych uprzywilejowanych użytkowników. Spośród nich można uzyskać tylko skrót hasła. Ale jest on w narzędziach programu.
    Po znalezieniu wszystkich wymaganych luki wtryskowe i żądania, narzędzie wypełnienia serwer plików, albo, alternatywnie, pobrać z tego miejsca.

    SQLi Wywrotka v.7

    Program ten - łatwe w użyciu narzędzie do znajdowania luk i wdrożenioweSQL Produkuje go na podstawie tak zwanych dorków. Ich listę można znaleźć w Internecie. Kaczki do iniekcji SQL to specjalne szablony do wyszukiwania. Za ich pomocą można znaleźć potencjalnie zagrożoną witrynę za pośrednictwem dowolnej wyszukiwarki.

    Narzędzia szkoleniowe

    Witryna itsecgames.com zawiera specjalny zestaw narzędzi, który pozwala wykonać przykład wykonania iniekcji SQL i przetestowania go. Aby z niego skorzystać, należy go pobrać i zainstalować. Archiwum zawiera zbiór plików, który reprezentuje strukturę witryny. Aby go zainstalować, będziesz potrzebował konfiguracji serwera WWW Apache, MySQL i PHP.
    Po rozpakowaniu archiwum do folderu serwera internetowego, musisz przejść do adresu podanego przy instalacji tego oprogramowania. Zostanie otwarta strona rejestracji użytkownika. Tutaj musisz wprowadzić swoje dane i kliknąć "Utwórz". Po przeniesieniu użytkownika do nowego okna system zasugeruje wybór jednej z opcji testowania. Wśród nich znajdują się zarówno opisywane zastrzyki, jak i wiele innych zadań testowych. Warto rozważyć przykład wstrzyknięcia SQL, taki jak GET /Search. Tutaj musisz go wybrać i kliknąć "Hack". Użytkownik zobaczy ciąg wyszukiwania i symuluje witrynę z filmami. Możesz oglądać filmy przez długi czas. Ale oni mają tylko 10. Na przykład, możesz spróbować wejść do Iron Mana. Wyświetlony zostanie film, co oznacza, że ​​strona działa, a są w nim tabele. Teraz należy sprawdzić, czy skrypt będzie filtrował znaki specjalne, w szczególności cytaty. Aby to zrobić, musisz dodać "" do paska adresu ". Co więcej, należy to zrobić po nazwie filmu. Witryna wyświetli błąd Błąd: Wystąpił błąd wtwoja składnia SQL; sprawdzić podręcznika, który odpowiada twojej wersji serwera MySQL dla prawego składnię używaną w pobliżu „%„w wierszu 1 wskazuje, że znaki nadal obsługiwane prawidłowo. Więc można spróbować zastąpić żądania. Ale musimy najpierw obliczyć liczbę pól . używa zamówienie, które jest wprowadzane po cudzysłowów. http://testsites.com/sqli_1.php?title=Iron+Man „zamów przez 2 - & amp; action = szukanie tego polecenie wyświetla informacje o filmie, który 2. liczba pól ponad dwukrotnie myślnikiem informuje serwer, że inne wnioski powinny zostać odrzucone. teraz trzeba przejść, stawiając całą wielką wartość jako PI p aż pomyłki. W końcu okazuje się, że pola będą 7.
    Nadszedł czas, aby uzyskać coś pożytecznego z bazy. Musimy zmodyfikować trochę w pasku adresu, prowadząc ją do tego rodzaju: http://testsites.com/sqli_1.php?title=Iron+Man „Union wybrać jedną bazę danych (), użytkownik (), 4password, 67 z użytkownikami - & amp; action = search W wyniku jego realizacji linii vyvedutsya z hэshamy haseł, które można łatwo przekształcić, aby usunąć znaki z jednej z usług internetowych. Trochę pokoldovav i wybierając polu Nazwa logowania, można uzyskać dostęp do konta cudzym, takich jak strony administratora. Produkt ma wiele rodzajów zastrzyków, które można ćwiczyć. Należy pamiętać, że stosowanie tych umiejętności w Internecie, na prawdziwych witrynach może być przestępstwem.

    wtryskowego i PHP

    Co do zasady, PHP kodu odpowiedzialnego za niezbędne do przetwarzania żądań odbieranych od użytkownika. Dlatego na tym poziomie musisz zbudować ochronę przed iniekcją SQL w PHP. Aby rozpocząć dać kilka prostych wskazówek na tematna podstawie której jest to konieczne.
  • Dane muszą zawsze być przetwarzane przed lokalami w bazie. Można go zaimplementować za pomocą istniejących wyrażeń lub poprzez ręczne ustawienie żądań. Również w tym przypadku należy pamiętać, że wartości liczbowe są konwertowane na wymagany typ;
  • Unikaj żądań pojawienia się różnych struktur kontrolnych.
  • Teraz nieco o regułach odpytywania MySQL dla ochrony iniekcyjnej SQL. Podczas komponowania dowolnych wyrażeń dla zapytania istotne jest oddzielenie danych od słów kluczowych SQL.
  • WYBIERZ * Z tabeli WHERE nazwa = Zerg.
  • W tym projekcie system może myśleć, że Zerg jest nazwą pola, więc należy umieścić je w cudzysłowie.
  • WYBIERZ * Z tabeli WHERE name = 'Zerg'.
  • Są jednak sytuacje, w których sama wartość zawiera łapy.
  • WYBIERZ * Z tabeli WHERE name = 'cat-d'avour'.
  • Przetwarzana będzie tu tylko część cat-d, a reszta może być postrzegana jako zespół, który oczywiście nie jest. Tak więc wystąpi błąd. Tak więc konieczne jest zabezpieczenie tego rodzaju danych. Używa odwrotnego ukośnika.
  • WYBIERZ * Z tabeli WHERE name = 'cat-d'avour'.
  • Wszystkie powyższe zasady dotyczą ciągów. Jeśli akcja występuje z liczbą, to nie potrzebuje żadnej stopy ani slasha. Muszą jednak koniecznie być zmuszeni do doprowadzenia do niezbędnego rodzaju danych. Istnieje zalecenie, aby nazwa pola była zawarta we wzajemnych cytatach. Ta postać znajduje się po lewej stronie klawiatury wraz ze znakiem tyldy "~". Jest to wymagane, aby MySQL dokładnie odróżniał nazwę pola od słowa kluczowego.

    Dynamiczne przetwarzanie danych

    Bardzo często kwerendy generowane dynamicznie są używane do uzyskiwania jakichkolwiek danych bazy danych. Na przykład:
  • SELECT * FROM table WHERE number = '$ number'.
  • Tutaj zmienna $ number jest przekazywana jako wartość pola. Co się stanie, jeśli trafi na cat-d'vivar? Błąd Unikaj tego problemu, oczywiście możesz włączyć "magiczne cytaty" w ustawieniach. Ale teraz dane będą chronione w razie potrzeby, a nie konieczne. Ponadto, jeśli kod jest napisany ręcznie, możesz poświęcić trochę więcej czasu na stworzenie systemu odpornego na działanie samego hacka. Możesz użyć mysql_real_escape_string, aby dodać ukośnik. $ number = mysql_real_escape_string ($ number); $ year = mysql_real_escape_string ($ rok); $ query = "INSERT INTO table (liczba, rok, klasa) VALUES ('$ number', '$ year', 11)". Mimo że kod urósł już, potencjalnie będzie działał dużo bezpieczniej.

    Placeholders

    Symbol zastępczy to swoisty znacznik, zgodnie z którym system dowiaduje się, że należy zastąpić to miejsce specjalną funkcją. Na przykład: $ sate = $ mysqli-> prepare ("SELECT District Number FROM WHERE Name =?"); $ sate- & gt; bind_param ("s", $ number); $ sate- & gt; execute (); Ten fragment kodu przygotowuje szablon zapytania, a następnie wiąże numer zmiennej i wykonuje go. Takie podejście pozwala oddzielić przetwarzanie żądania od jego wdrożenia. W ten sposób można zabezpieczyć się przed wykorzystaniem złośliwych kodów zapytań SQL.

    Co może zrobić osoba atakująca

    Ochrona systemu jest bardzo ważnym czynnikiem, którego nie można zaniedbać. Oczywiście łatwiej będzie odbudować prostą wizytówkę witryny lub wizytówki. A jeśli jest to świetny portal, serwis, forum? Jakie mogą być konsekwencje, jeśli nie myślisz o bezpieczeństwie? Po pierwsze, haker możezakłócić integralność bazy danych i całkowicie ją usunąć. A jeśli administrator witryny lub hosta nie utworzy kopii zapasowej, nie będziesz zadowolony. Ponadto osoba atakująca, która złamała jedną witrynę, może przełączyć się na inne hosty na tym samym serwerze. Poniżej znajduje się kradzież danych osobowych odwiedzających. Jak z nich korzystać - wszystko tutaj ogranicza tylko wyobraźnia hakera. Ale w każdym razie konsekwencje nie będą tak przyjemne. Zwłaszcza jeśli były informacje finansowe. Ponadto osoba atakująca może łączyć bazę, a następnie żądać pieniędzy za jej zwrot. Dezinformacja użytkowników w imieniu administratora strony, nie ma osoby, może również mieć negatywne konsekwencje, jako możliwe oszustwo.

    Podsumowanie

    Wszystkie informacje w tym artykule mają jedynie charakter informacyjny. Należy go używać wyłącznie do testowania własnych projektów przy wykrywaniu defektów i ich eliminacji. Aby uzyskać bardziej dogłębną analizę sposobu przeprowadzania iniekcji SQL, należy rozpocząć własne badania nad funkcjami i funkcjami języka SQL. Jak mają zastosowanie zapytania, słowa kluczowe, typy danych i to wszystko. Ponadto, bez zrozumienia funkcji elementów PHP i HTML. Główne luki w zabezpieczeniach wtrysku to pasek adresu, wyszukiwanie i różne pola. Badanie funkcji PHP, sposobu ich implementacji i możliwości pozwoli ci zrozumieć, jak unikać błędów. Dostępność wielu gotowych narzędzi programowych umożliwia przeprowadzenie dogłębnej analizy witryny pod kątem znanych luk w zabezpieczeniach. Jednym z najbardziej popularnych produktów jest kali linux. To jest obrazSystem operacyjny Linux, który zawiera dużą liczbę narzędzi i programów zdolnych do kompleksowej analizy wytrzymałości witryny. Dlaczego musisz wiedzieć, jak rozbić witrynę? Wszystko jest bardzo proste - trzeba mieć wyobrażenie o potencjalnie zagrożonych miejscach twojego projektu lub strony. Zwłaszcza jeśli jest to sklep internetowy z opcją płatności online, w którym osoba atakująca może zaatakować dane dotyczące płatności użytkownika. W przypadku profesjonalnych badań istnieją służby bezpieczeństwa informacji, które będą w stanie sprawdzić stronę według różnych kryteriów i głębokości. Od prostych wstrzyknięć HTML do socjotechniki i phishingu.

    Powiązane publikacje