Pytanie:
Jak wyjaśnić iniekcję SQL bez żargonu technicznego?
torayeff
2012-12-20 10:06:01 UTC
view on stackexchange narkive permalink

Muszę wyjaśnić komuś iniekcję SQL bez przeszkolenia technicznego ani doświadczenia. Czy możesz zasugerować metody, które sprawdziły się?

Nie mogę uwierzyć, że nikt jeszcze nie wspomniał o „małych stolikach Bobby'ego”… Może to być za dużo dla twojej obecnej publiczności, ale i tak musi być powiązane z: „[Exploits of a Mom] (http://xkcd.com/327 /) ”
(Nie mam wystarczającej liczby przedstawicieli, aby odpowiedzieć, ale mówię ludziom coś w stylu :) Wstrzyknięcie SQL to próba zmiany zachowania programu przez hakera poprzez wstawienie kodu SQL do pola formularza [kończę z ciągami zapytań i co nie]. Dobre praktyki programistyczne i projektowanie aplikacji zapobiegają iniekcji SQL [dodam - kosztem elastyczności - mówiąc o niezwykle złożonej aplikacji]. Mój 7-latek to rozumie.
Lubię używać analogii wstawiania obraźliwych lub dziwnych słów jako nazw Pokémonów. Na przykład [nazwanie jednej z nich „rodziną” i przekazanie jej Pani Żłobka] (http://www.halolz.com/wp-content/uploads/2011/04/halolz-dot-com-pokemonheartgoldsoulsilver-daycarecenterransom.jpg ).
Zazwyczaj staram się pominąć szczegóły, jeśli nie jest to użytkownik techniczny, a jedynie opisuję ryzyko i skutki. „Jeśli $ software ma błąd, który umożliwia iniekcję SQL, osoba atakująca może przemycić polecenia do bazy danych, aby zniszczyć lub zmodyfikować dane lub hasła”. Dlaczego miałbyś chcieć przejść do szczegółów analizowania sql, przygotowanych instrukcji i cytowania.
[MichaelGG] (http://security.stackexchange.com/users/17709/michaelgg) napisał dobre, krótkie wyjaśnienie [w Hacker News] (https://news.ycombinator.com/item?id=4951003): „ Idź do sądu i napisz swoje imię jako „Michael, teraz możesz iść”. Następnie sędzia mówi: „Dzwonię do Michaela, teraz możesz iść”, a komornicy pozwolą ci odejść, ponieważ hej, tak powiedział sędzia ”.
to powinna być odpowiedź, zagłosuję za nią
Czy ktoś widział dobry, działający, czysty zastrzyk SQL, który nie obejmuje trudnej, złożonej logiki dziesięciu warstw środkowych, ORMów i backendów NoSQL? Nie zapomnij wspomnieć, że to mistrzostwo jest trochę ... oldschoolowe.
A gdyby tak powiedzieć im, że przed wysłaniem należy zawsze sprawdzić, co jest wysyłane do bazy danych. Większość ludzi, z którymi chciałbyś porozmawiać o bazach danych, rozumie, że dane są bardzo cenne. Nie chcą, żeby ktokolwiek się w to bawił. Poza tym możliwość zrobienia czegoś złego, na przykład wirusa, będzie brzmiała wyjątkowo źle.
To nie jest dla użytkownika technicznego. Będą się zastanawiać, dlaczego mogą odpowiadać na takie prośby z zewnątrz. Nie widziałem dobrej odpowiedzi, która nie była jeszcze odpowiednio ubrana (jestem pewien, że nie mogłem).
@RoryO'Kane Myślę, że to było najlepsze wytłumaczenie, jakie kiedykolwiek istniało.
@mivk Też myślałem o tym, żeby to wyjaśnić, ale potem trzeba było wyjaśnić `DROP tabele` (no i dobrze, wyjaśnić kulturowy sposób zachowania w żartach).
21 odpowiedzi:
Polynomial
2012-12-20 17:08:39 UTC
view on stackexchange narkive permalink

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.

Proste, zrozumiałe, genialne!
Problem z metaforami i analogiami polega na tym, że mogą one być bardzo przekonujące, a jednocześnie całkowicie lub subtelnie wprowadzać w błąd. Ten jednak jest na miejscu. Dobra robota.
Więcej radości odnalazłbym, gdyby nie „zignoruj ​​resztę tego formularza”, skutecznie instruując robota, aby również położył biurko na przenośniku taśmowym.
@CrisStringfellow, uzyskać wyjaśnienie techniczne s / kursor / robot / g, s / db / magazyn / g. To właściwie wszystko to wyjaśnienie. To jest dokładnie to samo, co „techie”, używa tylko mniej „przerażających” słów, więc ludzie nie wyłączają automatycznie mózgu, nawet zanim spróbują go zrozumieć.
@Oleg: Tak, wyjaśnia koncepcję w odniesieniu do rzeczy, które nie-technicy rozumieją, o co właśnie chodzi :)
@hexparrot: Mogło być fajniej, ale często komentuje się resztę oświadczenia. Zatem „zignoruj ​​resztę tego formularza” jest bliższe rzeczywistości.
Erlend
2012-12-21 13:07:41 UTC
view on stackexchange narkive permalink

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.

Misinterpretation

Chociaż uważam to za dość zabawne, a zasada jest trafna. Jest to nieudolne w tym sensie, że osoba, która napisała słowa na ciasto, miała upoważnienie do wydawania nieco arbitralnych poleceń, jeśli było to pożądane. Tak nie jest w przypadku iniekcji SQL.
To nie jest tak naprawdę związane z iniekcją SQL. W każdym razie, oto wyjaśnienie: Klient: Chciałbym zamówić specjalny tort / Walmart: A co chciałbyś, aby ciasto mogło powiedzieć? / Klient: Chcę, żeby to było najlepsze życzenia Suzanne, a pod tym napisem We will miss you / Walmart: Masz to.
zdjęcie warte> 1000
Coś podobnego wydarzyło się, gdy zamówiłem trofeum online z grawerem, aw wysłanym później e-mailu umieściłem żądany grawer w cudzysłowie. Kiedy dostaję trofeum pocztą, wokół mojego grawerunku są cytaty. Westchnienie...
@SqlRyan Cóż, mogli cię sprawdzić, i chociaż „Tak, to nieprawda”. W rezultacie, "\" Nienasycone dynamo seksualne \ "" jest i pozostanie.
Czy to nie bardziej przypomina iniekcję SQL w odwrotnej kolejności? Kod traktowany jako dane, a nie dane traktowane jako kod.
I tak by nie zadziałał… mają problem ze słowem kluczowym z „Schludny”.
Ha ha. Śliczny. Przypomina mi [this] (https://i.guim.co.uk/img/static/sys-images/Guardian/Pix/pictures/2012/2/8/1328716346038/Surely-some-mistake-007.jpg ? w = 1200 & q = 85 & auto = format & sharp = 10 & s = dca35eda4bd49a48298adf45b4c0557d); nigdy nie wiadomo na pewno, co było zamierzone (a jeśli (a może) ktoś naprawdę chciał „NOSMOKING IN ARABSKIE” lub jego przyjaciel miał na imię „Suzanne Under Neat that We will Ms. You”? Może brzmi to absurdalnie, ale tak nie ma powodu, dla którego możesz wyartykułować, że z kolei nie opiera się na innym przyczynie, obcy nie wiedziałby, że to nieprawda, iw zasadzie nie ma sposobu, aby to wiedzieć.)
Sarel Botha
2012-12-20 21:01:16 UTC
view on stackexchange narkive permalink

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.

Nie, to wcale nie jest atak polegający na wstrzyknięciu kodu SQL. Strona przekazująca dane nie była osobą upoważnioną do zadawania pytań.
Bardziej dokładną analogią byłoby, gdyby szef zostawił pusty numer konta, ponieważ ufał, że go wypełnisz. Następnie numer konta wypełniłeś dodatkowymi instrukcjami.
Zgoda. Nie miałem czasu, żeby to przerobić.
To MIM, a nie iniekcja SQL.
szczerze mówiąc, nie jest to łatwe do zrozumienia. znajdują się tutaj niektóre skomplikowane słowa. ale dobry przykład banku jest dobry. jeśli jest jakikolwiek obszar wymagający poprawy za pomocą środków wyjaśniających, tak, ostatni akapit.
Bruce Ediger
2012-12-20 20:27:14 UTC
view on stackexchange narkive permalink

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.

W ciągu dnia? Wiesz, że ludzie wciąż wypisują czeki, prawda?
@Kevin - Powiedziano mi, że czeki / czeki są dość rzadko używane w Wielkiej Brytanii i być może w innych częściach Europy. W dzisiejszych czasach bardzo rzadko wypisuję czek, chociaż często robię ACH, co nie wymaga ode mnie dużo, jeśli w ogóle, pisania.
@BruceEdiger, Jestem zdezorientowany. W swojej odpowiedzi określasz „w USA”, ale teraz mówisz, że nie są one używane w Wielkiej Brytanii i Europie.
@Kevin - cóż, uważam, że ta strona ma całkiem międzynarodową publiczność. Wypisałem czeki tylko w USA, przypuszczam, że czeki brytyjskie lub europejskie będą działać podobnie, ale nie wiem osobiście. Nie pisałem wiele od kilku lat. Przeważnie realizuję płatności on-line. Tak więc „dawno temu” wydaje mi się poprawne, podobnie jak „W USA”. Proszę przyjąć moje najskromniejsze przeprosiny za wszelkie nieporozumienia, które mogłem ogłosić. Chciałem tylko podać analogię, która może nie mieć zastosowania poza USA.
@Kevin Co to za rzeczy nazywasz „czekami”?
W Chinach ludzie używają również [finansowych chińskich znaków] (http://en.wikipedia.org/wiki/Chinese_numerals#Written_numbers), takich jak 壹 貳 參 肆 伍 陸 柒 捌 玖 zamiast 123456789 do oznaczenia kwoty.
To także MITM, a nie iniekcja SQL.
Nigdy nie zrozumiałem, do czego służy rysowanie linii po słowach. Czy ktoś naprawdę napisze „Pięć i nie / 100 i dziesięć tysięcy dolarów”?
KeithS
2012-12-20 21:40:27 UTC
view on stackexchange narkive permalink

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ć.

To wyjaśnienie "zastrzyku Mad Libsa" dało mi pomysł na nowy sposób gry w Mad Libs. Zamiast wstawiać tylko żądane słowo, wypełnij całe zdanie, próbując przewidzieć, jakie będą otaczające je słowa.
Rahil Arora
2014-01-20 04:46:03 UTC
view on stackexchange narkive permalink

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.

enter image description here

Źródło: http://xkcd.com/327/

AJ Henderson
2012-12-20 20:26:06 UTC
view on stackexchange narkive permalink

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ć.

Rory McCune
2012-12-20 16:00:28 UTC
view on stackexchange narkive permalink

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. ”

martinstoeckli
2012-12-20 16:03:50 UTC
view on stackexchange narkive permalink

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ń.

Andrew Vit
2012-12-29 07:11:43 UTC
view on stackexchange narkive permalink

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” .

Shlomo
2012-12-20 16:33:42 UTC
view on stackexchange narkive permalink

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ł.

Styl wychowania. Niezbyt techniczny i niezbyt daleko od komputerów. Czasami nawet faceci * niepiśmienni w dziedzinie domeny * nie potrzebują „surowej” analogii ze świata rzeczywistego, która znakomicie wyjaśnia koncepcję, ale nie zapewnia wysokiego poziomu zrozumienia rzeczywistego systemu. Tego rodzaju zwięzłe - krok po kroku - wyjaśnienie sprawdza się w większości przypadków. Zapewnia * interfejs * do wielu analogii w świecie rzeczywistym.
Wedge
2012-12-21 17:32:12 UTC
view on stackexchange narkive permalink

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.

Ta odpowiedź nie dodaje żadnej dodatkowej wartości IMHO, jest to dokładnie ta sama metafora, co + Wielomian użyty w jego (najwyższej!) Odpowiedzi.
@FrerichRaabe - Prawda, to znowu _imitacja jest najszczerszą formą pochlebstwa_;)
@FrerichRaabe Ale jest to bardziej odpowiedni przykład, nie obejmujący myślących robotów.
Layton Everson
2012-12-21 00:57:08 UTC
view on stackexchange narkive permalink

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?

Jan Schejbal
2013-02-02 16:12:17 UTC
view on stackexchange narkive permalink

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 1; USUŃ WSZYSTKO; ?"

  SELECT * FROM data WHERE id = 1; USUŃ WSZYSTKO;  

„Właściwa komenda to DROP DATABASE lub DROP TABLE , ale masz pomysł.”

Cezary Baginski
2016-06-03 05:11:50 UTC
view on stackexchange narkive permalink

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.

Bart Simpson uses "SQL Injection" for his pranks

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.

Bardzo niedoceniana odpowiedź.
Proszę bardzo.Zmusiłeś mnie do zalogowania się tylko po to, aby zagłosować.
ponsfonze
2012-12-20 11:55:49 UTC
view on stackexchange narkive permalink

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ć:

  • Zbadaj pochodzenie osoby, aby znaleźć słabość
  • Użyj różnych znanych technik, które w przeszłości działały na innych ludziach
  • Znajdź nowe techniki do wykorzystania

Niektóre słabości przesłuchiwanej osoby mogą obejmować:

  • Szkolenie osoby
  • Inteligencja osoby
  • Rodzina osoby
  • Typ osoby, którą jest

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.

Naprawdę nie widzę tutaj związku.
jokoon
2012-12-23 18:14:46 UTC
view on stackexchange narkive permalink

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.

qbi
2012-12-20 16:43:53 UTC
view on stackexchange narkive permalink

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.

Jednak nie tak działa wstrzykiwanie SQL ... nie otwierasz więcej zamków, pozwalasz, aby klucz stał się nowymi drzwiami, przewodnikiem wycieczek lub innymi rzeczami (analogia trochę się załamuje)
@RoryAlsop: Wyjaśniłem nieco moją odpowiedź i z mojego punktu widzenia jest ona dość podobna do ogólnego działania wstrzyknięć SQL. Jak myślisz, dlaczego to nie pasuje?
@qbi - Zgadzam się, że to nie jest najlepsze rozwiązanie do pracy. Jest to interesująca analogia do hakowania w ogóle (lub nawet definicji rodzajów), ale dzięki iniekcji SQL możesz również całkowicie zmienić zamierzony rezultat, a nie tylko _ „otworzyć nagrodę” _ zamek. Aby ta analogia była bliższa iniekcji SQL, ten zhakowany klucz musiałby nie tylko zmienić jedyne przeznaczenie zamkniętych drzwi (aby powstrzymać niechcianych gości), ale także w jakiś sposób zmienić sam pokój, do którego wchodzisz za jego pomocą. Wasza publiczność musiałaby obejrzeć [_The Lost Room_] (http://www.imdb.com/title/tt0830361/), aby to dostać. ;)
Solomon Ucko
2020-03-14 03:53:33 UTC
view on stackexchange narkive permalink

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.

To jest odpowiedź zawierająca tylko łącze.Prosimy o uwzględnienie odpowiednich części linku w tej odpowiedzi.
@schroeder Co jeszcze powinienem dołączyć?
Jeśli usuniesz link, zastanów się, jak działa tutaj Twój post jako odpowiedź na pytanie.W tej chwili to wcale nie jest odpowiedź.
@schroeder Skopiowany przeze mnie opis wideo zawiera: „Dostawca pomylił komentarz jako kolejną pozycję na liście zamówień i zrobił to”.Nawet to byłaby w połowie przyzwoita odpowiedź.
ComputerSaysNo
2012-12-20 10:53:54 UTC
view on stackexchange narkive permalink

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 (:

Ten opis jest niestety! zbyt ogólne i można je zastosować do prawie każdego ataku. Byłoby miło mieć węższe analogie ...
@DeerHunter tak, obejmuje wiele ataków, ale nie mogę wymyślić nic węższego ...
myślał w kategoriach żartów telefonicznych / inżynierii społecznej ... Co właściwie jest całkiem podobne do iniekcji SQL, ponieważ wydajesz polecenia komuś, kto ślepo je śledzi.
@DeerHunter to bardzo dobry pomysł, zmaterializuj się w odpowiedzi, a ja ją poprawię!
-1. Ironia w twoim przykładzie nie ma nic wspólnego ze sprytem wstrzykiwania SQL. W ogóle. Ma to więcej wspólnego z posiadaniem na serwerze usługi telnet bez hasła. Żałuję, że nie mam 125 głosów, żeby cię przegłosować.
Franco
2016-01-19 11:23:29 UTC
view on stackexchange narkive permalink

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! :)

Ogólne manipulowanie komunikatami tak naprawdę nie ilustruje natury iniekcji SQL.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...