文章目录
- 一、XSS是什么?
- 二、XSS漏洞原理
- 1.XSS和SQL注入的区别
- 2.反射型XSS
- 3.存储型XSS
- 4.DOM型XSS
- 5.防范xss
一、XSS是什么?
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。XSS跨站攻击和SQL注入,是WEB安全中常见攻击类型,稳居OWASPTOP10
XSS分为三种类型:反射型,存储型和DOM型。
二、XSS漏洞原理
1.XSS和SQL注入的区别
说到xss和sql注入,有同学就比较疑惑了,感觉它俩好似孪生兄弟,这里给大家说一下xss和sql注入的区别:
***a.XSS和SQL注入攻击中的攻击指令都是由黑客通过用户输入域注入,只不过XSS注入的是HTML代码(以后称脚本),而SQL注入注入的是SQL命令。
b.XSS和SQL注入攻击都利用了Web服务器没有对用户输入数据进行严格的检查和有效过滤的缺陷 。
c.XSS攻击盗取Web终端用户的敏感数据,甚至控制用户终端操作;SQL注入攻击盗取Web后台数据库中的敏感数据,甚至控制整个数据库服务器。
2.反射型XSS
反射型xss又称之为非持久型xss,这种攻击方式通常具有一次性。
我们以pikachu靶场为例:
随意输入字符,显示回复,按F12查看源码,发现所有字符原封不动输入到了p标签中
所以我们直接输入js代码,发现前端限制了语句长度,我们将其变长
我们输入js语句,语句顺利执行,回车即弹窗
这就是一个简单的反射型xss,后端没有进行存储,所以是一次性的。
3.存储型XSS
存储型xss又称持久型xss,攻击脚本被永久保存在目标服务器的数据库或文件中,具有很高的隐蔽性。
pikachu中我们输入, js代码就被存储,再次刷新仍然出现弹窗
4.DOM型XSS
DOM全称Document Object Model,使用DOM可以使得程序和脚本能够动态访问和更新文档的内容、结构以及样式。DOM型xss其实就是一种特殊类型的反射型xss,它是基于DOM文档对象模型的一种漏洞。可以把DOM结构理解为HTML的标签,通过DOM的整体结构构成下图的节点树,这个节点树的任意节点都可以通过js进行访问,所有节点都可以被修改,也可以创建或者删除节点。
所以DOM型xss可以在前端通过js渲染来完成数据的交互,达到插入数据造成xss脚本攻击,且不经过服务器,所以即使抓包无无法抓取到这里的流量,而反射性与存储型xss需要与服务器交互,这便是三者的区别。
还是以pikachu靶场为例:
我们首先输入带有特殊字符的参数,如下图可以看出前端没有过滤
我们来看看DOM类型的流程
首先通过<input id="text" name="text" type="text" value="">
将我们输入的值赋予给text,随后通过
function domxss(){var str = document.getElementById("text").value;document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";}
将text的内容赋值给str ,接下来将 str 的内容通过字符串拼接的方式写到了 a 标签的 href 属性中,a标签会写到 Id 为 dom的 div 标签中,这样就可以达到不与服务器端交互,只发生在客户端处理数据的阶段的目的。
我们构建payload'onclick="alert('xss')">
5.防范xss
A.过滤输入的数据
B.对输出到页面的数据进行相应的编码转换