Vor kurzem kamen Nachrichten heraus. Vier Mitarbeiter der Netzwerksicherheitsabteilung von Alibaba verwendeten Webseiten -Schwachstellen, um JS -Skripte zu schreiben, um Mooncakes zu greifen, damit sie fasziniert waren. Sie wollten wissen, wie man dieses JS -Skript schreibt und wie man verschiedene Bestellungen und Waffenbeschwerden implementiert.
Was ist ein JavaScript -Injektionsangriff?
1. Immer wenn der vom Benutzer eingegebene Inhalt und erneuert, ist die Website anfällig für JavaScript -Injektionsangriffe. Schauen wir uns eine bestimmte Anwendung an, die anfällig für JavaScript -Injektionsangriffe ist. Angenommen, eine Kundenfeedback -Website wurde erstellt. Kunden können die Website besuchen und Feedback -Informationen zum Produkt eingeben. Wenn ein Kunde Feedback einreicht, werden die Feedback -Informationen auf der Feedback -Seite wieder aufgenommen.
Kundenfeedback -Website ist eine einfache Website. Leider ist diese Website anfällig für JavaScript -Injektionsangriffe.
Angenommen, der folgende Text wird in das Kundenfeedback -Formular eingegeben:
<Script> alert (Angriff!) </script>
Dieser Text stellt ein JavaScript -Skript dar, das das Warnmeldungsfeld anzeigt. Nachdem jemand dieses Skript dem Kundenfeedback -Formular eingereicht hat, den Nachrichtenangriff! wird angezeigt, wenn jemand in Zukunft die Kundenfeedback -Website besucht.
2. Ein anderer Typ ist die Eingabe eines JS -Code -Stücks in die Browser -Adressleiste, um den Inhalt von Seite JS -Variablen und Seitenbezeichnungen zu ändern.
Mit der JavaScript -Injektion können Benutzer ihren Inhalt ändern, ohne Webseiten zu schließen oder zu speichern, die in der Adressleiste des Browsers durchgeführt werden. Die Syntax des Befehls lautet wie folgt:
JavaScript: Alert (#Befehl#)
Wenn Sie beispielsweise auf der Website http://www.example.com ein Warnungsfeld für Warnungen sehen möchten, geben Sie zuerst die URL in die Adressleiste ein und warten Sie, bis die Seite geladen wird. Löschen Sie die URL und geben Sie ein:
JavaScript: Alarm (Hallo Welt)
Als neue URL. Dadurch wird ein Hello World Warning -Box angezeigt und diese Technik verwendet, um fast alles auf einer Webseite zu ändern, z. B. ein Bild. Angenommen, es gibt ein Website -Logo -Image, und wir finden einen der HTML -Code, indem wir uns die Seitenquellendatei ansehen:
<Img name = hi src = hello.gif>
Das Bild heißt Hi, die Quelldatei ist hello.gif. Wir möchten es in die auf unserer Website gespeicherte Datei bye.jpeg ändern (http://www.mysit.com).
JavaScript: alert (document.hi.src = http: //www.mysit.com/bye.jpeg)
Sie sehen ein http://www.mysite.com/bye.jpegalert Warnpop-up und das Bild wird geändert. Es ist zu beachten, dass diese Änderungen nur vorübergehend sind! Wenn Sie die Seite aktualisieren oder Ihre Änderungen erneut eingeben, verschwinden Sie, da Sie diese Änderungen auf Ihrem PC und nicht auf dem Webserver vorgenommen haben.
Mit der gleichen Methode können wir den Wert der Variablen anzeigen oder ändern. Zum Beispiel finden wir einen solchen Code -Stück wie diesen auf einer Webseite:
<Script Language = javaScript> var a = test </script>
Dies bedeutet, dass der Wert der Variablen A Test ist, und jetzt geben wir ein:
JavaScript: Alarm (a)
Dann ändern wir seinen Wert auf Hallo:
JavaScript: Alarm (a = Hallo)
Die JavaScript -Injektion wird normalerweise verwendet, um die Formeigenschaften zu ändern, vorausgesetzt, es gibt ein Stück Code wie folgt:
<Formular name = format action = send.php method = post> <Eingabe type = Hidden name = mail [email protected]> <Eingabe type = text name = name> <Eingabe type = subg. subieren> </form>
Wir möchten, dass das Formular an unsere Mailbox gesendet wird, nicht an [email protected]. Sie können den folgenden Befehl verwenden:
JavaScript: alert ([email protected])
• Vielleicht haben Sie die hierarchische Beziehung dieser Befehle bemerkt:
• Wir erklären in der Reihenfolge von links nach rechts:
• 1) Die meisten links sind Dokument
• 2) Dann gibt es den Objektnamen, den wir ändern möchten (z. B. document.hi.src) oder das von ihm enthaltende Objekt (z. B. document.format.mail.Value).
• 3) Schließlich gibt es die Eigenschaft, die wir ändern möchten (z. B. Quellpfad: document.hi.src oder variabler Wert: document.format.mail.Value)
• 4) Verwenden Sie die Nummerierung der Trennung
• 5) Wenn wir den Attributwert ändern möchten, verwenden wir das = Zeichen und den neuen Attributwert
•*Hinweis: Wenn der neue Attributwert eine Zeichenfolge ist (z. B.: [email protected]), muss er in doppelten Zitaten eingeschlossen sein.
• Wenn wir es als Wert für eine Variable verwenden möchten, müssen wir keine Doppelzitate verwenden. Wenn wir beispielsweise den Wert der Variablen B Variablen A zuweisen möchten, können wir JavaScript: Alarm (a = b) eingeben.
• Die meisten Tags auf der Seite haben jedoch keine Namen wie:
<form action = send.php method = post> <Eingabe type = Hidden name = mail [email protected]> <Eingabe type = text name = name> <Eingabe type = subg. Subjekt = Subjekt> </form>
In diesem Code gibt es keinen Formnamen. Basierend auf den obigen Informationen können Sie diesen Befehl verwenden:
JavaScript: Alert (Dokument. .Mail.Value = [email protected])
In diesem Fall müssen wir die Formsequenznummer zählen und finden, und das Folgende ist ein Beispiel:
<form action = send.php methode = post> <Eingabe type = text name = name> <Eingabe type = sure value = surven> </form> <form action = send.php methode = post> <Eingabe type = Hidden name = mail [email protected]> <Eingabe -Typ = Text Name> <Eingabe -Typ = Subjekt = Subjekt = Form> </Form> <Formular. value = suruging> </form>
• Im obigen Code sehen wir 3 Formulare, aber wir interessieren uns nur für die zweite. Wir werden diese Seriennummer verwenden, um unseren Befehl zu vervollständigen:
JavaScript: alert (document.forms [1] .Mail.Value = [email protected])
• Auf diese Weise können Sie das Bild oder den Link ohne Namen ändern und die Formulare in den gewünschten Tag -Typ ändern. Für Bilder
JavaScript: alert (document.images [3] .src =#Die URL des Bildes, das Sie möchten#)
Für den Link ist
JavaScript: alert (document.links [0] .HREF =#Die URL, die Sie wollen#)
Schließlich können wir diese Technik verwenden, um Cookies zu bearbeiten. Der folgende Befehl wurde von dr_amado von triviasecurity.net geschrieben, und ich habe es nur ein wenig geändert, um es vor dem Benutzern zu lassen. Sie müssen sie nur in die Adressleiste kopieren:
JavaScript: Alert (Fenster.C = Funktion A (n, v, nv) {c = document.cookie; c = c.substring (c.indexof (n)+n.length, C.Length); C.Length)); nc = unemmensch (c) .Replace (v, nv); document.cookie = n+=+Escape (NC); Rücklauf (document.cookie);}); alert ('The Cookie is:'+document.cookie+''); Alert (c (Eingabeaufforderung) (Eingabeaufforderung (Eingabeaufforderung) ().// Wenn Sie Ihr Cookie manuell ändern möchten, können Sie den folgenden Befehl verwenden:
JavaScript: Alert (document.cookie)
Auf diese Weise werden Ihr aktuelles Cookie angezeigt, vorausgesetzt, userID = 1, wenn Sie es in userID = 2 ändern möchten, können Sie den folgenden Befehl verwenden:
JavaScript: alert (document.cookie = userId = 2)
Schließlich muss ich betonen, dass alle Änderungen nur auf Kundenseite sind! Es ist wie das Speichern einer Webseite auf Ihrem PC und das Ändern. Mit diesem Trick können Sie jedoch die Seite (z. B. Cookies) oder die Sicherheitsüberprüfung umgehen. Beispielsweise erkennen einige Webseiten den Ort, an dem der Benutzer Daten sendet. Wenn Sie Daten von http://www.test.com/form.php an http://www.test.com/check.php senden, überprüfen Sie, ob die Daten auf http://www.test.com/form.php stammen. Wenn Sie planen, Ihren eigenen JavaScript -Code in die Seite einzugeben, können Sie das Bild ändern und es gleich belassen!
Da die JS -Injektion so schrecklich ist, welche Lösungen müssen wir die JS -Injektion auf der Website verhindern, die wir selbst geschrieben haben?
Methode 1:
Eine einfache Möglichkeit, JavaScript -Injektionsangriffe zu verhindern, besteht darin, Daten zu codieren, die von jedem Website -Benutzer in HTML eingegeben wurden, wenn Daten in der Ansicht wieder entlastet werden.
Zum Beispiel: <%= html.code (feedback.message)%>
Was bedeutet die Verwendung von HTML, um eine Zeichenfolge zu codieren? Bei Verwendung von HTML zum Codieren von Zeichenfolgen werden gefährliche Zeichen wie <und> durch HTML -Entitäten wie <und> ersetzt. Wenn der String <Script> -Alert (Boo!) </Script> mit HTML codiert wird, wird er in <Script> alert (Angriff!) </Script> konvertiert. Der Browser führt bei der Parsen codierter Zeichenfolgen keine JavaScript -Skripte mehr aus. Stattdessen zeigt es harmlose Seiten.
Methode 2:
Zusätzlich zur Verwendung von HTML zum Codieren von Daten beim Anzeigen von Daten in einer Ansicht können Sie auch HTML verwenden, um Daten zu codieren, bevor Sie sie an die Datenbank senden.
StringScapeUtils.EscapeHtml (Daten, die von der Rezeption eingereicht wurden);
Oft bevorzugen die Menschen die erste Methode, die in diesem Tutorial diskutiert wurde, und nicht die zweite Methode. Das Problem mit dem zweiten Ansatz ist, dass HTML-kodierte Daten schließlich in der Datenbank beibehalten werden. Mit anderen Worten, die Daten in der Datenbank enthalten seltsame Zeichen. Was ist der Nachteil davon? Wenn Sie Datenbankdaten in einem anderen Formular als einer Webseite anzeigen müssen, stoßen Sie auf Probleme. Beispielsweise können Daten in Windows Forms -Anwendungen nicht einfach angezeigt werden.
Vielen Dank an die Internetnutzer für die Freigabe: http://zxf-noimp.iteye.com/blog/1130771
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.