Récemment, les nouvelles sont sorties. Quatre employés du service de sécurité du réseau d'Alibaba ont utilisé des vulnérabilités de page Web pour écrire des scripts JS pour saisir les gâteaux de lune, ils ont donc été intrigués. Ils voulaient savoir comment écrire ce script JS et comment implémenter divers ordres et saisies d'armes à feu.
Qu'est-ce qu'une attaque par injection JavaScript?
1. Chaque fois que le contenu entré par l'utilisateur et Redivisé, le site Web est vulnérable aux attaques d'injection JavaScript. Examinons une application spécifique vulnérable aux attaques d'injection JavaScript. Supposons qu'un site Web de commentaires des clients ait été créé. Les clients peuvent visiter le site Web et saisir des informations sur le produit. Lorsqu'un client soumet des commentaires, les informations de rétroaction sont redimensionnées sur la page de rétroaction.
Le site Web de commentaires des clients est un site Web simple. Malheureusement, ce site Web est vulnérable aux attaques d'injection JavaScript.
Supposons que le texte suivant soit entré dans le formulaire de rétroaction du client:
<cript> alerte (attaque!) </cript>
Ce texte représente un script JavaScript qui affiche la zone de message d'avertissement. Après que quelqu'un ait soumis ce script au formulaire de rétroaction du client, l'attaque de message! sera affiché lorsque quiconque visitera le site Web des commentaires des clients à l'avenir.
2. Un autre type consiste à entrer un morceau de code JS dans la barre d'adresse du navigateur pour modifier le contenu des variables JS de page et des étiquettes de page.
En utilisant l'injection JavaScript, les utilisateurs peuvent modifier leur contenu sans fermer ou enregistrer des pages Web, ce qui se fait sur la barre d'adresse du navigateur. La syntaxe de la commande est la suivante:
javascript: alert (# commande #)
Par exemple, si vous souhaitez voir une boîte d'avertissement d'alerte sur le site http://www.example.com, entrez d'abord l'URL dans la barre d'adresse et attendez que la page se charge, puis supprimez l'URL et entrez:
JavaScript: alert (Hello World)
Comme une nouvelle URL. Cela apparaîtra dans un boîtier mondial Hello, en utilisant cette technique pour changer presque tout sur une page Web, comme une image. Supposons qu'il y ait une image de logo de site Web et que nous trouvons l'un des code HTML en regardant le fichier source de la page:
<Img name = hi src = hello.gif>
L'image est nommée Salut, le fichier source est hello.gif, nous voulons le changer dans le fichier bye.jpeg stocké sur notre site (http://www.mysite.com), donc l'adresse URL complète de l'image est http://www.mysite.com/bye.jpeg, en utilisant l'injection JavaScript, nous devons simplement y entrer dans la barre d'adresse: la barre d'adresse:
javascript: alert (document.hi.src = http: //www.mysite.com/bye.jpeg)
Vous verrez un pop-up http://www.mysite.com/bye.jpegalert avertissement, et l'image est modifiée. Il convient de noter que ces changements ne sont que temporaires! Si vous actualisez la page ou réintégrez vos modifications disparaîtront, car vous venez d'apporter ces modifications sur votre PC, pas sur le serveur Web.
En utilisant la même méthode que nous pouvons afficher ou modifier la valeur de la variable, par exemple, nous trouvons un morceau de code comme celui-ci sur une page Web:
<Script linguisse = javascript> var a = test </cript>
Cela signifie que la valeur de la variable a est test, et maintenant nous entrons:
javascript: alerte (a)
Ensuite, nous passons sa valeur à Hello:
javascript: alert (a = bonjour)
L'injection JavaScript est généralement utilisée pour modifier les propriétés du formulaire, en supposant qu'il y a un morceau de code comme celui-ci:
<formage name = format Action = send.php Method = Post> <input type = Hidden Name = Mail [email protected]> <Type de Text = Nom = Name> <Type de Soumis = Value = Soumis> </ Form>
Nous voulons que le formulaire soit envoyé dans notre boîte aux lettres, pas quelqu'[email protected]. Vous pouvez utiliser la commande suivante:
javascript: alert ([email protected])
• Peut-être avez-vous remarqué la relation hiérarchique de ces commandes:
• Nous expliquons de l'ordre de gauche à droite:
• 1) le document le plus à gauche
• 2) Ensuite, il y a le nom de l'objet que nous voulons modifier (tel que document.hi.src) ou l'objet qu'il contient (tel que document.format.mail.value)
• 3) Enfin, il y a la propriété que nous voulons modifier (comme le chemin source: document.hi.src, ou valeur variable: document.format.mail.value)
• 4) Utiliser la séparation du nombre
• 5) Lorsque nous voulons modifier la valeur d'attribut, nous utilisons le Sign et la nouvelle valeur d'attribut
• * Remarque: Lorsque la nouvelle valeur d'attribut est une chaîne (par exemple: [email protected]), elle doit être enfermée en doubles citations.
• Si nous voulons l'utiliser comme valeur pour une variable, nous n'avons pas besoin d'utiliser des devis doubles. Par exemple, si nous voulons attribuer la valeur de la variable B à la variable A, nous pouvons entrer JavaScript: alert (a = b).
• Cependant, la plupart des balises de la page n'ont pas de noms, tels que:
<formulaire Action = Send.php Method = Post> <INPUT TYPE = NAME HIDDEN = Mail [email protected]> <INPUT TYPE = NAME TEXT = NAME> <TYPE INPUT = SOUMAD VALAVE = SOUMING> </ FORM>
Il n'y a pas de nom de formulaire dans ce code. Sur la base des informations ci-dessus, vous pouvez utiliser cette commande:
javascript: alert (document. .mail.value = me @ hacker.com)
Dans ce cas, nous devons compter et trouver le numéro de séquence de formulaire, et ce qui suit est un exemple:
<formulaire form = Send.php Method = Post> <input type = text name = name> <input type = soumider value = soumed> </ form> <form action = send.php metheth = post> <input type = Hidden Name = Mail [email protected]> <entrée type = text name = name> <entrée Type = soumed Value = </ form> <form action = send.php metheth = post> valeur = soumettre> </ form>
• Dans le code ci-dessus, nous voyons 3 formulaires, mais nous ne sommes intéressés que par le second, donc le numéro de formulaire que nous voulons est 2. N'oubliez pas que nous commençons à partir de 1, comme 1, 2, 3, 4 ... tandis que JavaScript commence à partir de 0, comme 0, 1, 2, 3 ... donc le vrai numéro de forme est 1, pas 2. Habituellement, nous devons soustraire le numéro de forme trouvé. Nous utiliserons ce numéro de série pour compléter notre commande:
javascript: alert (document.forms [1] .mail.value = me @ hacker.com)
• De cette façon, vous pouvez modifier l'image ou le lien sans nom, et vous pouvez modifier les formulaires en n'importe quel type de balise que vous souhaitez. Pour les photos
javascript: alert (document.images [3] .src = # L'URL de l'image que vous voulez #)
Car le lien est
javascript: alert (document.links [0] .href = # L'URL que vous voulez #)
Enfin, nous pouvons utiliser cette technique pour modifier les cookies. La commande suivante est écrite par DR_AMADO de TriviasEcurity.net, et je ne l'ai modifié qu'un peu pour le laisser apparaître avant que l'utilisateur ne le modifie. Il vous suffit de les copier dans la barre d'adresse:
javascript: alert (window.c = fonction a (n, v, nv) {c = document.cookie; c = c.substring (c.indexof (n) + n.length, c.length); c = c.substring (1, (c.indexof (;)> - 1)? C.Indexof (;): C.Length)); nc = unEscape (c) .replace (v, nv); document.cookie = n + = + Escape (nc); return Unescape (document.cookie);}); alert ('le cookie est:' + document.cookie + ''); alert (c (invite (le nom du cookie:,), prompt (modifier cette valeur:,), invite, avec// Si vous souhaitez changer manuellement votre cookie, vous pouvez utiliser la commande suivante:
javascript: alert (document.cookie)
Cela affichera votre cookie actuel, en supposant que userId = 1, si vous souhaitez le changer en userId = 2, vous pouvez utiliser la commande suivante:
javascript: alert (document.cookie = userId = 2)
Enfin, je dois souligner que tous les changements sont juste du côté client! C'est comme enregistrer une page Web sur votre PC et le modifier. Pourtant, en utilisant cette astuce, vous pouvez toujours tromper la page (comme les cookies) ou contourner la vérification de sécurité. Par exemple, certaines pages Web détecteront l'emplacement où l'utilisateur envoie des données. Si vous envoyez des données de http://www.test.com/form.php à http://www.test.com/check.php, check.php peut détecter si les données proviennent du formulaire sur http://www.test.com/form.php. En plus de cela, si vous prévoyez d'entrer votre propre code JavaScript dans la page, en utilisant certaines de ces astuces, vous pourrez changer l'image et la laisser la même chose!
Enfin, comme l'injection JS est si terrible, quelles solutions devons-nous empêcher l'injection de JS sur le site Web que nous nous sommes écrites?
Méthode 1:
Un moyen facile d'empêcher les attaques d'injection JavaScript consiste à coder les données saisies par n'importe quel utilisateur de site Web dans HTML lors de la rediffusion des données dans la vue.
Par exemple: <% = html.encode (feedback.message)%>
Quelle est la signification de l'utilisation de HTML pour coder une chaîne? Lors de l'utilisation de HTML pour coder des chaînes, des caractères dangereux tels que <et> sont remplacés par des entités HTML telles que <et>. Ainsi, lorsque la chaîne <cript> alerte (boo!) </cript> est codée à l'aide de HTML, elle sera convertie en <Script> alert (attaque!) </cript>. Le navigateur n'exécute plus les scripts JavaScript lors de l'analyse des chaînes codées. Au lieu de cela, il montre des pages inoffensives.
Méthode 2:
En plus d'utiliser HTML pour coder des données lors de l'affichage des données dans une vue, vous pouvez également utiliser HTML pour coder des données avant de les soumettre à la base de données.
StringEscapeUtils.escapeHTML (données soumises par la réception);
Souvent, les gens préfèrent utiliser la première méthode discutée dans ce tutoriel et non la deuxième méthode. Le problème avec la deuxième approche est que les données codées par HTML seront finalement conservées dans la base de données. En d'autres termes, les données de la base de données contiendront des caractères étranges. Quel est l'inconvénient de cela? Si vous devez afficher les données de base de données sous un formulaire autre qu'une page Web, vous rencontrerez des problèmes. Par exemple, les données ne peuvent pas être affichées facilement dans les applications Windows Forms.
Merci aux internautes pour le partage: http://zxf-noimp.iteye.com/blog/1130771
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.