XSS(跨站脚本攻击)

596 阅读5分钟

一、XSS

1、概念

XSS又叫CSS(Cross Site Script),跨站脚本攻击。属于web应用中计算机安全漏洞,是恶意的web访问者将脚本植入到提供给用户使用的页面中,通常是使用JavaScript编写的危险代码,当用户使用浏览器访问页面时,脚本会被执行,从而达到攻击者目的。

2、攻击流程

image.png

二、反射型XSS(非持续型)

1、概念

  • 反射型主要用于将恶意脚本附加到URL地址的参数中
  • 漏洞特征:一次性的、前端执行、不会储存在后端数据库

2、攻击流程

image.png

3、靶场练习-DVWA

①反射型XSS-low

  • step1:输入特殊字符发现无绕过,那么可以大胆填写payload

image.png

  • step2:填写payload

image.png 由上述图片可以看到已经成功了

  • step3:源码分析

image.png 有源代码可以看到,没有做任何的防护,输入什么就是什么

反射型XSS-medium

  • step1:输入特殊字符发现无绕过,那就尝试填写payload image.png
  • step2:根据结果发现关键字script被过滤掉了

image.png

  • step3:将关键字进行大小写变换再次尝试

image.png

  • step4:源码分析

image.png 根据源码可得,这里过滤了script,由于str_replace区分大小写,所以这里我们通过将其大写,就能实现绕过。

③反射型XSS-high

  • step1:在②的基础上尝试

image.png

发现这次失败了,那我们继续尝试其他的策略

image.png

我们尝试双写绕过后,还是失败了,而且返回的也是相同的。

  • step2:在进行多次尝试后,发现使用多种绕过方法都不能过滤script标签,那我们尝试使用其他标签 尝试使用img标签:

<img src=x onerror=alert(/xss/)>

image.png 结果显示成功了

尝试使用a标签:

<a href="" onclick=alert(1)>xss</a>

image.png 结果显示成功

尝试使用input标签:

<input onclick=alert(1)>

image.png 结果显示成功

  • step3:查看源码

image.png 通过查看源码我们进一步知道了,这里将script所组成的正则式都过滤掉了,这也就是我们之前在尝试时,大小写、双写、以及含有javascript的都失败的原因。

三、储存型XSS(持续型)

1、概念

此类XSS不需要用户单击特定URL就能执行跨站脚本。 攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中。 当受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码

存储型 XSS 常出现在网站的留言版、评论、博客日志等交互处

2、攻击流程

image.png

3、靶场练习-DVWA

储存型XSS-low

  • step1:按照之前的方法,不做改变直接输入,进行尝试 image.png

成功了

  • step2:我们重新进入,发现依旧会弹窗

image.png

之前植入的恶意代码依旧存在

image.png

  • step3:查看源码,进一步分析

image.png

储存型XSS-medium

  • step1:和之前一样进行尝试,都失败了,说明message对应的输入进行了许多过滤

image.png

  • step2:转换一下思维,我们在name框中输入恶意代码。 在输入过程中,发现它限制了长度

image.png

修改maxlength的值后重新输入 image.png

  • step3:源码分析

image.png

image.png

通过对源码进行分析可以看到message过滤掉了所有标签,这也是在之前的尝试过程中,变换许多标签依旧无法成功。而name框对应只是将script标签进行了过滤。

储存型XSS-high

  • step1:我们在name框中输入script标签的不同形式,都被过滤掉了

image.png

  • step2:尝试使用其他标签

image.png 成功了

  • step3:查看源码

image.png

我们可以看到,他在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进行尝试

image.png 成功了

  • step2:查看源码

image.png

没有任何过滤

DOM型-medium

  • step1:输入script标签的不同形式的恶意代码,都被过滤掉了

image.png

  • step2:猜测可能将script过滤掉了,尝试其他标签

image.png

image.png

  • step3:查看源码

image.png

可以看到对script标签进行了过滤

DOM型-high

  • step1:尝试使用其他标签构造恶意代码,都失败了

image.png

  • step2:查看源码

image.png

查看源码可得,他对我们输入的内容进行了分类,我们要想写入恶意代码,需要使用到#选项

  • step3:按照分析,重新输入

image.png