"J'ai essayé de créer une application Bulletin Board qui peut utiliser des balises HTML!"
Et si une œuvre d'un ingénieur débutant serait "prise en charge" avec un seul poste de ligne
nous présenterons une démonstration en utilisant un exemple de
script inter-sites (XSS) les bases de la sécurité, et expliquer comment les sites vulnérables sont réellement attaqués
🎬Si vous souhaitez regarder la vidéo, cliquez ici
▶ Regardez la démo sur YouTube
💻Si vous souhaitez réellement l'essayer, cliquez ici
🔗 GitHub Repository (code de démonstration XSS)
* Ce contenu est à
des fins éducatives et de sensibilisation à la sécurité Il n'est pas destiné à attaquer des services réels ou des tiers.
Qu'est-ce que XSS (script de site croisé)?
XSS (script inter-sites) est une attaque dans laquelle malveillants
(tels que JavaScript) sont injectés sur une page Web et exécutés
Par exemple, si le code suivant est publié sur le babillard ou la section des commentaires,
<img src="invalid.jpg" onerror="alert('XSS')">
autre utilisateur voit la page peuvent être volés.
Dommages possibles causés par XSS
- Vol de cookies d'utilisateurs et d'informations de session
- Une redirection de page égoïste (phishing)
- Application Web Ui Tampe et insertion de fausses formulaires
- Publicité une affichage frauduleux et entraîner des liens frauduleux
Pourquoi les XS se produisent-ils?
XSS se produit lorsqu'un développeur "Affiche la saisie de l'utilisateur directement sur l'écran".
- Ce que l'utilisateur a envoyéou
Je viens de intégrer dansinnerhtml
- "Vous pouvez utiliser librement HTML", permettant les balises.
- Aucun traitement de filtrage ou de désinfection pour empêcher l'exécution de JavaScript
Avec cette conception, les attaquants peuvent "injecter" le code source illégal dans HTML
Exemples de code dangereux
postContainer.innerhtml + = `<p> $ {userInput}</p> `;
À première vue, cela ressemble à un processus d'affichage normal, mais leinput user
contient le code suivant?
<img src="invalid.jpg" onerror="alert('XSS')">
ce
La balise spécifie une image qui n'existe pas et provoque une erreur de chargement, et
à ce moment-là alert ('xss')
installé dans Oneror
sera exécutée.
Cet exemple peut sembler inoffensif depuis l'alerte
<img src="x" onerror="location='https://hack-lab-256.com/'">
Cela peut entraîner
des dommages réalistes , comme les utilisateurs qui ouvrent le babillard automatiquement redirigé vers des sites malveillants Bien sûr, si vous obtenez des cookies, vous pourrez peut-être vous connecter sans autorisation.
Comment les pirates trouvent-ils des attaques?
Les attaquants réels (pirates) observent et étudient les applications Web publiées pour identifier les vulnérabilités.
- Vérifiez l'URL et le formulaire
⇒ Y a-t-il des champs d'entrée? Puis-je entrer des balises HTML? - Vérifiez les résultats du poste
⇒"
Essayez une chaîne de test comme"
- Trouvez l'erreur d'un développeur
⇒ Y a-t-il des pièces qui utilisentinnerhtml
Y a-t-il des domaines qui n'ont pas été filtrés ou échappés? - Écrivez le code de préparation
⇒
Par exemple, préparez des cordons difficiles à repérer ou à faire parti des lacunes.
La chaîne d'attaque XSS typique est la suivante:
bien sûr, ils attaquent d'une grande variété d'autres manières.
sortes | Code d'attaque | Caractéristiques et notes |
---|---|---|
タグ | <script>alert('XSS')</script> | Un classique parmi les classiques. Récemment, il est souvent handicapé à Innerhtml |
<img onerror> | <img src="x" onerror="alert('XSS')"> | Taux de réussite élevé. Alerte le feu lorsque le chargement de l'image échoue |
<svg onload> | <svg onload="alert('XSS')"></svg> | SVG est よりブロックされにくい。シンプルで強力 |
étiqueter | <iframe src="javascript:alert('XSS')"></iframe> | Il ne fonctionne pas dans certains navigateurs, mais il a été efficace dans des environnements plus anciens. |
J'ai essayé de le pirater avec XSS !!
Maintenant, je vais réellement essayer de pirater des applications Web à l'aide de XSS.
Le code est publié, donc je pense que ce serait bien si vous pouviez l'essayer tout en l'exécutant sur votre propre PC.
* Distribué via Docker.
💻Si vous souhaitez réellement l'essayer, cliquez ici
🔗 GitHub Repository (code de démonstration XSS)
* Il s'agit d'une démonstration pour l'éducation à la sécurité. Cette vidéo ne recommande pas un accès non autorisé.
Un nouveau défi d'ingénieur: nous avons créé un babillard qui vous permet d'utiliser des balises HTML!
Je programmer depuis six mois maintenant, et je suis toujours ingénieur débutant.
J'ai pensé: "Je veux créer une application Web qui peut être déplacée de mes propres mains!" et a décidé de créer une application de babillard de message.Un design super simple qui sera affiché tel quel quand il est affiché.
De plus, nous avons également permis d'utiliser des balises HTML pour personnaliser l'apparence.heureux quand il a été mis en œuvre et
pensé sérieusement: "Ce ne va pas faire un peu de buzz?"
Avec ce type d'histoire à l'esprit, nous avons créé une "application de babillard" qui peut utiliser des balises HTML.

