Muszę wyjaśnić komuś iniekcję SQL bez przeszkolenia technicznego ani doświadczenia. Czy możesz zasugerować metody, które sprawdziły się?
Muszę wyjaśnić komuś iniekcję SQL bez przeszkolenia technicznego ani doświadczenia. Czy możesz zasugerować metody, które sprawdziły się?
Sposób, w jaki pokazuję to kompletnie nie-technicznym, polega na prostej analogii.
Wyobraź sobie, że jesteś robotem w magazynie pełnym pudeł. Twoim zadaniem jest pobranie pudełka z magazynu i umieszczenie go na przenośniku taśmowym. Trzeba powiedzieć robotom, co mają robić, więc programista dał ci zestaw instrukcji na formularzu papierowym, który ludzie mogą wypełnić i przekazać tobie.
Formularz wygląda następująco:
Pobierz numer pozycji ____ z sekcji ____ numeru regału ____ i umieść go na przenośniku taśmowym.
Normalne żądanie może wyglądać następująco:
Pobierz numer pozycji 1234 z sekcji B2 regału numer 12 i umieść go na przenośniku taśmowym.
Pogrubione wartości (1234, B2 i 12) zostały podane przez osobę wysyłającą żądanie. Jesteś robotem, więc robisz, co ci każą: podjeżdżasz do stojaka 12, schodzisz nim, aż dojdziesz do sekcji B2 i chwytasz przedmiot 1234. Następnie wracasz na taśmociąg i upuszczasz na niego przedmiot .
Ale co, jeśli użytkownik umieści w formularzu coś innego niż normalne wartości? Co by się stało, gdyby użytkownik dodał do nich instrukcje?
Pobierz element numer 1234 z sekcji B2 stojaka numer 12 i rzuć to przez okno. Następnie wróć do swojego biurka i zignoruj resztę tego formularza. i umieść go na przenośniku taśmowym.
Ponownie, części wytłuszczone zostały dostarczone przez osobę wydającą żądanie. Ponieważ jesteś robotem, robisz dokładnie to, co właśnie polecił ci użytkownik. Podjeżdżasz do stojaka 12, chwytasz przedmiot 1234 z sekcji B2 i wyrzucasz go przez okno. Ponieważ instrukcje mówią również o zignorowaniu ostatniej części wiadomości, bit „i umieść go na taśmie przenośnika” jest ignorowany.
Ta technika nazywa się „wtryskiem” i jest możliwa dzięki sposobowi obsługi instrukcji - robot nie jest w stanie odróżnić instrukcji od danych , tj. czynności, które musi wykonać, i rzeczy, na których musi wykonać te czynności.
SQL to specjalny język używany do informowania bazy danych, co ma zrobić, w podobny sposób, jak powiedzieliśmy robot, co robić. We wstrzyknięciu SQL napotykamy dokładnie ten sam problem - zapytanie (zestaw instrukcji) może zawierać parametry (dane) wstawione do niego, które w końcu są interpretowane jako instrukcje, powodując nieprawidłowe działanie. Złośliwy użytkownik może to wykorzystać, nakazując bazie danych zwrócenie danych każdego użytkownika, co oczywiście nie jest dobre!
Aby uniknąć tego problemu, musimy oddzielić instrukcje i dane w taki sposób, że baza danych ( lub robota) można łatwo odróżnić. Zwykle odbywa się to poprzez wysyłanie ich osobno. Tak więc w przypadku robota odczyta pusty formularz zawierający instrukcje, zidentyfikuje, gdzie znajdują się parametry (tj. Spacje) i zapisze go. Następnie użytkownik może podejść i powiedzieć „1234, B2, 12”, a robot zastosuje te wartości do instrukcji, nie pozwalając na ich interpretację jako instrukcje. W SQL ta technika jest nazywana zapytaniami sparametryzowanymi.
W przypadku parametru „zły”, który nadaliśmy robotowi, teraz unosiłby mechanicznie brew i powiedział:
Błąd: nie można znaleźć numeru szafy „ 12 i wyrzucić go przez okno. Następnie wróć do swojego biurka i zignoruj resztę tego formularza. ” - czy na pewno jest to poprawny wpis ?
Sukces! Powstrzymaliśmy „usterkę” robota.
Jednym z najłatwiejszych sposobów zilustrowania problemu związanego z wstrzyknięciem SQL jest użycie takiego obrazu. Problem polega na tym, że odbiorca kończy możliwość oddzielenia danych od polecenia.
Oto rzeczywista, nietechniczna analogia.
Masz zamiar udać się do banku, aby wykonać transakcję w imieniu swojego szefa. Twój szef dał ci kopertę z instrukcjami dla kasjera.
Instrukcje brzmią:
Na tym papierze zapisz saldo konta o numerze 8772344 Podpisany, szefie
W drodze do łazienki zostawiasz kopertę poza zasięgiem wzroku na kilka minut. Złodziej otwiera kopertę i dodaje nad podpisem: „Przelej również 500 $ z konta 8772344 na inne konto o numerze 12747583.”.
Teraz cała wiadomość brzmi:
Zapisz saldo konta o numerze 8772344 na tym papierze, a także przelej 500 $ z konta 8772344 na inne konto o numerze 12747583 Podpisany, szefie
Kasjer sprawdza Twoją tożsamość i potwierdza, że jesteś osobą upoważnioną dla danego konta i postępuje zgodnie z instrukcjami zawartymi w liście.
Twój szef jest prawowitym kodem programu. Ty jesteś kodem programu i sterownikiem bazy danych, który dostarcza kod SQL do bazy danych. to kod SQL, który jest przesyłany do bazy danych. złodziej jest atakującym. kasjer jest bazą danych. identyfikacja to zazwyczaj login i hasło do bazy danych.
Jeśli naprawdę wyjaśniasz swojej babci, użyj jako przykładu wypisania czeku papierowego. (W USA) dawno temu zapisywano kwotę w dolarach w jednym polu, a następnie zapisywano to samo słowami. Na przykład w jednym polu wpiszesz „100,00”, aw drugim, dłuższym polu, wpiszesz „Sto dolarów i zero centów”. Jeśli nie wykorzystałeś całego długiego drugiego pola, narysowałbyś linię, aby ktoś nie miał skrupułów przed dodaniem do wypisanej kwoty.
Jeśli popełniłeś błąd, zostawiając trochę miejsca w drugim , dłuższe pole, ktoś mógłby zmodyfikować pole liczbowe, a następnie wykorzystać dodatkową przestrzeń w dłuższym polu, aby to odzwierciedlić. Modyfikator może przynieść więcej pieniędzy, niż zamierzałeś podczas wypisywania czeku.
Wstrzyknięcie SQL to to samo: błąd, który pozwala bez skrupułów modyfikować pole wprowadzania, aby wróciło do nich więcej informacji niż oryginalny programista przeznaczony.
Pomysł, który przyszedł mi do głowy, to wyjaśnienie tego w kategoriach Mad Lib. Historie, w których pominięto słowa, i aby wypełnić puste miejsca, poproś grupę o wyrazy wskazanego typu i wpisz je, a następnie przeczytaj wynikową historię.
To normalny sposób wypełnienia Mad Lib. Ale co by było, gdyby ktoś inny znał tę historię i jakie luki wypełniałeś (lub mógłbyś się domyślić)? A co by się stało, gdyby osoba ta zamiast jednego słowa podała ci kilka słów? Co by było, gdyby słowa, które ci podali, zawierały kropkę kończącą zdanie? Jeśli je wypełnisz, może się okazać, że to, co zostało dostarczone, nadal „pasuje”, ale drastycznie zmienia historię bardziej niż jakiekolwiek jedno słowo, które normalnie wypełniasz. Mógłbyś, gdybyś miał miejsce, dodać całe akapity do Mad Lib i przekształcić go w coś zupełnie innego.
To, w terminach nietechnicznych, jest iniekcją SQL w pigułce. Zapewniasz "spacje" dla danych, które zostaną wstawione do polecenia SQL, podobnie jak słowa do Mad Lib. Atakujący następnie wprowadza wartość, której nie oczekujesz; zamiast prostej wartości do wyszukania, wprowadza fragment instrukcji SQL kończącej napisaną przez Ciebie, a następnie dodaje swoje własne polecenie SQL jako nowe „zdanie”. Dodatkowa instrukcja może być bardzo szkodliwa, jak polecenie usunięcia bazy danych lub utworzenia nowego użytkownika z wieloma uprawnieniami w systemie. Komputer, nie znając różnicy, po prostu wykona wszystkie zadania, które ma wykonać.
Innym świetnym sposobem na wyjaśnienie komuś czegokolwiek (w tym SQL Injection) jest pomoc postaci z kreskówek i sformułowanie wokół nich historii.
Według mnie jest to najlepsze zdjęcie dostępne w internecie, całkiem przyjemnie wyjaśniające.
Źródło: http://xkcd.com/327/
Wyjaśniłbym to jako mówienie kasjerowi, że klient ma zawsze rację i powinien zrobić wszystko, co w jego mocy, aby zaspokoić jego potrzeby. Następnie, ponieważ nie ma kontroli zasadności wniosku, kiedy klient przychodzi i mówi, że chce mieć cały sklep za darmo, kasjer ładuje wszystkie zapasy do ciężarówki.
To nie jest Nie jest to idealne wyjaśnienie, ale zakłada, że kod ma zrobić wszystko, co wprowadzi użytkownik, a następnie zły facet używa tej instrukcji, aby wyrwać się z towarem.
Myślę, że to naprawdę zależy od rodzaju sprawy, którą próbujesz przekazać.
Wszystko zależy od stopnia nietechniczności, o którym tutaj mówisz, ale zwykle opisywałbym wstrzykiwanie SQL ludziom biznesu coś w rodzaju -
„słabość w sposobie, w jaki niektóre witryny internetowe obsługiwać dane wejściowe od użytkowników (np. umieszczając swoje imię i nazwisko w formularzu rejestracyjnym), co może umożliwić atakującemu uzyskanie dostępu do bazy danych przechowującej wszystkie informacje o użytkowniku witryny "
, jeśli chcą uzyskać nieco więcej szczegółów niż to.
„Niektóre aplikacje internetowe nie oddzielają poprawnie danych wejściowych użytkownika od instrukcji dla bazy danych, co może pozwolić atakującym na bezpośrednie instruowanie bazy danych za pomocą informacji, które wypełniają w formularzu witryny internetowej. atakujący, aby odczytać informacje innych użytkowników z bazy danych lub zmienić niektóre informacje w niej zawarte. ”
Myślę, że najlepsze efekty można uzyskać, po prostu zademonstrując atak. Napisz nieszkodliwie wyglądający formularz internetowy i pokaż wynik zapytania przy użyciu danych wejściowych użytkownika. Następnie, po wprowadzeniu własnych, przygotowanych danych wejściowych, Twoi odbiorcy będą mieli „aha-doświadczenie” po znalezieniu haseł w wyniku. Zrobiłem taką stronę demonstracyjną, wystarczy kliknąć „strzałkę obok”, aby wypełnić przygotowane dane.
P.S. Jeśli sam napiszesz taką stronę, uważaj, aby nie pozwolić testerom na uzyskanie niechcianych uprawnień. Najlepiej jest, gdy sam uruchomisz demo na swoim lokalnym systemie z najniższymi możliwymi uprawnieniami do bazy danych (nie wszystkie rodzaje ataków powinny być możliwe, to tylko demo). Zrób białą listę dozwolonych wyrażeń.
Baza danych jest jak magiczny dżin (lub Wyrocznia ), który spełnia życzenia. Powiedzieliśmy naszemu dżinowi, aby spełnił maksymalnie trzy życzenia, ale jeśli nie zweryfikujemy, czego ludzie sobie życzą, ktoś z łatwością przechytrzy to, prosząc o coś sprytnego, takiego jak „sto więcej życzeń” lub „życzenia wszystkich innych” .
Wyjaśnij to w prosty sposób:
System może przyjmować żądania z danymi od dowolnego użytkownika, aby coś z nim zrobić.
Sam system ma funkcjonalność, która działa jak usuwanie lub zmiana danych.
Osoba atakująca próbuje uruchomić którąkolwiek z tych funkcji, aby coś zdobyć lub zniszczyć.
Dlatego atakujący umieszcza w żądaniach prawidłowe polecenia.
System uruchamia te polecenia, wykonując cokolwiek atakujący chciał.
Wyobraź sobie dużą firmę, która przechowuje wszystkie swoje dokumenty w formie papierowej w dużym pomieszczeniu pełnym szafek na dokumenty. Aby pobrać lub wprowadzić zmiany w plikach, ktoś wypełni prosty formularz do wypełnienia, a następnie ten formularz zostanie wysłany do urzędnika, który postępuje zgodnie z instrukcjami w formularzu.
Na przykład :
Pobierz rekordy rozliczeniowe od daty rozpoczęcia _ _ _ do daty zakończenia _ _ _, gdzie klient jest _ _ _
Normalnie byłoby to czymś w ten sposób:
Pobierz rekordy rozliczeniowe od daty rozpoczęcia 01/01/2011 do daty zakończenia 12/31/2011 , gdzie klient to Billy Joe Bob
Ale w rękach osoby pozbawionej skrupułów ten formularz może być użyty do innych celów, na przykład:
Pobierz rekordy rozliczeniowe od daty rozpoczęcia 01/01/2011 do daty zakończenia 12/31/2011 , gdzie klientem jest Robert Mensas, a także pobierz numery kart kredytowych wszystkich klientów
Udając, że ich nazwisko jest takie samo o zawiera inne polecenia, które mogą przejąć wypełniony formularz, a jeśli urzędnik nie został przeszkolony w radzeniu sobie z tego rodzaju sprawami, może po prostu wykona instrukcje bez zastanowienia i przekaże wszystkie informacje o karcie kredytowej użytkownika.
Lub alternatywnie:
Pobierz rekordy rozliczeniowe od daty rozpoczęcia 01/01/2011 do daty zakończenia 12 / 31/2011 gdzie klientem jest Robert Mensas, a także dodaje 100 000 USD do salda konta Roberta Mensasa
Co ma podobnie niebezpieczny potencjał.
Sztuczka z wstrzyknięciami SQL polega na upewnieniu się, że kod jest wystarczająco inteligentny, aby zapewnić, że użytkownicy nie mogą zmienić intencji poleceń wysyłanych do bazy danych i nie mogą pobrać danych ani wprowadzić zmian, nie powinni mieć na to pozwolenia.
Czasami hakerzy umieszczają polecenia komputera / programowania w polach w Internecie, aby nakłonić witrynę do zrobienia czegoś, czego nie powinna. Dlatego sprawdzamy informacje wprowadzone na stronach internetowych pod kątem tego, co może być „poleceniem”.
... komu to w ogóle wyjaśniasz?
Jeśli nie musisz robić tego szybko i mieć dostępną kartkę papieru, po prostu zademonstruj wszystko. SQL jest bardzo podobny do języka naturalnego, więc po prostu wykonaj proste zapytanie i zademonstruj atak:
SELECT * FROM data WHERE key = $ id
" $ id jest zastępowane przez wszystko, co jest tutaj widoczne wskazuje parametr adresu URL . Zwykle jest to liczba taka jak 1
. To daje nam: „
SELECT * FROM data WHERE id = 1
"Teraz, jeśli ktoś umieści tam więcej niż tylko liczbę, zostanie ona również uwzględniona. Na przykład, jeśli ktoś wstawi tam 1 LUB 1 = 1
, otrzymujemy to "
SELECT * FROM data WHERE id = 1 OR 1 = 1
" Czy możesz zobacz, dokąd to zmierza? Teraz w tym systemie możliwe jest również wydawanie wielu poleceń, zwanych zapytaniami, jeśli oddzielisz je średnikiem. Czy wiesz, co się stanie, jeśli ktoś wstawi
SELECT * FROM data WHERE id = 1; USUŃ WSZYSTKO;
„Właściwa komenda to DROP DATABASE
lub DROP TABLE
, ale masz pomysł.”
Myślę, że najprostszy, najjaśniejszy i najzabawniejszy przykład pochodzi z „The Simpsons”: żarty Barta:
https://en.wikiquote.org/wiki/List_of_Simpsons_Prank_Calls
Moe: [odbiera telefon] Moe's Tavern.
Bart: Witaj, czy Al tam ?
Moe: Al?
Bart: Tak, Al. Nazwisko: Coholic.
Moe: Sprawdzę ... [dzwoni] Telefon do Al. Al Coholic. Czy jest tu Al Coholic? [śmiech gości baru]
Moe: Zaczekaj chwilę. [do telefonu] Słuchaj, mały żółtobrzuchy osiołku. Jeśli kiedykolwiek dowiem się, kim jesteś, zabiję cię! [rozłącza się]
Bart i Lisa: [śmiech]
Homer: Mam nadzieję, że kiedyś znajdziesz tego punka, Moe.
Jak to jest dobra analogia? „Imię”, które jest niedbale powtarzane bez sprawdzania, powoduje niezamierzone zachowanie.
Link YouTube do kompilacji tych żartów telefonicznych, aby pomóc wybrać najbardziej odpowiedni przykład.
Wstrzyknięcie SQL ma miejsce, gdy złośliwy użytkownik próbuje wydobyć informacje ze strony internetowej, do której nie ma autoryzacji.
To jest jak przesłuchiwanie innej osoby, gdzie pytającym jest złośliwy użytkownik a osoba przesłuchiwana to strona internetowa.
Przesłuchujący może zrobić:
Niektóre słabości przesłuchiwanej osoby mogą obejmować:
Warto zwrócić uwagę na to, że są lepsi przesłuchujący niż inni i niektórzy ludzie będą mówić od razu, a inni nigdy.
Cóż, wyjaśnienie za pomocą analogii technicznej jest w porządku, ale zabrzmiałbym trochę długo i kiepsko.
Chciałbym tylko wyjaśnić, że to kwestia ścisłej papierkowej roboty lub wymagań, aby ograniczyć nadużycia w administracji i finansach. >
Jeśli jest to zrobione w wystarczająco ścisły sposób, masz mniej złych ryb zdolnych do przejścia przez sieć.
Użyłbym prostego rysunku z bardzo prostym pseudokodem z ramkami i strzałkami oraz wyjaśnij roboty i analogię do skrzynek.
Moje podejście do osoby nie posiadającej wiedzy technicznej:
Załóżmy, że pracujesz w dużym biurowcu. Każdy urzędnik ma własny klucz do swojego biura (= zapytanie SQL, które chciał wykonać programista). Teraz ktoś bierze plik z igłą i modyfikuje nieco swój klucz, czyli usuwa pin (= SQL-Injection, zmienia zapytanie SQL). Ten zmodyfikowany klucz może otwierać inne (a może wszystkie drzwi). Więc urzędnik ma dostęp do większej liczby lub wszystkich biur w tym domu i może czytać / zmieniać dokumenty w innych biurach.
Prawdopodobnie wszyscy używają kluczy i zamków, więc powinno być łatwe do zrozumienia iz mojej perspektywy jest to dobra analogia do wstrzyknięcia SQL.
Kanał YouTube Live Overflow ma świetny film zatytułowany „Injection Vulnerabilities - or: How I get a free Burger”. Opis filmu:
Pewnej nocy zamówiłem jedzenie i przypadkowo wstrzyknąłem do zamówienia burgera. Dostawca pomylił komentarz jako kolejną pozycję na liście zamówień i zrobił to. Mimo że nie została do tego dołączona żadna cena.
Oto moja próba:
Zamień „witryna” na „dom” i „atakujący | haker” na „włamywacz”.
Wstrzyknięcie SQL jest wynikiem pozostawienia otwartych okien (* z ogromnym neonem z napisem „OTWÓRZ”) domu, podczas gdy masz 10-calowe drzwi przednie i tylne ze stali nierdzewnej.
Włamywacz chce włamać się i ukraść Twój system stereo, ale najpierw musi wymyślić, jak się włamać, widzi, że drzwi są praktycznie niemożliwe do wyważenia, jednak po dalszym śledztwie widzi, że okna są otwarte. Nie może ukraść mebli (przynajmniej nie w jednym kawałku), ale może ukraść twój system stereo, laptop, komputer itp.
*) trochę dramatyczne, wiem (:
Zawsze zależy to od osoby, która Cię słucha, ale tak bym mu to / jej wyjaśnił -
Wyobraź sobie, że wysyłasz telegram z wiadomością typu -
„Szczęśliwego Nowego Roku! Proszę uważaj. - Fred ”
i ktoś, kto nie ma dobrych intencji , który mógłby uzyskać dostęp do twojego telegramu, przechwyciłby i zastąpił podświetlone słowa -
„Szczęśliwego Nowego Roku! Prześlij nam pieniądze. - Fred "
Mam nadzieję, że to pomoże! :)