xss注入
一、XSS漏洞基础概念
XSS——跨站脚本攻击(Cross-Site Scripting),简写本为css,但与层叠样式表(Cascading Style Sheets,CSS)重名,故改为XSS,通常是使用javascript将恶意代码插入前端网页,当用户使用这些网页时,这些被嵌入的恶意代码就会实施攻击。
二、XSS漏洞本质
XSS漏洞本质就是将攻击者传递的数据直接或间接使用到前端javascript代码中运行。
三、XSS类型
XSS类型分为反射型、存储型以及DOM型
1.反射型XSS
该类型特点为非持久化,一次性
原理:将恶意代码注入到URL中,如果服务器未对URL携带参数进行过滤,则用户在点击或者访问该链接时,服务器就会携带XSS恶意代码返回页面并执行,常用来窃取用户cookie,劫持流量、执行弹窗广告等。因类型特性攻击者需要诱导用户点击注入过的链接才能实施攻击
数据传输过程:攻击者浏览器->后端->用户浏览器
2.存储型XSS
该类型特点为持久化
原理:在服务器缺少对数据过滤的情况下,攻击者将恶意代码直接传输到服务器的数据库进行存储,在其他用户访问该服务器链接时,服务器就会携带XSS恶意代码返回用户页面并执行,与反射型相比,不需要诱导用户访问特定的链接,但目前对存储型XSS注入防范比较完备,因此使用率并没有反射型高
数据传输过程:攻击者浏览器—>后端->数据库(存储)->后端->用户浏览器
3.DOM型XSS
DOM了解:https://blog.csdn.net/wei1273356078/article/details/106543967
该类型与前两种类型XSS有本质区别,特点就是不需要经过后端,而是直接在网页执行
原理:攻击者的恶意数据直接在当前页面的javascript执行。
四、XSS注入以及简单绕过
这里推荐练习场:https://xss.haozi.me/
1.代码输出一个div的空标签,那我们可以直接用script来弹窗
2.代码将输入数据传入input标签内value值,那我们可以将input闭合后进行弹窗,同时主要value的“
3.代码过滤掉()后再将输入数据返回页面,那我们可以通过acill码、十六进制等编码进行绕过
(1)使用svg标签绕过,只要浏览器解析并加载了SVG标签,他的onload事件就会被触发。我们可以在后面用script标签内写代码作为onload事件
其中(与)为acill码绕过()
(2)使用img标签绕过,src为图片路径,当无法找到该路径时就会触发onerror事件
其中(与)为十六进制绕过()
(3)借助es6特性,Set.constructor:Set是JavaScript中的一个内置对象,用于存储任何类型的唯一值,这里的.constructor属性会返回Set构造函数本身。所以就是构造了函数并执行跟在后面的值
在该题目中acill码与十六进制绕过可以替换
4.代码将我们输入的数据放入了注释符并输出,并且过滤了 –>,但是注释符除去–>来闭合外还能通过–!>进行闭合后插入img标签
5.代码将我们输入的数据放入输入框,并且将on开头=号结尾的字符串过滤,我们可以借助html中换行不影响代码执行的特性,插入img标签弹窗
除去此题另外一道类似的题目也使用换行输入的解法,用script标签弹窗
6.代码将我们输入的数据放入了article标签,过滤掉了>,但我们可以借助html中对最后一行不需要闭合也能执行的特性,插入img标签弹窗