XSS也是一种代码注入技术,劫持的是用户的浏览器
一、基础概览
Cross-Site Scripting 简称为 "CSS",为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。
XSS在OWASP TOP10的排名中一直属于前三,是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
XSS漏洞可以用来进行钓鱼攻击、前端js挖矿,用户cookie获取(篡改信息...),网页挂马,DOS攻击(频繁刷新界面),获取客户端信息(用户浏览历史,真实IP,开放端口),传播XSS跨站脚本蠕虫甚至可以结合浏览器自身的漏洞对用户主机进行远程控制等
分类
- 反射性XSS
- 存储型XSS
- DOM型XSS
危害程度
存储型(永久型) > 反射型 > DOM型
反射型:一次性(非持久)。一般出现在查询类页面等,访问了恶意的链接(短链接构造)。发送给用户让用户点击(邮件钓鱼等形式)
存储型:交互的数据会被存在数据库中,永久性存储。一般出现在留言板,论坛,信息发布,电子商城,注册等页面。
DOM型:不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性,也属于反射型
基础再巩固:
XSS是通过向 存在XSS漏洞的网站上注入了恶意代码,用户浏览并访问了该网站从而引发的一种漏洞。
反射型XSS:简单的将用户输入的数据 "反射" 给浏览器。引诱用户点击一个恶意链接,才能攻击成功,非持久性XSS。
用户恶意输入数据--->服务器--->用户访问--->用户浏览器解析执行
存储型XSS:用户输入数据永久 "存储" 在服务器端,稳定性强,每次访问都会被执行。
用户恶意输入数据--->服务器存储在数据库--->用户访问--->浏览器解析执行
DOM型XSS:纯前端漏洞,服务器端无法防御,前端通过 JS 操作DOM 中节点(遍历,获取,修改对应的节点,对象,值)实现。即可能是反射型,也可能是存储型。这种利用也需要受害者点击链接来触发,DOM型XSS是前端代码中存在了漏洞,而反射型和存储型是后端代码中存在了漏洞。
二、实验认知
反射型 XSS(get)
1 首先随便输入点内容,看回显吧!
2 什么也不输入,直接submit
3 输入kobe ,submit
通过以上现象我们发现,输入的内容,以get方式进行发送的。
4 构造链接(弹窗)
payload
<script>alert("xss")</script>
成功弹窗,存在XSS漏洞
5 总结
反射型 XSS 执行流程:用户输入--->后端服务器响应--->用户浏览器解析执行。利用用户对网站的信赖。
利用:构造恶意JS链接(带有跨站脚本URL伪装)--->诱导受害者点击--->攻击完成,一次性攻击。
场景:一般出现在查询类页面中
存储型 XSS
1 直接上payload
attack<script>alert("attack")</script>
成功弹窗,存在XSS漏洞
2 总结
存储型XSS漏洞和反射型形成原因一样,不同的是存储型XSS下攻击者可以将脚本注入到后台存储起来,构成更加持久的危害。
利用:每当有用户访问该站点就会中招,持久型攻击
场景:一般出现在留言板界面中
DOM型 XSS
1 根据要求点一下
2 看起来是个超链接,再点一下。根据浏览器的反应,应该是个跳转链接
3 输入内容,再点一下,提示404 not found,ok初步判断,跳转链接为我们输入的内容
4 查看网页源码,验证猜想
5 通过分析源代码,确认无疑( 用JS 操作 DOM元素),URL跳转终点就是我们输入的内容
6 构造闭合,实现弹窗,payload如下
#' onclick="alert('attack')"> 或 #' onmouseover="alert('DOM XSS')"> 或 #'><img src="#" onmouseover="alert('attack')"> 或 #'><img src="1.png" onerror="alert('waring')">
7 成功弹窗,存在XSS 漏洞
DOM型 XSS-X
1 老规矩,先点点再说,这里发现。。如下
2 再点击
3 输入内容再来一遍,ok,404 not found
4 查看源代码,虽然写的挺多,经过分析,跟原来没什么区别。
5 构造闭合,payload如下
#' onmouseover="alert('DOM XSS')">
6 成功弹窗,存在XSS 漏洞
DOM XSS 总结
DOM型XSS:纯前端漏洞,是一种特殊的反射型XSS,不与后台服务器产生数据交互,前端通过 JS 操作DOM 元素(遍历,获取,修改对应的节点,对象,值)实现。
类型:即可能是反射型,也可能是存储型。
利用:也需要受害者点击链接来触发
区别:DOM型XSS是前端代码中存在了漏洞,而反射型和存储型是后端代码中存在了漏洞。