Caractéristiques principales:
- Entrez votre nom et votre message dans le formulaire de publication et envoyez-le et il apparaîtra immédiatement ci-dessous
- Les messages sont affichés avec des balises HTML, vous pouvez donc modifier la couleur et la taille du texte et afficher les images.
- Le contenu du post est enregistré sur le serveur et continue de s'afficher même après le rechargement de la page
Vous pouvez changer la couleur du texte comme celui-ci!

Comportement réel
- Vous pouvez utiliser des balises telles que
audacieux
ourouge
- "Babillard jouable" qui est amusant à personnaliser à première vue
Cependant, ce degré élevé de liberté conduit à un "piège unique" ...
Les pirates apparaissent: rechercher le babillard
Il a trouvé un babillard.
Cela semble simple et tout le monde peut publier librement.Lorsque vous regardez le formulaire de poste, vous entrez simplement votre nom et votre message.
De plus, le contenu publié semble être affiché sous le nom de HTML."Hmm...
La balise passera-t-elle?
"C'est も通っちゃったりして?」Il jette légèrement à travers la source et ouvre Devtools dans son navigateur.
Apparemmentinnerhtml
est utilisé et non filtré.── "Je vois. C'est ... peut être utilisé."
Avec ce type d'histoire à l'esprit, nous essaierons de rechercher l'application du babillard.
Vérifiez ce que les balises passent
Il s'agit d'un tableau de bulletin qui peut être personnalisé avec des balises HTML, donc je pense que vous pouvez utiliser des balises HTML, mais pour voir s'il y a des restrictions, je vais essayer d'exécuter une balise HTML qui peut utiliser XSS.
<script>alert('xss')</script> ← La balise de script sera-t-elle passée?<img src="x" onerror="alert('xss')"> ← L'attribut de l'événement fonctionne-t-il?<svg onload="alert('xss')"></svg> ← Exécuter les attributs des balises SVG<iframe src="https://hack-lab-256.com/"></iframe> ← L'intégration d'Iframe est-elle autorisée? <math><mtext></mtext><script>alert(1)</script> </math>← Vérifiez le contournement de la balise de script
Tout d'abord, j'ai publié une balise de script.
<script>alert('xss')</script>

Cela a été affiché, mais aucune alerte n'a été émise.
Cela est dû à la spécification du navigateur selon laquelle les balises de script ne sont pas exécutées dans InnerHTML
Ensuite, j'ai essayé de publier une balise IFRAME.
<iframe src="https://hack-lab-256.com/"></iframe>

Cette page a été intégrée avec succès .
Ce n'est pas XSS, mais ce pourrait être un tremplin pour le phishing et le jacking
<iframe src="javascript:alert('XSS')"></iframe>

Étonnamment, une alerte a été exécutée.
Il est souvent bloqué dans les navigateurs normaux, mais
sur ce tableau de messages src = "javascript: ..."
fonctionne toujours.

Je publierai également la balise IMG.
<img src="x" onerror="alert('img-xss')">


Il s'agit de l'une des techniques XSS couramment utilisées et exécuter JavaScript en cas d'erreur de chargement d'image .
Lorsque j'ai posté, une alerte a été licenciée au moment où j'ai visionné la page.
Vérifiez également le code source
Nous avons pu confirmer dans l'expérience précédente que XSS est réellement possible, mais pour être sûr, vérifier le code source
S'il est implémenté dans JavaScript côté client, vous pouvez également afficher le code directement à partir de Devtools .
En regardant le code
, il utilisait le processus d'insertion du contenu du message tel quel InnerHTML

