一、XSS概念
1、概念
XSS又叫CSS(Cross Site Script),跨站脚本攻击。属于web应用中计算机安全漏洞,是恶意的web访问者将脚本植入到提供给用户使用的页面中,通常是使用JavaScript编写的危险代码,当用户使用浏览器访问页面时,脚本会被执行,从而达到攻击者目的。
2、攻击流程
二、反射型XSS(非持续性)
1、概念
- 反射型主要用于将恶意脚本附加到URL地址的参数中
- 漏洞特征:一次性的、前端执行、不会储存在后端数据库
2、攻击流程
3、靶场练习-DVWA
①反射型XSS-low
step1:源码分析
有源代码可以看到,没有做任何的防护,输入什么就是什么
step2:填写payload
由上述图片可以看到已经成功了
②反射型XSS-medium
step1:源码分析
根据源码可得,这里过滤了script,由于str_replace区分大小写,所以这里我们通过将其大写,就能实现绕过
step2:将关键字进行大小写变换
③反射型XSS-high
step1:源码分析
通过查看源码我们知道,这里将script所组成的正则式都过滤掉了,所有我们使用大小写、双写、变换script都无法成功
那么我们尝试使用其他标签
step2:使用其他标签测试
使用img标签
<img src=x onerror=alert(/xss/)>
使用input标签
<input onclick=alert(1)>
使用a标签
<a href="" onclick=alert(1)>xss</a>
三、储存型XSS(持续型)
1、概念
此类XSS不需要用户单击特定URL就能执行跨站脚本。 攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中。 当受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码
存储型 XSS 常出现在网站的留言版、评论、博客日志等交互处
2、攻击流程
3、靶场练习-DVWA
①储存型XSS-low
step1:源码分析
无任何防护
step2:进行测试
成功了
step3:重新进入,弹窗依旧存在
之前植入的恶意代码依旧存在
②储存型XSS-medium
step1:源码分析
通过对源码进行分析可以看到message过滤掉了所有标签。而name框对应只是将script标签进行了过滤。
step2:测试
在输入过程中,发现它限制了长度
修改maxlength的值后重新输入
③储存型XSS-high
step1:源码分析
我们可以看到,他在medium的基础上,对name框的输入内容也进行了限制
step2:测试
根据源码分析,我们尝试在name框中使用其他标签
四、DOM型XSS
1、概念
DOM XSS的XSS代码不需要服务端解析响应的直接参与,触发XSS的是浏览器端的DOM解析。
用户在客户端输入的数据如果包含了恶意JavaScript脚本,而这些脚本没有经过适当的过滤,应用程序就可能受到基于DOM的XSS攻击。
漏洞特征:一次性的、前端执行、不会储存在后端数据库、程序执行不依赖 于服务器端的数据
DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。
2、攻击流程
- 攻击者构造出特殊的 URL,其中包含恶意代码。用户打开带有恶意代码的 URL。
- 用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
- 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作
3、靶场练习-DVWA
①DOM型-low
step1:查看源码
没有任何过滤
step2:测试
②DOM型-medium
step1:源码分析
可以看到对script标签进行了过滤
step2:测试
③DOM型-high
step1:源码分析
查看源码可得,他对我们输入的内容进行了分类,我们要想写入恶意代码,需要使用到#选项