Wstęp
Zanim zacznę robić filmy o bezpieczeństwie, hackowaniu i cheatowaniu, postanowiłem napisać artykuł na wykopie na ten temat, dzisiaj zajmiemy się poczciwym SQL injection, czyli metodzie ataku komputerowego ( ͡° ͜ʖ ͡°). Artykuł oprócz sposobu detekcji podatności strony na ten atak poruszy kwestię zabezpieczenia własnej witryny przed nim. Moim zdaniem zrozumienie działania ataku najlepiej nas nauczy zabezpieczenia się przed nim.
Trochę o SQL Injection
Jest to wykorzystanie błędnego sposobu pobierania informacji z bazy danych przez stronę (zapytania SQL). Podatne na ten atak jest wszystko, co dynamicznie generuje zapytania do bazy danych, ponieważ wszystkie tego typu aplikacje korzystają z zapytań SQL. Odsyłam Was do artykułu na wikipedii, który rozwija sposoby tego ataku.
Przygotowanie środowiska do ataku
Po pierwsze, nie polecam robić tego na Windowsie, od razu przejdźcie na Linuxa, jeśli chcecie się w to wszystko zagłębić postawcie sobie Kali Linux, a jeśli obecnie korzystacie z Linuxa to bez względu jaka dystrybucja by to nie była się nada. Nie ma przeciwwskazań do robienia tego na Windowsie, ale na dłuższą metę zobaczycie, że Linux akurat do tych celów (i pewnie większości co nie #bojowkalinux? ( ͡° ͜ʖ ͡°)) lepiej się nada.
Jeśli nie chce Wam się formatować dysków, tworzyć partycji wystarczy wirtualka. Ja Wam polecam pobrać plik wirtualki stąd. (login: root / hasło: toor). Zaimportujecie go sobie do Virtualboxa i od razu możecie pracować, jest w nim zawarte to, co nam wystarczy w dzisiejszych działaniach.
Detekcja
Jak sprawdzić czy strona jest podatna na atak? Bardzo prosto, musimy sprawdzić czy pobiera ona informacje z bazy w linku. Strony, które pobierają sobie takie dane jest łatwo wychwycić, w Google wpisujemy hasło:
inurl:index.php?id=
Wykorzystaliśmy tutaj operatory wyszukiwania zaawansowanego udostępnione przez Google. Wyświetlamy wszystkie wyniki z Google, które posiadają składnik linku, który oznacza, że strona może zostać zaatakowana. Jednak to nie wszystko, twórca może w odpowiedni sposób weryfikować zmienne podawane przez użytkownika do aplikacji o czym później, taka sytuacja wyklucza możliwość ataku.
Załóżmy, że znaleźliśmy potencjalną stronę i jest to pierwszy wynik w Google (czy teraz się też będziecie bili o pozycjonowanie? ( ͡° ͜ʖ ͡°)).
Dobra, czas na zabawę. po id= macie jakiś numer, który aplikacja sobie wybiera z bazy, prawda? Popsujmy ją, zamieńmy go na -1. Możliwości są dwie, albo nas wyrzuci na stronę główną/404, albo dostaniemy błąd o nieprawidłowej składni w zapytaniu (╭☞σ ͜ʖσ)╭☞ i o to nam chodzi. Baza danych otrzymała od nas zapytanie, które my dostosowaliśmy z własną wartością, a że wartość była nieprawidłowa po prostu dostaliśmy informację o nieprawidłowej składni. Znaleźliśmy stronę, na której atak jest możliwy.
Automatyzacja
I tutaj z pomocą przychodzi Linux, no może nie do końca Linux, bo Python, ale odpalany na Linuxie ( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°). Zakładam, że macie zainstalowanego Kaliego z linku powyżej. Jeśli nie, to bawcie się po swojemu, ale poradnik będzie skierowany pod świeżo postawioną maszynę z w/w systemem.
Jak zautomatyzować? Bardzo prosto, Google udostępnia Search API do tworzenia automatycznych wyszukiwarek, a wynik jest zwracany w JSON, więc teraz wyobraźmy sobie, że kierujemy do Search API zapytanie: elektronika inurl:index.php?id= i zwraca nam strony o elektronice z pewnym prawdopodobieństwem, że możemy im wstrzyknąć SQL Injection. Zwraca do jsona. Czy to nie wspaniałe? ( ͡° ͜ʖ ͡°) Dostajemy pełne linki, teraz parsowanie danych przez jakąś bibliotekę, np. simplejson do pliku tekstowego, link pod linkiem. Teraz zostaje nam sprawdzić czy strona jest podatna na atak, jak?
Tutaj z pomocą przychodzi nam skrypt napisany w pythonie do tego służący. Pobierzmy go sobie na naszego Linuxa, na początku nawigując do odpowiedniego folderu, wystarczy na pulpit. Czyli wklepujemy cd Desktop na Linuxie, a następnie git clone https://github.com/the-c0d3r/s... i gotowe. Teraz wystarczy odpalić skrypt pythonem, podać we flagach ścieżkę do pliku (-f), który powiedziałem Wam jak utworzyć w drugim akapicie tej części artykułu. Następnie we fladze (-o) dać ścieżkę pliku wyjściowego. Klikamy enter, zakładamy kominiarę i czekamy ( ͡~ ͜ʖ ͡°). Po kilku minutach (zależy od wielkości pliku, szybkości naszego internetu itp) zostanie nam wypluty plik z linkami stron, które są gotowe być rozpierdolone. Gratuluję, o zastosowaniach tego ataku chyba nie muszę pisać, po prostu mamy dostęp do cudzej bazy danych, najpewniej z loginami, mailami, hasłami itp.
Ale po co to piszę?
Aby zwrócić uwagę na stan zabezpieczeń na naszej witrynie, jest to bardzo proste, średniozaawansowany użytkownik komputera jest w stanie przeprowadzić ten atak, wystarczy chwilę poczytać. Proponuję zacząć od odpowiedniego sprawdzania parametrów przekazywanych przez użytkownika. Zabezpieczyć formularze tak, aby zmienna tekstowa nie kończyła się jakimś znakiem, który może wywołać błąd (np. przy podawaniu nicku) a w naszym przypadku sprawdzać czy zmienna (tutaj id) jest liczbą dodatnią.
Oprócz tego jak pilnowanie, aby wszystkie frameworki, biblioteki, silniki backendowe były zaktualizowane.
Komentarze (83)
najlepsze
EDIT: ofc w uproszczeniu
Nie chcę cię zniechęcać, bo każdy serwis
Cieszy mnie, że ci się chce, ale obawiam się, że do nikogo tym tekstem nie trafisz.
"Jest to wykorzystanie błędnego sposobu pobierania informacji z bazy danych przez stronę (zapytania SQL)."
Nie. Jest to technika polegająca na wstrzyknięciu złośliwego kodu SQL w zapytania SQL wykorzystująca podatności danej aplikacji np. nieodpowiednie filtrowanie danych dostarczanych przez użytkownika,
Społeczność jako taka haker.edu siedzi tam tylko dlatego, że kanał się nazywa w ten sposób i jest fajnie xD
Albo pisz krok po kroku co
Kali Linux... fajne distro z uwagi na ilość narzędzi ale
1) Na co komu tyle narzędzi, ktoś będzie chciał na np. Debianie nmap'a używać to po prostu sobie pobierze
2) Kali Linux ma tendencje do częstego sypania błędami co może też niektórych zniechęcić
Jeśli chodzi o wirtualki...
Nie każdemu to po prostu komp uciągnie, jak dla mnie o wiele lepsze jest odpalanie systemu
1) napisałem o tym:
2) Jedyne co mogę na to odpowiedzieć to potwierdzić, ale to fajna dystrybucja do takich celów i na dłuższą metę doinstalowywanie tylu narzędzi i konfiguracja może być po prostu zbyt trudna dla szarego użytkownika
Ta wirtualka korzysta z 2GB Ramu i nie wszystkich rdzeni procesora, założyłem, że 4GB (jak
pozbycie się wyświetlania takiego błędu to dwie linie kodu ¯\_( ͡° ͜ʖ ͡°)_/¯
taki szaraczek niekoniecznie będzie w stanie to zrobić z suchego opisu
Jeśli ktoś się na tym zna to to przeczyta i nic z tego nie będzie miał bo to totalne podstawy.
Jeśli ktoś się nie zna to nic nie ogarnie bo pojechałeś ogólnikowo.
Żeby przeciętny user mógł zrozumieć SQL injection to musiałbyś napisać artykuł chyba na 30 stron z tłumaczeniem co to baza danych, jak działają strony internetowe z bazą danych a jak działają