一、XSS
1、概念
XSS又叫CSS(Cross Site Script),跨站脚本攻击。属于web应用中计算机安全漏洞,是恶意的web访问者将脚本植入到提供给用户使用的页面中,通常是使用JavaScript编写的危险代码,当用户使用浏览器访问页面时,脚本会被执行,从而达到攻击者目的。
2、攻击流程
二、反射型XSS(非持续型)
1、概念
- 反射型主要用于将恶意脚本附加到URL地址的参数中
- 漏洞特征:一次性的、前端执行、不会储存在后端数据库
2、攻击流程
3、靶场练习-DVWA
①反射型XSS-low
- step1:输入特殊字符发现无绕过,那么可以大胆填写payload
- step2:填写payload
由上述图片可以看到已经成功了
- step3:源码分析
有源代码可以看到,没有做任何的防护,输入什么就是什么
反射型XSS-medium
- step1:输入特殊字符发现无绕过,那就尝试填写payload
- step2:根据结果发现关键字script被过滤掉了
- step3:将关键字进行大小写变换再次尝试
- step4:源码分析
根据源码可得,这里过滤了script,由于str_replace区分大小写,所以这里我们通过将其大写,就能实现绕过。
③反射型XSS-high
- step1:在②的基础上尝试
发现这次失败了,那我们继续尝试其他的策略
我们尝试双写绕过后,还是失败了,而且返回的也是相同的。
- step2:在进行多次尝试后,发现使用多种绕过方法都不能过滤script标签,那我们尝试使用其他标签 尝试使用img标签:
<img src=x onerror=alert(/xss/)>
结果显示成功了
尝试使用a标签:
<a href="" onclick=alert(1)>xss</a>
结果显示成功
尝试使用input标签:
<input onclick=alert(1)>
结果显示成功
- step3:查看源码
通过查看源码我们进一步知道了,这里将script所组成的正则式都过滤掉了,这也就是我们之前在尝试时,大小写、双写、以及含有javascript的都失败的原因。
三、储存型XSS(持续型)
1、概念
此类XSS不需要用户单击特定URL就能执行跨站脚本。 攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中。 当受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码
存储型 XSS 常出现在网站的留言版、评论、博客日志等交互处
2、攻击流程
3、靶场练习-DVWA
储存型XSS-low
- step1:按照之前的方法,不做改变直接输入,进行尝试
成功了
- step2:我们重新进入,发现依旧会弹窗
之前植入的恶意代码依旧存在
- step3:查看源码,进一步分析
储存型XSS-medium
- step1:和之前一样进行尝试,都失败了,说明message对应的输入进行了许多过滤
- step2:转换一下思维,我们在name框中输入恶意代码。 在输入过程中,发现它限制了长度
修改maxlength的值后重新输入
- step3:源码分析
通过对源码进行分析可以看到message过滤掉了所有标签,这也是在之前的尝试过程中,变换许多标签依旧无法成功。而name框对应只是将script标签进行了过滤。
储存型XSS-high
- step1:我们在name框中输入script标签的不同形式,都被过滤掉了
- step2:尝试使用其他标签
成功了
- step3:查看源码
我们可以看到,他在medium的基础上,对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:输入最简单的script进行尝试
成功了
- step2:查看源码
没有任何过滤
DOM型-medium
- step1:输入script标签的不同形式的恶意代码,都被过滤掉了
- step2:猜测可能将script过滤掉了,尝试其他标签
- step3:查看源码
可以看到对script标签进行了过滤
DOM型-high
- step1:尝试使用其他标签构造恶意代码,都失败了
- step2:查看源码
查看源码可得,他对我们输入的内容进行了分类,我们要想写入恶意代码,需要使用到#选项
- step3:按照分析,重新输入