XSS跨站脚本漏洞可以讲的这么详细

一、了解XSS漏洞是什么

1.XSS定义

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、
VBScript、ActiveX、 Flash
或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

在这里插入图片描述图片来源: 地址.

2.XSS危害

  1. 植入键盘记录器。(也就是可以记录键盘输入的内容)
  2. 攻击受害者所在的局域网。
  3. 代理转发流经被攻击者的所有 Web 流量,即实施中间人攻击。
  4. 窃取或篡改应用 cookie 用于会话劫持。
  5. 更改被攻击者 Web 应用的显示内容。
  6. 绕过 CSRF 安全防护措施。
  7. 创建包含恶意 JavaScript 代码的虚假网站以及到该网站页面的链接
  8. 发送嵌入恶意 Web URL 的电子邮件。
  9. 使用 URL 短码隐蔽真实 URL。

在这里插入图片描述

3.XSS漏洞产生原因

程序员对网页输入框没有做严格的过滤,导致楼哦对那个的出现,也是互联网上严重性很高的漏洞,原则上只要有输入框救会存在,这就要看开发人员的过滤水平的高低了。

二、XSS漏洞分类

分类 特点
反射性XSS 针对客户端,非永久性保存
DOM形XSS 针对客户端,非永久性保存
存储形XSS 针对客户端,永久性保存

1.反射性XSS

(1)什么是反射型XSS

反射性XSS就是在页面的输入框中,在没有被过滤的情况下,写入JS脚本标签,在前端页面中显示效果,因为是非持久性的所以,当客户端进入网页的时候,脚本就执行一次,下一次就不会继续执行了。

通常情况下利用的位置是在网站的输入框,url框等

(2)演示

首先这里用皮卡丘靶场作为演示场。
<1>.测试特殊符号是否报错 <>“”
在这里插入图片描述
<2>.发现报错who is <>“”,i don't care!
在这里插入图片描述
<3>.打开控制台查看前端代码
在这里插入图片描述看到这里你在输入框的输入特殊字符被识别为一个语句输出

<4>.写入标签代码<script>alert(“我是最帅的”)</script>

这里有一个地方要注意,输入框被限制了长度,需要在控制台自行改动一下
在这里插入图片描述

<5>.复制连接新开一个页面试一下
在这里插入图片描述

<6>.新打开的链接显示跳出了弹框
在这里插入图片描述

<7>.那么我们刷新页面试一下
刷新后的url
在这里插入图片描述

这时候刷新页面后 上面的url发生了变化,这也说明了反射型XSS的特性,非持久性

2.DOM型XSS

(1)什么是DOM型XSS

在JS中可以改变正规HTML的框架和文本。JS对页面进行操作的时候,是需要有一个接口对HTML页面进行连接。这个中间桥梁就是DOM,在这个中间更改一些代码,可以进行一些操作。这就是DOM型XSS。

通常这个利用的位置是在网页输入框

(2)演示

<1>.输入特殊符号检测<>//""
在这里插入图片描述页面显示what do you see?
在这里插入图片描述
<2>.打开终端查看代码
在这里插入图片描述

在这里我们是可以看到有一个闭合方式的存在。

<3>.尝试闭合"<script>alert("我是最帅的")</script>"
在这里插入图片描述

可以看到这里的尝试闭合是没有作用的,没有起到任何作用,将所有代码都当作了链接地址。

<4>.那么我们应该怎么去填写我们的脚本呢?

在这里插入图片描述
知道js语法事件的同学肯定是很轻松就能过去的。
<5>.尝试闭合,i love you"'
在这里插入图片描述

我们可以非常清楚的看到闭合,那么我进行事件写入看一下。

<6>.事件写入 i love you" ' onclick="alert('我是最帅的')"
在这里插入图片描述我们可以看到这里我们成功的写入了进去。

<7>.点击查看
在这里插入图片描述

这里显示了我们添加进去的事件,所以说,在测试时还是需要多了解javascript的用法

3.存储形XSS

(1)什么是存储型XSS

存储型XSS就是应用程序直接将攻击者提交的代码存储到数据库中进行保存,这样就可以永久的显示在用户的前端页面上。(说白了也就是,将代码存到前端页面上,比如说你写上传了一个脚本图片存储在网页上,只要有人进入这个网站,那么就会在前端页面上执行,钓鱼网站同理。)

通过利用位置在网页可以将输入内容存储到数据库的地方。

(2)演示

<1>.特殊符号进行测试 <>""
在这里插入图片描述这里我们可以看到存储进去了.

<2>.打开控制台,查看代码
在这里插入图片描述
<3>.写入脚本
在这里插入图片描述
<4>.复制链接打开
在这里插入图片描述

还是可以显示 ,这不能证明存储型的持久性,我们继续测试。

<5>.刷新页面
在这里插入图片描述

还是显示,后面我多次刷新发现只要我不删除就可以一直存在。

三、XSS绕过

1.标签外

(1)直接添加标签绕过

这个请看上面的反射型XSS演示。

1.标签内

(1)构造闭合

这个请看上面的DOM型XSS演示。

(2)填写事件

这个请看上面的DOM型XSS演示。,不同标签下事件是不同的,当遇到的时候百度搜索就可以了解到。

(3)大小写绕过

绕过演示

<1>.输入特殊字符检测
在这里插入图片描述这里检测后很明显是没有饶过
<2>.输入标签尝试
在这里插入图片描述这里也是非常明显,标签内不可以添加标签

<3>.添加事件尝试”/><a href ='javascript:alert("企鹅兄最帅")'>a</a>

在这里插入图片描述

这里还是一样的被过滤了,那么尝试其他方法

<4>.大小写绕过尝试"><a Href ='javascript:alert("企鹅兄最帅")'>a</a>

在这里插入图片描述

后面的绕过不做演示

(4)双写绕过

<script>
改为
<scr<script>ipt>

(5)编码转译绕过

16进制:x+16进制;
HTML编码:&#+10进制/16进制+;
JS编码:利用String.fromCharCode函数将 Unicode 编码转为字符
base64编码:eval()用于将字符串当作程序执行,atob()用于解密base64

(6)空格、回车、table绕过

空格:

javascript:alert('xss');
可以改为
java script:alert('xss');

回车:

javascript:alert('xss');
可以改为
java 
script:alert('xss');

Tab:

javascript:alert('xss');
可以改为
java	script:alert('xss');

(7)非闭合标签

<script>
可以改为
<script

(8)利用特性进行绕过

这个对版本的限制很强,这里不同版本问题不一样,这里就不总结了。

四、小结

企鹅兄在这里希望大家在这里可以学到一些等下,真诚的希望大佬们指出错误,你的建议就是我坚持的动力

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_50481708/article/details/124448401