跨站脚本漏洞XSS

一、跨站脚本漏洞概述

由于web应用程序对用户的输入过滤不严,通过html注入篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。在这个基础上黑客可以轻易的发起cookie资料窃取,会话劫持,钓鱼欺骗等攻击手段。

二、XSS跨站脚本攻击过程

在这里插入图片描述

三、跨站脚本漏洞类型及测试流程

1、漏洞类型
(1)反射型
交互的数据一般不会被存在数据库里面,一次性,所见即所得,一般出现在查询类页面等
(2)存储型
交互的数据会被存在数据库里面,永久性存储,一般出现在留言板,注册等页面
(3)DOM型
不与后台服务器产生交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性也属于反射型
DOM是什么
通过JavaScript,可以重构整个HTML文档,可以添加、移除、改变或重排页面上的项目

要改变页面的某个东西,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口,连同对HTML元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)

所以,可以把DOM理解为一个一个访问HTML的标准编程接口

在这里插入图片描述

2、测试流程
(1)在目标站点上找到输入点,比如查询接口,留言板等
(2)输入一组“特殊字符+识别字符”,点击提交后,查看返回的源码,是否有做对应的处理
(3)通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以搞到执行js的条件(构造闭合)
(4)提交构造的脚本(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞
TIPS
1.一般查询接口容易出现反射型XSS,留言板容易出现存储型XSS
2.由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效,或者环境限制了执行(浏览器)
3.通过变化不通的script,尝试绕过后台过滤机制

四、实验演示

1、反射型XSS(get&post)
反射型XSS(get)
get以url方式提交数据      

post是以表单方式在请求体里面提交

get方式的xss漏洞更加容易被利用,一般利用的方式是将带有跨站脚本的url伪装后发送给目标,而POST方式由于是以表单方式提交,无法直接使用URL方式进行攻击

先输入一组特殊字符进行测试,然后查看源码,发现将特殊字符原样输出,说明我们输入任何字符它都会进行输出,不会做处理
在这里插入图片描述
在这里插入图片描述
输入代码发现限制长度,修改的方法,按F12
在这里插入图片描述
提交一个js代码,发现成功执行,说明存在反射型xss漏洞

输入<script>alert("xss")</script>

在这里插入图片描述
查看源码,可以看见反射型字符

在这里插入图片描述
接着我们刷新输入页面,因为是反射型的XSS,所以之前我们输入的代码并不会被保留

2、存储型XSS

输入特殊字符,提示输出
在这里插入图片描述
在这里插入图片描述

输入一个js代码,出现弹框,和反射型的区别就是刷新页面,还是会弹。说明留言被存到数据库里
在这里插入图片描述

3、Dom型XSS(纯前端操作)
DOM型XSS

确认是否存在xss漏洞,随便输入一个字符,查看源代码
在这里插入图片描述
右击查看源代码:
Ctrl+F搜索一下“what”定位到源码的相关位置
在这里插入图片描述
其中:

var str = document.getElementById(“text”).value 
<input id=“text” name=“text” type=“text” value="" / > 
用getElementById(),方法获取到id="text"值,即input中我们输入的内容,然后把输入的内容赋值给str

document.getElementById(“dom”).innerHTML = “< a href=’”+str+"’>what do you see?< /a > "; 
< div id=“dom” >< /div > 
把输入的内容通过字符串拼接的方式写入到a这个标签中的href(属性),再把a标签通过getElementById()方法写到id="dom"这个标签中

构造闭合,输入js代码

#' onclick="alert('hello')">

前端代码就变成这个

< a href=’#' onclick="alert('hello')">“>what do you see?< /a >

执行效果
在这里插入图片描述

DOM型XSS-x

查看源码:
在这里插入图片描述
构造闭合

#' onclick="alert('hello')">

执行结果
在这里插入图片描述

XSS跨站脚本漏洞修复是保护网站免受潜在攻击的重要措施。下面是一些常见的修复方法: 1. 输入验证:对于用户输入的数据,进行严格的验证和过滤。使用白名单机制,只允许特定的字符和标签,过滤掉所有潜在的恶意脚本。 2. 输出编码:在将用户输入的数据输出到页面时,进行适当的编码操作,以防止浏览器将其解析为脚本代码。常用的编码方法包括HTML转义、URL编码等。 3. 设置HTTP头:使用安全的标头策略,如X-XSS-Protection、Content-Security-Policy等,以告诉浏览器如何处理潜在的XSS攻击。 4. Cookie安全措施:在设置Cookie时,使用HttpOnly属性,禁止通过脚本访问Cookie信息,从而减少XSS攻击的影响。 5. 安全沙箱:对于用户提供的富文本数据,使用合适的沙箱环境进行处理,限制其执行脚本的能力,确保不会造成恶意代码的注入。 6. 定期更新:保持软件和库的更新,及时修复已知的XSS漏洞。同时关注安全社区的最新消息,及时了解新的修复策略和最佳实践。 7. 高级防护措施:考虑使用Web应用防火墙(WAF)等高级安全工具来检测和阻止潜在的XSS攻击,提供额外的安全保护。 综上所述,修复XSS跨站脚本漏洞需要综合使用输入验证、输出编码、设置HTTP头、Cookie安全措施等多种方法,以加强网站的安全性。同时,定期更新软件和库,并采取高级防护措施有助于最大程度地降低XSS攻击风险。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值