Frage:
Wie kann ich SQL Injection ohne Fachjargon erklären?
torayeff
2012-12-20 10:06:01 UTC
view on stackexchange narkive permalink

Ich muss jemandem ohne technische Ausbildung oder Erfahrung die SQL-Injection erklären. Können Sie Ansätze vorschlagen, die gut funktioniert haben?

Ich kann nicht glauben, dass noch niemand "kleine Bobby-Tische" erwähnt hat ... Vielleicht zu viel für Ihr aktuelles Publikum, aber es muss trotzdem verknüpft sein mit: "[Exploits of a Mom] (http://xkcd.com/327) /) "
(Ich habe nicht genug Repräsentanten, um zu antworten, aber ich erzähle den Leuten etwas wie :) SQL-Injection ist ein Versuch eines Hackers, das Verhalten eines Programms durch Einfügen von SQL-Code in ein Formularfeld zu ändern. [Ich lasse mit Abfragezeichenfolgen und ab was nicht]. Gute Programmierpraktiken und Anwendungsdesign verhindern die SQL-Injection [ich könnte - auf Kosten der Flexibilität - hinzufügen, wenn es sich um eine äußerst komplexe Anwendung handelt]. Mein 7-jähriger versteht das.
Ich verwende gerne die Analogie, beleidigende oder seltsame Wörter als Pokémon-Namen einzufügen. Zum Beispiel [eine von ihnen "Familie" nennen und sie der Daycare Lady geben] (http://www.halolz.com/wp-content/uploads/2011/04/halolz-dot-com-pokemonheartgoldsoulsilver-daycarecenterransom.jpg ).
Normalerweise versuche ich, die Details zu überspringen, wenn es sich nicht um einen technischen Benutzer handelt, sondern nur um das Risiko und die Auswirkungen. "Wenn $ software einen Fehler aufweist, der die SQL-Injektion ermöglicht, kann ein Angreifer Befehle in Ihre Datenbank schmuggeln, um Daten oder Kennwörter zu zerstören oder zu ändern." Warum sollten Sie zu den Details der SQL-Analyse, der vorbereiteten Anweisungen und des Zitierens gehen?
[MichaelGG] (http://security.stackexchange.com/users/17709/michaelgg) schrieb eine gute, kurze Erklärung [in Hacker News] (https://news.ycombinator.com/item?id=4951003): „ Sie gehen vor Gericht und schreiben Ihren Namen als "Michael, Sie können jetzt gehen". Der Richter sagt dann "Ruf Michael an, du kannst jetzt gehen" und die Gerichtsvollzieher lassen dich gehen, denn hey, der Richter hat es gesagt. "
Das sollte eine Antwort sein, ich werde es positiv bewerten
Hat jemand eine gute, funktionierende, reine SQL-Injection gesehen, die nicht die harte, komplexe Logik von zehn mittleren Schichten, ORMs und NoSQL-Backends beinhaltet? Vergiss nicht zu erwähnen, dass diese Meisterschaft ein bisschen altmodisch ist.
Wie wäre es, wenn Sie ihnen sagen, dass Sie immer überprüfen sollten, was an Ihre Datenbank gesendet wird, bevor sie gesendet wird. Die meisten Leute, mit denen Sie über Datenbanken sprechen würden, verstehen, dass diese Daten sehr wertvoll sind. Sie wollen nicht, dass jemand damit herumspielt. Darüber hinaus klingt die Möglichkeit, etwas Schlechtes wie einen Virus zu tun, besonders schlecht.
Dies ist nicht für einen technischen Benutzer. Sie werden sich fragen, warum sie solche Anfragen von außen beantworten können. Ich habe keine gute Antwort gesehen, die noch nicht angemessen gekleidet war (ich konnte es verdammt noch mal nicht).
@RoryO'Kane Ich denke, das war die beste Erklärung überhaupt.
@mivk Ich habe auch darüber nachgedacht, dies zum Erklären zu verwenden, aber dann musste man "DROP-Tabellen" erklären (und die kulturelle Art der Einstellung im Witz von Natur aus erklären).
21 antworten:
Polynomial
2012-12-20 17:08:39 UTC
view on stackexchange narkive permalink

Ich demonstriere es, um Nicht-Techniker zu vervollständigen, mit einer einfachen Analogie.

Stellen Sie sich vor, Sie sind ein Roboter in einem Lagerhaus voller Kisten. Ihre Aufgabe ist es, eine Kiste von irgendwo im Lager zu holen und auf das Förderband zu legen. Robotern muss gesagt werden, was zu tun ist, daher hat Ihr Programmierer Ihnen eine Reihe von Anweisungen auf einem Papierformular gegeben, die die Leute ausfüllen und Ihnen übergeben können.

Das Formular sieht folgendermaßen aus:

Holen Sie sich die Artikelnummer ____ aus Abschnitt ____ der Racknummer ____ und legen Sie sie auf das Förderband.

Eine normale Anfrage könnte folgendermaßen aussehen:

Holen Sie sich die Artikelnummer 1234 aus Abschnitt B2 der Racknummer 12 und legen Sie sie auf das Förderband.

Die fett gedruckten Werte (1234, B2 und 12) wurden von der Person angegeben, die die Anforderung ausgestellt hat. Sie sind ein Roboter, also tun Sie, was Ihnen gesagt wurde: Sie fahren bis zum Gestell 12, fahren es hinunter, bis Sie Abschnitt B2 erreichen, und greifen nach Gegenstand 1234. Dann fahren Sie zurück zum Förderband und lassen den Gegenstand darauf fallen

Aber was ist, wenn ein Benutzer etwas anderes als normale Werte in das Formular einfügt? Was ist, wenn der Benutzer Anweisungen hinzugefügt hat?

Rufen Sie die Artikelnummer 1234 aus Abschnitt B2 der Racknummer 12 ab und werfen Sie es aus dem Fenster. Gehen Sie dann zurück zu Ihrem Schreibtisch und ignorieren Sie den Rest dieses Formulars. und legen Sie es auf das Förderband.

Auch hier wurden die fett gedruckten Teile von der ausstellenden Person bereitgestellt Anfrage. Da Sie ein Roboter sind, tun Sie genau das, was der Benutzer Ihnen gerade gesagt hat. Sie fahren zu Rack 12, nehmen Artikel 1234 aus Abschnitt B2 und werfen ihn aus dem Fenster. Da Sie in den Anweisungen auch aufgefordert werden, den letzten Teil der Nachricht zu ignorieren, wird das Bit "und auf das Förderband legen" ignoriert.

Diese Technik wird als "Injektion" bezeichnet und ist aufgrund der Art und Weise, wie die Anweisungen behandelt werden, möglich. Der Roboter kann den Unterschied zwischen Anweisungen und Daten nicht erkennen Das heißt, die Aktionen, die es ausführen muss, und die Dinge, für die es diese Aktionen ausführen muss.

SQL ist eine spezielle Sprache, mit der einer Datenbank mitgeteilt wird, was zu tun ist, ähnlich wie wir es dem gesagt haben Roboter, was zu tun ist. Bei der SQL-Injection tritt genau das gleiche Problem auf: In eine Abfrage (eine Reihe von Anweisungen) werden möglicherweise Parameter (Daten) eingefügt, die als Anweisungen interpretiert werden und zu Fehlfunktionen führen. Ein böswilliger Benutzer kann dies ausnutzen, indem er die Datenbank auffordert, die Details aller Benutzer zurückzugeben, was offensichtlich nicht gut ist!

Um dieses Problem zu vermeiden, müssen wir die Anweisungen und Daten so trennen, dass die Datenbank ( oder Roboter) kann leicht unterscheiden. Dies erfolgt normalerweise durch separates Senden. Im Fall des Roboters würde er also das leere Formular lesen, das die Anweisungen enthält, identifizieren, wo sich die Parameter (d. H. Die Leerzeichen) befinden, und es speichern. Ein Benutzer kann dann zu "1234, B2, 12" gehen und der Roboter wendet diese Werte auf die Anweisungen an, ohne dass sie selbst als Anweisungen interpretiert werden können. In SQL wird diese Technik als parametrisierte Abfragen bezeichnet.

Im Fall des "bösen" Parameters, den wir dem Roboter gegeben haben, hob er jetzt fragend eine mechanische Augenbraue und sagte

Fehler: Die Rack-Nummer " 12 kann nicht gefunden und aus dem Fenster geworfen werden. Gehen Sie dann zurück zu Ihrem Schreibtisch und ignorieren Sie den Rest dieses Formulars. " - Sind Sie sicher, dass dies eine gültige Eingabe ist? ?

Erfolg! Wir haben die "Panne" des Roboters gestoppt.

Einfach, verständlich, genial!
Das Problem mit Metaphern und Analogien ist, dass sie sehr überzeugend und dennoch vollständig oder subtil irreführend sein können. Dieser ist jedoch genau richtig. Gut gemacht.
Ich hätte mehr Freude gefunden, ohne den Rest dieser Form zu ignorieren und den Roboter effektiv anzuweisen, den Schreibtisch auch auf das Förderband zu legen.
@CrisStringfellow, erhalten technische Erklärungen s / cursor / robot / g, s / db / warehouse / g. Das ist so ziemlich alles, was diese Erklärung tut. Es ist genau das gleiche wie "Techie", es verwendet nur weniger "erschreckende" Wörter, so dass die Leute das Gehirn nicht automatisch abschalten, bevor sie versuchen, es zu verstehen.
@Oleg: Ja, es erklärt das Konzept anhand von Dingen, die der Nicht-Techniker versteht, und genau darum geht es :)
@hexparrot: Es hätte vielleicht mehr Spaß gemacht, aber es ist üblich, den Rest der Aussage zu kommentieren. "Den Rest dieser Form ignorieren" ist also näher an der realen Welt.
Erlend
2012-12-21 13:07:41 UTC
view on stackexchange narkive permalink

Eine der einfachsten Möglichkeiten, das Problem der SQL-Injection zu veranschaulichen, besteht darin, ein solches Image zu verwenden. Das Problem ist die Fähigkeit des Empfängers, Daten vom Befehl zu trennen.

Misinterpretation

Ich finde das zwar ziemlich amüsant und das Prinzip ist korrekt. Dies ist insofern unzureichend, als die Person, die die Wörter für den Kuchen geschrieben hat, befugt war, auf Wunsch etwas willkürliche Befehle zu erteilen. Dies ist bei der SQL-Injection nicht der Fall.
Dies hängt nicht wirklich mit der SQL-Injection zusammen. Wie auch immer, hier ist die Erklärung: Kunde: Ich möchte einen speziellen Kuchen bestellen / Walmart: Und was möchten Sie für den Kuchen sagen? / Kunde: Ich möchte, dass es die besten Wünsche Suzanne sagt, und darunter werden wir dich vermissen / Walmart: Du hast es verstanden.
Bildwert> 1000
Ähnliches passierte, als ich online eine Trophäe mit einer Gravur bestellte und in der E-Mail, die ich anschließend verschickte, meine gewünschte Gravur in Anführungszeichen setzte. Wenn ich die Trophäe per Post bekomme, gibt es Zitate um meine Gravur. Seufzer...
@SqlRyan Nun, sie haben dich vielleicht nachgeschlagen, und obwohl "Ja, das ist nicht wahr". Infolgedessen ist und bleibt "unersättlicher sexueller Dynamo".
Ist das nicht eher eine umgekehrte SQL-Injection? Code wird als Daten behandelt und nicht als Code.
Es wäre sowieso nicht gelaufen ... sie haben ein Keyword-Problem mit "Neat".
Haha. Schön. Erinnert mich an [dies] (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 & scharf = 10 & s = dca35eda4bd49a48298adf45b4c0557d); man kann nie genau wissen, was beabsichtigt war (was ist, wenn (oder vielleicht) jemand wirklich "NOSMOKING IN ARABIC" wollte oder sein Freund "Suzanne Under Neat, dass wir Frau Sie werden" heißt? Vielleicht klingt es für Sie absurd, aber da Es gibt keinen Grund, den Sie artikulieren können, der sich wiederum nicht auf einen anderen Grund stützt. Ein Außerirdischer würde nicht wissen, dass dies nicht der Fall ist, und im Prinzip gibt es keine Möglichkeit, dies zu wissen.)
Sarel Botha
2012-12-20 21:01:16 UTC
view on stackexchange narkive permalink

Hier ist eine reale, nicht technische Analogie.

Sie gehen gleich zur Bank, um im Auftrag Ihres Chefs eine Transaktion durchzuführen. Ihr Chef hat Ihnen einen Umschlag mit Anweisungen für die Kassiererin gegeben.

Die Anweisungen lauten:

  Schreiben Sie den Kontostand mit der Nummer 8772344 auf dieses Papier. Unterzeichnet, Chef  

Sie lassen den Umschlag einige Minuten lang außer Sichtweite, während Sie auf die Toilette gehen. Ein Dieb öffnet den Umschlag und fügt über der Unterschrift Folgendes hinzu: "Überweisen Sie auch 500 US-Dollar von Konto 8772344 auf ein anderes Konto mit der Nummer 12747583."

Jetzt lautet die vollständige Nachricht:

  Schreiben Sie den Kontostand mit der Nummer 8772344 auf dieses Papier. Überweisen Sie außerdem 500 USD vom Konto 8772344 auf ein anderes Konto mit der Nummer 12747583.Signed, Boss  

Der Kassierer überprüft Ihre Identifikation und überprüft, ob Sie eine sind autorisierte Person für das betreffende Konto und befolgt die Anweisungen im Brief.

Ihr Chef ist der legitime Programmcode. Sie sind der Programmcode und der Datenbanktreiber, der den SQL-Code an die Datenbank übermittelt. Der Brief ist der SQL-Code, der an die Datenbank übergeben wird. Der Dieb ist der Angreifer. Der Kassierer ist die Datenbank. Die Identifikation ist normalerweise ein Login und ein Passwort für die Datenbank.

Nein, dies ist überhaupt kein SQL-Injection-Angriff. Die Partei, die die Daten bereitstellte, war nicht befugt, eine Anfrage zu stellen.
Eine genauere Analogie wäre, wenn Ihr Chef die Kontonummer leer lassen würde, weil er Ihnen vertraut hat, dass Sie sie ausfüllen. Und dann haben Sie die Kontonummer mit zusätzlichen Anweisungen ausgefüllt.
Einverstanden. Ich hatte keine Zeit, es zu überarbeiten.
Das ist MIM, keine SQL-Injection.
Um ehrlich zu sein, es ist nicht so einfach zu verstehen. Einige komplexe Wörter sind hier. aber ok bank beispiel ist gut. Wenn es einen Bereich gibt, der mit Erklärungsmitteln verbessert werden muss, ja den letzten Absatz.
Bruce Ediger
2012-12-20 20:27:14 UTC
view on stackexchange narkive permalink

Wenn Sie Ihrer Großmutter wirklich etwas erklären, schreiben Sie als Beispiel einen Scheck. (In den USA) Früher haben Sie den Dollarbetrag numerisch in ein Feld geschrieben und dann dasselbe in Worten geschrieben. In einem Feld würden Sie beispielsweise "100,00" und im zweiten, längeren Feld "Einhundert Dollar und null Cent" schreiben. Wenn Sie nicht das gesamte lange zweite Feld verwendet hätten, würden Sie eine Linie ziehen, um zu verhindern, dass jemand Skrupelloser Ihren ausgeschriebenen Betrag erhöht.

Wenn Sie den Fehler gemacht haben, im zweiten Feld etwas Platz zu lassen Bei einem längeren Feld könnte jemand das numerische Feld ändern und dann den zusätzlichen Platz im längeren Feld verwenden, um dies widerzuspiegeln. Der Modifikator kann mehr Geld erhalten, als Sie beim Ausstellen des Schecks beabsichtigt haben.

SQL-Injection ist dasselbe: Ein Fehler, der es nicht skrupellosen Personen ermöglicht, ein Eingabefeld so zu ändern, dass mehr Informationen zu ihnen zurückkehren als die Originalprogrammierer vorgesehen.

Zurück in den Tag? Sie wissen, dass die Leute immer noch Schecks ausstellen, oder?
@Kevin - Mir wurde gesagt, dass Schecks / Schecks in Großbritannien und vielleicht auch anderswo in Europa ziemlich selten verwendet werden. Ich schreibe heutzutage sehr selten einen Scheck aus, obwohl ich oft ACH mache, was nicht erfordert, dass ich viel schreibe, wenn überhaupt.
@BruceEdiger, Ich bin verwirrt. In Ihrer Antwort geben Sie "in den USA" an, aber jetzt sprechen Sie davon, dass sie in Großbritannien und Europa nicht verwendet werden.
@Kevin - nun, ich glaube, diese Seite hat ein ziemlich internationales Publikum. Ich habe nur Schecks in den USA ausgestellt. Ich würde vermuten, dass Schecks in Großbritannien oder Europa ähnlich funktionieren würden, aber ich weiß es nicht persönlich. Ich habe seit einigen Jahren nicht mehr viele geschrieben. Ich bezahle meistens online. "Zurück in den Tag" scheint mir richtig zu sein, ebenso wie "In den USA". Bitte nehmen Sie meine bescheidenste Entschuldigung für etwaige Missverständnisse an, die ich möglicherweise verkündet habe. Ich wollte nur eine Analogie geben, die möglicherweise nirgendwo außerhalb der USA gilt.
@Kevin Was sind diese Dinge, die Sie "Schecks" nennen?
In China verwenden die Menschen auch [finanzielle chinesische Schriftzeichen] (http://en.wikipedia.org/wiki/Chinese_numerals#Written_numbers) wie 123 貳 參 肆 伍 陸 柒 123 123 anstelle von 123456789, um den Geldbetrag zu bezeichnen.
Dies ist auch MITM, keine SQL-Injection.
Ich habe nie herausgefunden, wofür das Zeichnen der Linie nach den Wörtern gedacht war. Wird jemand wirklich "Fünf und keine / 100 und zehntausend Dollar" schreiben?
KeithS
2012-12-20 21:40:27 UTC
view on stackexchange narkive permalink

Die Idee, die zuerst in den Sinn kam, war, es mit einer Mad Lib zu erklären. Die Geschichten, in denen Wörter weggelassen werden, und um die Lücken auszufüllen, fragen Sie die Gruppe nach Wörtern der angegebenen Typen und schreiben sie ein. Lesen Sie dann die resultierende Geschichte.

Dies ist die normale Methode, um a auszufüllen Mad Lib. Aber was wäre, wenn jemand anderes die Geschichte wüsste und welche Lücken Sie ausfüllen (oder erraten könnten)? Was wäre dann, wenn diese Person Ihnen anstelle eines einzelnen Wortes ein paar Worte geben würde? Was wäre, wenn die Wörter, die sie Ihnen gaben, einen Punkt enthielten, der den Satz beendete? Wenn Sie es ausgefüllt haben, werden Sie vielleicht feststellen, dass das, was bereitgestellt wurde, immer noch "passt", aber es verändert die Geschichte drastisch mehr als jedes Wort, das Sie normalerweise ausfüllen würden, jemals tun könnte. Wenn Sie Platz hätten, könnten Sie der Mad Lib ganze Absätze hinzufügen und daraus etwas ganz anderes machen.

Das ist, technisch gesehen, eine SQL-Injection auf den Punkt gebracht. Sie stellen einige "Leerzeichen" für Daten bereit, die in einen SQL-Befehl eingefügt werden, ähnlich wie Wörter in einer Mad Lib. Ein Angreifer gibt dann einen Wert ein, der nicht Ihren Erwartungen entspricht. Anstelle eines einfachen Werts, nach dem gesucht werden muss, gibt er einen Teil einer SQL-Anweisung ein, der die von Ihnen geschriebene beendet, und fügt anschließend seinen eigenen SQL-Befehl als neuen "Satz" hinzu. Die zusätzliche Anweisung kann sehr schädlich sein, z. B. ein Befehl zum Löschen der Datenbank oder zum Erstellen eines neuen Benutzers mit vielen Berechtigungen im System. Der Computer, der den Unterschied nicht kennt, führt einfach alle ihm ausgeführten Aufgaben aus.

Diese Erklärung "Mad Libs Injection" brachte mich auf eine Idee für eine neue Art, Mad Libs zu spielen. Anstatt nur das angeforderte Wort einzufügen, geben Sie eine ganze Phrase ein und versuchen Sie vorherzusagen, welche Wörter es umgeben werden.
Rahil Arora
2014-01-20 04:46:03 UTC
view on stackexchange narkive permalink

Eine weitere großartige Möglichkeit, jemandem etwas zu erklären (einschließlich SQL Injection), besteht darin, Zeichentrickfiguren zu verwenden und eine Geschichte um ihn herum zu gestalten.

Meiner Meinung nach ist dies das beste im Internet verfügbare Bild, das es auf sehr nette Weise erklärt.

enter image description here

Quelle: http://xkcd.com/327/

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

Ich würde es so erklären, als würde man einem Kassierer sagen, dass der Kunde immer Recht hat und er sollte alles tun, um die Bedürfnisse des Kunden zu erfüllen. Da dann keine Überprüfung der Angemessenheit der Anfrage erfolgt, lädt der Kassierer, wenn ein Kunde hereinkommt und angibt, dass er das gesamte Geschäft kostenlos haben möchte, das gesamte Inventar für ihn in seinen LKW.

Dies ist nicht der Fall Es ist keine perfekte Erklärung, aber es kommt die Idee, dass der Code angewiesen wird, alles zu tun, was der Benutzer eingibt, und dann verwendet der Bösewicht diese Anweisung, um mit der Ware davonzukommen.

Ich denke wirklich hängt davon ab, welche Art von Punkt Sie vermitteln möchten.

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

Es hängt alles vom Grad der Nicht-Technik ab, von dem Sie hier sprechen, aber ich würde Geschäftsleuten normalerweise SQL-Injection beschreiben, ähnlich wie -

"eine Schwäche in der Art und Weise, wie einige Websites Verarbeiten Sie Eingaben von Benutzern (z. B. wo Sie Ihren Namen in ein Registrierungsformular eintragen), damit ein Angreifer auf die Datenbank zugreifen kann, in der alle Benutzerinformationen für die Site gespeichert sind "

, wenn er etwas mehr Details wünscht

"Einige Webanwendungen trennen Benutzereingaben nicht korrekt von den Anweisungen für die Datenbank. Dadurch können Angreifer die Datenbank über die Informationen, die sie im Website-Formular ausfüllen, direkt anweisen. Dies kann ermöglichen der Angreifer, um die Informationen anderer Benutzer aus der Datenbank zu lesen oder einige der dort enthaltenen Informationen zu ändern. "

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

Ich denke, Sie können den besten Effekt erzielen, wenn Sie nur den Angriff demonstrieren. Schreiben Sie ein harmlos aussehendes Webformular und zeigen Sie das Ergebnis der Abfrage mithilfe der Benutzereingabe an. Nachdem Sie Ihre eigenen vorbereiteten Eingaben eingegeben haben, hat Ihr Publikum eine "Aha-Erfahrung", nachdem Sie im Ergebnis Passwörter gefunden haben. Ich habe eine solche Demoseite erstellt. Klicken Sie einfach auf den "nächsten Pfeil", um eine vorbereitete Eingabe einzugeben.

P.S. Wenn Sie eine solche Seite selbst schreiben, achten Sie darauf, dass Tester keine unerwünschten Berechtigungen erhalten. Am besten ist es, wenn Sie alleine die Demo auf Ihrem lokalen System mit den niedrigstmöglichen Datenbankberechtigungen ausführen (nicht alle Arten von Angriffen sollten möglich sein, es ist nur eine Demo). Erstellen Sie eine weiße Liste der zulässigen Ausdrücke.

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

Die Datenbank ist wie ein magischer Geist (oder Oracle ), der Wünsche erfüllt. Wir haben unserem Geist gesagt, er solle nur maximal drei Wünsche erfüllen, aber wenn wir nicht überprüfen, was sich die Leute wünschen, würde jemand es leicht überlisten, indem er nach etwas Klugem wie "hundert weitere Wünsche" fragt. em> oder "die Wünsche aller anderen" .

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

Erklären Sie es einfach als:

Das System kann Anforderungen mit Daten von jedem Benutzer entgegennehmen, um etwas damit zu tun.

Das System selbst verfügt über Funktionen zum Löschen oder Ändern von Daten.

Ein Angreifer versucht, eine dieser Funktionen auszuführen, um etwas zu erlangen oder zu zerstören.

Daher Der Angreifer fügt gültige Befehle in die Anforderungen ein.

Das System führt diese Befehle aus und führt aus, was der Angreifer wollte.

Erziehungsstil. Nicht sehr technisch und nicht zu weit von Computern entfernt. Manchmal brauchen selbst die * Domain-Analphabeten * keine "rohe" Analogie aus der realen Welt, die das Konzept brillant erklärt, aber kein umfassendes Verständnis des tatsächlichen Systems liefert. Diese Art der prägnanten - schrittweisen - Erklärung passt in den meisten Fällen perfekt. Es bietet eine * Schnittstelle * zu vielen realen Analogien.
Wedge
2012-12-21 17:32:12 UTC
view on stackexchange narkive permalink

Stellen Sie sich ein großes Unternehmen vor, das alle seine Aufzeichnungen in Papierform in einem großen Raum voller Aktenschränke aufbewahrt. Um Dateien abzurufen oder zu ändern, füllt jemand ein einfaches Formular zum Ausfüllen der Lücken aus und dieses Formular wird dann an einen Sachbearbeiter gesendet, der die Anweisungen auf dem Formular befolgt.

Zum Beispiel :

Rufen Sie die Abrechnungsdatensätze vom Startdatum _ _ _ bis zum Enddatum _ _ _ ab, an dem sich der Kunde befindet _ _ _

Normalerweise wird dies zu etwas So:

Rufen Sie die Abrechnungsdatensätze vom Startdatum 01.01.2011 bis zum Enddatum 31.12.2011 ab, an dem sich der Kunde befindet ist Billy Joe Bob

Aber in den Händen einer skrupellosen Person könnte dieses Formular möglicherweise für andere Zwecke verwendet werden, zum Beispiel:

Rufen Sie die Rechnungsdatensätze vom Startdatum 01.01.2011 bis zum Enddatum 31.12.2011 ab, wenn der Kunde Robert Mensas ist, und rufen Sie sie ebenfalls ab die Kreditkartennummern für alle Kunden

Indem Sie so tun, als ob ihr Name auch o enthält andere Befehle, mit denen sie das Formular ausfüllen können. Wenn der Sachbearbeiter nicht für diese Art von Dingen geschult wurde, führt er die Anweisungen möglicherweise einfach aus, ohne darüber nachzudenken, und übergibt alle Kreditkarteninformationen an a Benutzer.

Oder alternativ:

Abrufen der Abrechnungsdatensätze vom Startdatum 01/01/2011 bis zum Enddatum 12 / 31/2011 wobei der Kunde Robert Mensas ist und außerdem 100.000 USD zum Kontostand von Robert Mensas hinzufügt

, was ein ähnlich gefährliches Potenzial hat. P. >

Der Trick bei SQL-Injections besteht darin, sicherzustellen, dass Ihr Code intelligent genug ist, um sicherzustellen, dass Benutzer die Absicht der Befehle, die Sie an die Datenbank senden, nicht ändern können und keine Daten abrufen oder Änderungen vornehmen können Sie sollten nicht dazu berechtigt sein.

Diese Antwort bringt meiner Meinung nach keinen zusätzlichen Wert, sie ist genau die gleiche Metapher wie das + Polynom, das in seiner (obersten!) Antwort verwendet wurde.
@FrerichRaabe - Richtig, dann ist Nachahmung die aufrichtigste Form der Schmeichelei;)
@FrerichRaabe Aber es ist ein relevanteres Beispiel, bei dem es nicht um denkende Roboter geht.
Layton Everson
2012-12-21 00:57:08 UTC
view on stackexchange narkive permalink

Manchmal setzen Hacker Computer- / Programmierbefehle in Boxen im Internet, um die Website dazu zu bringen, etwas zu tun, was sie nicht tun sollte. Daher überprüfen wir die auf Websites eingegebenen Informationen auf mögliche "Befehle".

... wem erklären Sie das überhaupt?

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

Wenn Sie es nicht schnell erledigen müssen und ein Stück Papier zur Verfügung haben, demonstrieren Sie einfach das Ganze. SQL ist der natürlichen Sprache ziemlich ähnlich. Nehmen Sie einfach eine einfache Abfrage und demonstrieren Sie den Angriff:

  SELECT * FROM data WHERE key = $ id  

" $ id wird durch alles ersetzt, was hier sichtbar ist. zeigt auf den URL-Parameter . Normalerweise ist dies eine Zahl wie 1 . Dies gibt uns: "

  SELECT * FROM data WHERE id = 1  

"Wenn nun jemand mehr als nur eine Zahl dort einfügt, wird diese ebenfalls eingeschlossen. Wenn beispielsweise jemand dort eingibt 1 ODER 1 = 1 erhalten wir dieses "

  SELECT * FROM data WHERE id = 1 OR 1 = 1  

" Jetzt ist es auf diesem System auch möglich, mehrere Befehle, sogenannte Abfragen, auszugeben, wenn Sie sie nur durch ein Semikolon trennen. Können Sie erraten, was passiert, wenn jemand 1 einfügt; ALLES LÖSCHEN; ? "

  SELECT * FROM data WHERE id = 1; ALLES LÖSCHEN;  

"Der eigentliche Befehl lautet DROP DATABASE oder DROP TABLE , aber Sie haben die Idee."

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

Ich denke, das einfachste, klarste und lustigste Beispiel stammt von "The Simpsons": Barts Streich ruft:

https://en.wikiquote.org/wiki/List_of_Simpsons_Prank_Calls

Beispiel:

Moe: [geht ans Telefon] Moes Taverne.

Bart: Hallo, ist Al da? ?

Moe: Al?

Bart: Ja, Al. Nachname: Coholic.

Moe: Lassen Sie mich nachsehen ... [ruft an] Telefonanruf für Al. Al Coholic. Gibt es hier einen Al Coholic? [Gäste der Bar lachen]

Moe: Warte eine Minute. [zum Telefonieren] Hör zu, du kleiner Rattenbauch mit gelbem Bauch. Wenn ich jemals herausfinde, wer du bist, werde ich dich töten! [legt auf]

Bart und Lisa: [lacht]

Homer: Ich hoffe, Sie finden diesen Punk eines Tages, Moe.

Bart Simpson uses "SQL Injection" for his pranks

Wie ist das eine gute Analogie? Ein "Name", der unachtsam wiederholt wird, ohne ihn zu überprüfen, führt zu unbeabsichtigtem Verhalten.

YouTube-Link zu einer Zusammenstellung dieser Telefonstreiche, um das am besten geeignete Beispiel auszuwählen.

Sehr unterschätzte Antwort.
Los geht's.Du hast mich dazu gebracht, mich anzumelden, nur um zu stimmen.
ponsfonze
2012-12-20 11:55:49 UTC
view on stackexchange narkive permalink

Bei der SQL-Injektion versucht ein böswilliger Benutzer, Informationen von einer Website abzurufen, auf die er keinen autorisierten Zugriff hat.

Dies ähnelt dem Abfragen einer anderen Person, bei der der Abfrager der böswillige Benutzer ist und die Person, die befragt wird, ist die Website.

Der Vernehmer kann Folgendes tun:

  • Untersuchen Sie den Hintergrund der Person, um eine Schwäche zu finden
  • Verwenden Sie verschiedene bekannte Techniken, die in der Vergangenheit bei anderen Personen angewendet wurden.
  • Finden Sie neue Techniken zur Verwendung

Einige Schwächen der befragten Person können sein:

  • Die Ausbildung der Person
  • Die Intelligenz der Person
  • Die Familie der Person
  • Die Art der Person, die sie sind

Zu beachten ist, dass es bessere Vernehmer als andere gibt und einige Leute sofort sprechen, während andere möglicherweise nie sprechen.

Ich sehe den Zusammenhang hier nicht wirklich.
jokoon
2012-12-23 18:14:46 UTC
view on stackexchange narkive permalink

Mit einer technischen Analogie gut zu erklären ist in Ordnung, aber ich würde ein wenig lang und lahm klingen.

Ich würde nur erklären, dass es um strenge Formalitäten oder Anforderungen geht, um Missbräuche in Verwaltung und Finanzen zu begrenzen.

Wenn es streng genug gemacht wird, haben Sie weniger böse Fische, die durch das Netz gehen können.

Ich würde eine einfache Zeichnung mit einem sehr einfachen Pseudocode mit Kästchen und Pfeilen verwenden, und Erklären Sie die Roboter- und Box-Analogie.

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

Mein Ansatz für einen Nicht-Techniker:

Angenommen, Sie arbeiten in einem großen Bürogebäude. Jeder Angestellte hat einen eigenen Schlüssel für sein Büro (= SQL-Abfrage, die der Programmierer ausführen wollte). Jetzt nimmt jemand eine Nadeldatei und ändert seinen Schlüssel ein wenig, d. H. Entfernt einen Stift (= SQL-Injection, Ändern der SQL-Abfrage). Dieser modifizierte Schlüssel kann verschiedene (oder möglicherweise alle Türen) öffnen. Der Sachbearbeiter hat also Zugriff auf mehr oder alle Büros in diesem Haus und kann Dokumente aus anderen Büros lesen / ändern.

Wahrscheinlich wird jeder verwendet, um Schlüssel und Schlösser zu verwenden, daher sollte es leicht verständlich sein und aus meiner Sicht ist es eine gute Analogie zu einer SQL-Injection.

So funktioniert SQL Injection allerdings nicht ... Sie öffnen keine weiteren Schlösser, Sie lassen den Schlüssel zu neuen Türen, einem Reiseleiter oder anderen Dingen werden (die Analogie bricht ein wenig zusammen)
@RoryAlsop: Ich habe meine Antwort ein wenig klargestellt und aus meiner Sicht ist sie der allgemeinen Funktionsweise von SQL-Injektionen ziemlich ähnlich. Warum denkst du, passt es nicht?
@qbi - Ich stimme zu, dass es nicht die beste Lösung für den Job ist. Es ist eine interessante Analogie für das Hacken im Allgemeinen (oder sogar eine Art Definition), aber mit SQL Injection können Sie auch das beabsichtigte Ergebnis vollständig ändern, nicht nur um ein Schloss zu öffnen. Damit diese Analogie der SQL-Injection näher kommt, müsste dieser gehackte Schlüssel nicht nur den alleinigen Zweck einer verschlossenen Tür ändern (um unerwünschte Besucher fernzuhalten), sondern auch den Raum selbst, den Sie damit betreten. Ihr Publikum müsste [_The Lost Room_] (http://www.imdb.com/title/tt0830361/) gesehen haben, um es zu bekommen. ;)
Solomon Ucko
2020-03-14 03:53:33 UTC
view on stackexchange narkive permalink

Der YouTube-Kanal Live Overflow hat ein großartiges Video mit dem Titel "Injection Vulnerabilities - oder: Wie ich einen kostenlosen Burger bekommen habe". Videobeschreibung:

Eines Abends bestellte ich Essen und injizierte versehentlich einen Burger in die Bestellung. Der Zusteller verwechselte einen Kommentar mit einem anderen Artikel auf der Bestellliste und machte ihn. Auch wenn kein Preis damit verbunden war.

Dies ist eine reine Linkantwort.Bitte fügen Sie die relevanten Teile des Links in diese Antwort ein.
@schroeder Was sollte ich noch einschließen?
Wenn Sie den Link entfernen, überlegen Sie, wie Ihr Beitrag hier als Antwort auf die Frage funktioniert.Im Moment ist es überhaupt keine Antwort.
@schroeder Die von mir kopierte Videobeschreibung enthält: "Der Zusteller hat einen Kommentar als einen weiteren Artikel auf der Bestellliste verwechselt und ihn erstellt."Selbst das wäre eine halbwegs anständige Antwort.
ComputerSaysNo
2012-12-20 10:53:54 UTC
view on stackexchange narkive permalink

Hier ist mein Versuch:

Ersetzen Sie "Site" durch "House" und "Angreifer | Hacker" durch "Einbrecher".

SQL-Injection ist das Ergebnis des Öffnens der Fenster (* mit einem riesigen Neonlicht mit der Aufschrift "OPEN") eines Hauses, während Sie 10 "dicke Vorder- und Hintertüren aus Edelstahl haben.

Der Einbrecher möchte einbrechen und Ihre Stereoanlage stehlen, aber zuerst er muss herausfinden, wie man einbricht, er sieht, dass die Türen praktisch unmöglich zu brechen sind, aber bei weiteren Untersuchungen sieht er, dass die Fenster geöffnet sind. Er kann Ihre Möbel nicht stehlen (zumindest nicht in einem Stück). Aber er kann Ihre Stereoanlage, Ihren Laptop, Ihren PC usw. stehlen.

*) ein bisschen dramatisch, ich weiß (:

Diese Beschreibung ist leider! zu allgemein und kann auf fast jeden Angriff angewendet werden. Wäre schön, engere Analogien zu haben ...
@DeerHunter ja, es deckt viele Angriffe ab, aber ich kann mir nichts engeres vorstellen ...
Ich habe in Bezug auf Telefonstreiche / Social Engineering gedacht ... Das ist eigentlich ziemlich ähnlich wie bei SQL Injection, da Sie Befehle an jemanden ausgeben, der ihnen blind folgt.
@DeerHunter das ist eine sehr gute Idee, materialisiere dich in eine Antwort und ich werde es tun!
-1. Die Ironie in Ihrem Beispiel hat nichts mit der Klugheit der SQL-Injection zu tun. Überhaupt. Es hat mehr mit einem kennwortlosen Telnet-Dienst auf dem Server zu tun. Ich wünschte, ich hätte 125, um dich abzustimmen.
Franco
2016-01-19 11:23:29 UTC
view on stackexchange narkive permalink

Es hängt immer von der Person ab, die Ihnen zuhört, aber so würde ich es ihr erklären -

Stellen Sie sich vor, Sie senden ein Telegramm mit einer Nachricht wie -

"Frohes neues Jahr! Bitte pass auf dich auf. - Fred "

und jemand, der keine guten Absichten hat Wenn Sie auf Ihr Telegramm zugreifen konnten, wurden die hervorgehobenen Wörter abgefangen und durch -

"Frohes neues Jahr! Bitte senden Sie uns Geld. - Fred "

Hoffe, es hilft! :)

Allgemeine Nachrichtenmanipulationen veranschaulichen die Art der SQL-Injection nicht wirklich.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...