vous pouvez voir que les messages publiés sont également affichés à l'écran avec des balises sans être désinfectée

À ce stade, il est devenu clair
que le tableau de messages est un «environnement exécutable de script». En d'autres termes, il semble sûr de dire que vous êtes prêt à attaquer
Exécuter: essayez de rediriger vers votre site à l'aide de XSS
Jusqu'à présent, dans la reconnaissance, nous avons constaté que le babillard d'affichage des publications avec des balises HTML tel quel, et
que les attributs de l'événement JavaScript (tels que ONERROR) ne sont pas bloqués.
Je vais donc publier le code ci-dessous.
<img src="x" onerror="location='https://hack-lab-256.com/'">
Ce mécanisme implique d'essayer de charger une image qui n'existe pas et qui provoque une erreur, et
l'attribut ONERROR
est exécuté lorsque cette erreur se produit

Après avoir soumis mon message, j'ai ouvert la page du babillard et
il automatiquement redirigé vers https://hack-lab-256.com/
Une attaque est établie dans laquelle l'utilisateur n'a rien exploité, mais affichant simplement le babillard et l'attaquant est obligé de passer au site désigné par l'attaquant

À partir de ce moment, ce site ne sera pas disponible pour une utilisation. Ce phénomène a conduit à la transition forcée vers ce site.
De cette façon, une seule ligne de code peut endommager la confiance globale du babillard
Cas précédent: XSS se produisait également sur YouTube
En juillet 2010 (actuellement révisé),
la section des commentaires a été ajoutée タグを含めることで JavaScript が実行されてしまうという、深刻なXSS脆弱性が存在していました。
Détails de vulnérabilité
Sur YouTube, il est à l'origine dans la section des commentaires. などの危険なタグが入力された場合、
自動で無効化(エスケープ)する仕組みになっていました。
Cependant, la mise en œuvre à l'époque était la première タグだけが正しくエスケープされ、2つ目以降はそのまま通ってしまうという重大な処理漏れがあったのです。
✅ multiple タグを投稿すれば、実行可能なコードが差し込めた
Ce qui s'est réellement passé
Peu de temps après que la vulnérabilité a été rendue publique, les utilisateurs malveillants ont intégré le script dans de nombreuses pages vidéo.
- Afficher les faux messages contextuels
- Affiche un dialogue qui imite un faux article de presse
- Rediriger vers un site externe malveillant
On dit que certains codes ont volé des informations sur les cookies et affiché de fausses pages de connexion.
Ce qui est commun avec cette démo
La démo XSS à laquelle je suis allé à cette époque et l'étude de cas YouTube sont très similaires en structure.
- "Code d'intégration dans le champ Post"
- "JavaScript s'exécute lorsqu'il est affiché"
- "Les redirectes et autres dommages se produisent."
Bien que cette démonstration ait intentionnellement omis le processus d'évasion, les attaquants réels visent de telles «erreurs de filtrage mineures .
De nombreuses vulnérabilités XSS ont été découvertes dans le passé, et même les principaux services Web ne font pas exception .
Si vous êtes intéressé, veuillez consulter d'autres exemples.
Enfin
nous avons montré comment
une attaque XSS a été effectuée dans laquelle une page Web pouvait être repris en publiant une seule ligne de code sur un babillard simple qui peut utiliser des balises HTML
XSS est souvent considéré comme "cela se produit parce que c'est une application créée par les débutants", mais
une menace très réaliste qui a été vue dans les services majeurs tels que YouTube et Google dans le passé .
De nos jours, nous pouvons générer automatiquement des applications à l'aide de l'IA.
Il devient de plus en plus important de savoir si cela fonctionne en toute sécurité , plutôt que de simplement "bouger, ça va
Même les services que vous avez créés peuvent facilement être repris en une seule ligne
📺 YouTube présente ce contenu dans une vidéo facile à comprendre.
Nous continuerons à fournir des explications et des démos de sécurité, donc
si vous ne voulez pas manquer les dernières informations, veuillez vous abonner à notre chaîne!
🎬Si vous souhaitez regarder la vidéo, cliquez ici
▶ Regardez la démo sur YouTube
💻Si vous souhaitez réellement l'essayer, cliquez ici
🔗 GitHub Repository (code de démonstration XSS)