网络钓鱼、获取Cookie、强制弹窗获取流量、网站挂马(将恶意代码嵌入程序,用户浏览页面时计算机将被嵌入木马)、发送垃圾信息或广告、传播蠕虫病毒
漏洞原理
XSS(Cross Site Scripting),是一种跨站的脚本攻击,曾简称为CSS, 后改为XSS。
攻击者从Web页面插入恶意的JavaScript代码,当用户浏览页面时则会触发其代码在客户端执行,从而达到恶意攻击的目的。
所有漏洞的本质其实基本就是用户输入,程序再输出。如value=""处
漏洞分类
1、反射型
XSS代码常常出现在URL请求中,当用户访问带有XSS代码的URL请求时,服务器端接收请求并处理,然后将带有XSS代码的数据返回给浏览器,浏览器解析该段带有XSS代码的数据并执行,整个过程就像一次反射,故称为反射型XSS。
攻击方式:攻击者通过电子邮件等方式将包含xss代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有xss代码的数据发送给目标用户的浏览器,浏览器解析这段带有xss代码的恶意脚本后,就会触发xss漏洞。
2、存储型
XSS代码被存储到服务器端,因此允许用户存储数据到服务器端的Web应用程序可能存在该类型XSS漏洞。攻击者提交一段XSS代码后,服务器接收并存储,当其他用户访问包含该XSS代码的页面时,XSS代码被浏览器解析并执行。
攻击方式:这种攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器的后端存储器中 。 当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行 。所以需要浏览器从服务器载入恶意的xss代码,才能真正触发xss。
3、DOM型
DOM全称Document Object Model,中文为文档对象模型,使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。HTML 的标签都是节点,而这些节点组成了 DOM 的整体结构一一节点树。通过HTML DOM,树中的所有节点均可通过JavaScript进行访问。所有HTML元素(节点)均可被修改,也可以创建或删除节点。
网页的生成及修改:
在网站页面中有许多元素,当页面到达浏览器时,浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。
可以通过JS脚本对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的xss漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段
其中攻击的payload由于修改受害者浏览器页面的DOM树而执行的。其特殊的地方就是payload在浏览器本地修改DOM树而执行,并不会传到服务器上,这也就使得DOM型XSS比较难以检测。
攻击方式:用户请求一个经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。
触发条件
1、用户(攻击者)能在客户端控制输入
2、原程序拼接了在客户端输入的代码并能够执行
产生XSS的地方
搜索框留言板、聊天室等需要用户输入信息的地方都可能存在发生XSS的风险,只要没有对用户的输入进行严格的过滤,就会遭受XSS的攻击。
XSS利用代码
<script>alert(/xss/)</script> 常规Payload
<script>confirm('xss')</script> 带取消按钮的弹窗
<script>prompt('xss')</script> 带标题框、输入框及取消按钮的弹窗
'-prompt(1)-'
<img src='#' onmouseover='alert(/xss/)'> onmousever为鼠标悬停触发操作
<img src='#' onerror='alert("XSS测试")'> 文档错误触发
<input type="text" onkeydown="alert(/xss/)"> 点击后键盘按键触发
<input type="button" onclick="alert(/xss/)" value="传送门"> 单击
<a href="Javascript:alert(/xss/)">xss</a> 超链接伪协议的方式
XSS利用凭证条件
1、需要后台管理员访问页面;
2、Cookie未失效