当前位置:网站首页>安全基础8 ---XSS
安全基础8 ---XSS
2022-08-03 20:58:00 【抱小猫】
目录
XSS---跨站脚本攻击
产生原因
对用户的输入没有过滤,用户提交的数据中有恶意代码被输入到服务器
分类
- 反射型XSS:危害不大,不持久,只能运行一次,不会进入数据库,仅在前端页面做弹窗窗口
- DOM型XSS:特殊的反射型XSS,危害较小
- 存储型XSS:危害最大,能进入数据库,可以多次执行(危害:可以获取后台地址、管理员的cookies)(产生原因:没有对js标签做过滤)
危害(作用点的不同而不同)
- 盗取被攻击者的 cookie 值,进行身份冒充
- 网页篡改---js 中某些函数可以获取并且重新复制 HTML 的标签值
- 删除页面---通过改变页面的某些值(如:将值改为空值)将页面删除
- 流量劫持---如:小网页增大流量的方式:1.正常操作---引流----送钱、打广告、 2.非常规(违法行为)---利用 XSS 漏洞自动请求流量较 小的网站或在其他网站上添加二维码
- 钓鱼网站
- 配合 CSRF 攻击---ajax、window.location
防御手段
- 将关键字进行过滤
- 将特殊字符转换成字符串-->实体化编码
XSS paylaod
测试网站:http://test.attacker-domain.com/browserparsing/tests.html
1、
<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29"></a>
没有编码成功 (解码顺序:先 实体编码-->Unicode-->js中的Unicode编码)
原因:没有实体编码-->进行Unicode编码,但是协议不能Unicode编码,URL规定协议、用户名、密码都必须是ASCII,否则识别不了
2、
<a href="javascript:%61%6c%65%72%74%28%32%29">Click me</a>
成功:先进行实体解码 --> href中为URL,URL模块可以实别为JavaScript协议,进行URL解码 --> JS模块处理后执行
3、
<a href="javascript%3aalert(3)">Click me</a>
失败:编码了协议,Unicode编码识别不了协议,所以弹窗失败
4、
<div><img src=x onerror=alert(4)></div>
<img src=x onerror=alert(4)>
失败,img标签在正常状态下可以解析,为什么img标签解析不了?
原因:是解析器在解析这个字符引用后不会转换到"标签开始状态"。正因为如此,就不会建立新标签。因此,我们能够利用字符实体编码这个行为来转义用户输入的数据从而确保用户输入的数据只能被解析成"数据"。标签没有进入开始状态,弹窗就不会出来
5、
<textarea><script>alert(5)</script></textarea>
可以解析,标签没有进入开始状态
6、
<textarea><script>alert(6)</script></textarea>
原因:<title>和<textarea>标签中的字符引用会被HTML解析器解码。在解析这些字符引用的过程中不会进入“标签开始状态"。 <textarea>不能执行脚本,只能容纳文本或字符引用
7、
<button onclick="confirm('7');">Button</button>
成功执行,先解析实体编码,onclick中属性值会被HTML解码,识别成功后执行
8、
<button onclick="confirm('8\u0027);">Button</button>
失败原因:使用js编码,js编码可以容纳Unicode编码,但是在js中不能编码符号(如:括号、等号.......)
9、
<script>alert(9);</script>
没有弹窗原因:编码了alert,<script>标签中属于原始文本,但是原始文本只能容纳文本,没有字符引用,无法执行
10、
<script>\u0061\u006c\u0065\u0072\u0074(10);</script>
成功,利用js中的Unicode编码,但是仅编码了字符,可以成功
11、
<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>
失败,利用js中的Unicode编码了括号
12、
<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>
失败,js运行时,里面有字符串需要使用引号包裹起来才能运行,js中使用Unicode编码数字时解码后成为字符串,所以需要引号包裹。
13、
<script>alert('13\u0027)</script>
失败,利用js中的Unicode编码了符号
14、
<script>alert('14\u000a')</script>
成功,编码没问题,都存在
15、
<a href="javascript:%5c%75%30%30&# x25;36%31%5c%75%30%30%36%63% 5;c%75%30%30%36%35%5c%75%30 %30%37%32%5c%75%30%30%37%&# x33;4(15)">Click me</a>
成功,先用HTML实体解码 --> JavaScript:头部出来 --> 由href中url模块解码 --> 识别js协议--> js模块处理 --> 最后解码
注意
- HTML官网:w3c.org
- 解码顺序:先 实体编码 --> Unicode --> js中的Unicode编码
- <textarea>和<title>下不会有脚本能够执行,只能容纳文本或字符引用。无需进行测试
- div 、href等属性元素会有HTML解码操作
- URL规定协议、用户名、密码都必须是ASCII
- JavaScript会对字符串和标识符Unicode解码
HTML实体编码
HTML 实体是一段以连字号(&
)开头、以分号(;
)结尾的文本(字符串)。实体常常用于显示保留字符(这些字符会被解析为 HTML 代码)和不可见的字符(如“不换行空格”)
- 不可分的空格:
<
(小于符号):<
>
(大于符号):>
&
(与符号):&
″
(双引号):"
'
(单引号):''
(版权符号)
©
边栏推荐
- 2022年强网杯rcefile wp
- False label aggregation
- ES6 deconstruction assignment - array object deconstruction and deconstruction
- Zero trust, which has been popular for more than ten years, why can't it be implemented?
- 分分钟教你读取 resources 目录下的文件路径
- 伪标签汇总
- ES6解构赋值--数组解构及对象解构
- ES6-箭头函数
- 李沐动手学深度学习V2-BERT微调和代码实现
- 数学之美 第六章——信息的度量和作用
猜你喜欢
tidyverse based on data.table?
图神经网络怎么入门?一文带你了解图神经网络入门路径-GNN入门
独立站卖家在哪些平台做社交媒体营销效果最好?
Often forget HiFlow 】 【 check-in?Use tencent cloud scenario connector to remind you every day.
【使用 Pytorch 实现入门级的人工神经网络】
肝完 Alibaba 这份面试通关宝典,我成功拿下今年第 15 个 Offer
卷起来!阿里高工携 18 位高级架构师耗时 57 天整合的 1658 页面试总结
从开发到软件测试:除了扎实的测试基础,还有哪些必须掌握 ?
双线性插值公式推导及Matlab实现
Cesium 修改鼠标样式
随机推荐
win10安装及配置Gradle
如何使用 Jmeter获取登录token并设置为全局变量?
3种圆形按钮悬浮和点击事件
力扣707-设计链表——链表
解决npm -v查看npm版本出现npm WARN config global `--global`, `--local` are deprecated. Use `--location报错
用 setTimeout 来实现 setInterval
leetcode 326. Powers of 3
图神经网络怎么入门?一文带你了解图神经网络入门路径-GNN入门
Several difficult problems in DDD
在树莓派上搭建属于自己的网页(4)
Use setTimeout to realize setInterval
canvas螺旋动画js特效
CheckBox列表项选中动画js特效
2022/08/03 学习笔记 (day23)多线程(补充)
收藏-即时通讯(IM)开源项目OpenIM-功能手册
回忆三年浮沉
微信小程序 生成跳转体验版url,可直接跳转到体验版小程序(可通过此方法测试模板消息)
ES6 introduction and let, var, const
简单又有效的基本折线图制作方法
tRNA修饰2-甲基胞嘧啶(m2C)|tRNA修饰m2G (N2-methylguanosine)