当前位置:网站首页>安全基础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 代码)和不可见的字符(如“不换行空格”)
- 不可分的空格:
<(小于符号):<>(大于符号):>&(与符号):&″(双引号):"'(单引号):''(版权符号)©
边栏推荐
猜你喜欢

Often forget HiFlow 】 【 check-in?Use tencent cloud scenario connector to remind you every day.

收藏-即时通讯(IM)开源项目OpenIM-功能手册

tkwebview2创作心得

Zero trust, which has been popular for more than ten years, why can't it be implemented?

【使用 Pytorch 实现入门级的人工神经网络】

error: C1083: 无法打开包括文件: “QString”: No such error: ‘QDir‘ file not found

leetcode 231. Powers of 2

七夕快乐!

ES、Kibana 8.0安装

ECCV 2022 | 清华&腾讯AI Lab提出REALY:重新思考3D人脸重建的评估方法
随机推荐
CheckBox列表项选中动画js特效
ECCV 2022 | 清华&腾讯AI Lab提出REALY:重新思考3D人脸重建的评估方法
Leetcode sword refers to Offer 15. 1 in the binary number
Leetcode 125. Verify palindrome string
8.3模拟赛总结
leetcode 326. 3 的幂
leetcode 326. Powers of 3
函数,递归以及dom简单操作
ES6 deconstruction assignment - array object deconstruction and deconstruction
ES6 - Arrow Functions
LeetCode_Digit Statistics_Medium_400. Nth Digit
华为设备配置VRRP与BFD联动实现快速切换
False label aggregation
史兴国对谈于佳宁:从经济模式到落地应用,Web3的中国之路怎么走?
太香了! 阿里 Redis 速成笔记, 从头到尾全是精华!
glusterfs build and use
独立站卖家在哪些平台做社交媒体营销效果最好?
数据库定时备份winserver2012篇
力扣203-移除链表元素——链表
leetcode 231. Powers of 2