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
Jak ktoś naprawdę chce się zaznajomić z tematem to zapraszam poniżej:
https://www.owasp.org/index.php/Testing_for_SQL_Injection_(OTG-INPVAL-005)
Tutaj łopatologiczne wyjaśnienie podstaw po polsku:
https://sekurak.pl/czym-jest-sql-injection/
@sekurak Połączenie nie jest bezpieczne. Niektóre elementy tej strony (np. obrazki) nie były przesłane w sposób bezpieczny. Moglibyście to
Nie wiem tylko czy się z tego śmiać, czy plakać. Kolejny franchise'a zniszczony przez niewydarzone nieuctwo uchodzące współcześnie za scenarzystów.
Mam świadomość, ale zawsze mnie nurtuje - dlaczego? jak?
Przecież te wszystkie współczesne frameworki/libki do webu są CHYBA tak zrobione, że wręcz intencjonalnie musiałbyś to robić :D
chyba nawet najgorsze tutoriale poruszają tę kwestię
PaprykEdu pozdro
polecam
Stworzyłem plik typu index.php podatny na sql injection.
Bo wpisaniu czegokolwiek co "wyjdzie' poza kolumnę:
index.php zwraca błąd.
Z jednej strony to dobrze bo mam to zabezpieczone z automatu, z drugiej muszę to obchodzić gdy chcę sobie w panelu zrobić pola z częściami zapytań.
Ktoś wie czy tak jest w większości nowych hostingów?
Widzę że mam włączony moduł
ModSecurity: http://www.modsecurity.org/
To pewnie to.
Wystarczy Windows, Firefox i Burp.