原理
XSS:跨站脚本攻击
是一种注入攻击,当web应用对用户输入过滤不严谨时,攻击者写入恶意的脚本代码到网页中,如果用户访问了含有恶意代码的网页,恶意脚本就会被浏览器解析执行并导致用户被攻击。
常见的危害包括:
- 网络钓鱼,包括获取各类用户账号
- 窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;
- 劫持用户(浏览器)会话,从而执行任意操作,例如非法转账、强制发表日志、电子邮件等
- 强制弹出广告页面、刷流量等
- 网页挂马;
- 进行恶意操作,如任意篡改页面信息、删除文章等
- 进行大量的客户端攻击,如ddos等
- 获取客户端信息,如用户的浏览历史、真实ip、开放端口等
- 控制受害者机器向其他网站发起攻击;
- 结合其他漏洞,如csrf,实施进步危害;
- 提升用户权限,包括进一步渗透网站
- 传播跨站脚本蠕虫等
xss常见出现的地方
数据交互的地方
post、get、cookie、headers
反馈与浏览
富文本编辑器
各类标签插入和自定义
数据输出的地方
用户资料
关键词、标签、说明
文件上传
防御手段
对输入进行过滤
对输出进行转义
反射型XSS
非持久型XSS。这种攻击方式往往具有一次性,只在用户单击时触发。跨站代码一般存在链接中,当受害者请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码通常不存储在服务端。
常见注入点:
网站的搜索栏、用户登录入口、输入表单等地方,常用来窃取客户端cookies或钓鱼欺骗。
漏洞产生原因一般是网站只是简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输岀,导致输岀的数据中存在可被浏览器执行的代码数据
攻击方式
攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接受该目标用户的请求并进行处理,然后服务器把带有XSS的代码发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。
由于此种类型的跨站代码存在于URL中,所以黑客通常需要通过诱骗或加密变形等方式将存在恶意代码的链接发给用户,只有用户点击以后才能使得攻击成功实施。
反射型XSS攻击的流程如下:
- 攻击者寻找具有漏洞的网站
- 攻击者给用户发了一个带有恶意字符串的链接
- 用户点击了该链接
- 服务器返回HTML文档,此时该文档已经包含了那个恶意字符串
- 客户端执行了植入的恶意脚本,XSS攻击就发生
存储型XSS
持久型XSS,更具有威胁性。攻击脚本将被永久的存放在目标服务器的数据库或文件中。这是利用起来最方便的跨站类型。跨站代码存储于服务端。
常见注入点
论坛、博客、留言板、网站的留言、评论、日志等交互处。
造成漏洞原因一般是由于Web应用程序对用户输入数据的不严格,导致Web应用程序将黑客输入的恶意跨站攻击数据信息保存在服务端的数据库或其他文件形式中。
攻击方式
攻击者在发帖或留言的过程中,将恶意脚本连同正常信息一起注入到发布内容中。随着发布内容被服务器存储下来,恶意脚本也将永久的存放到服务器的后端存储器中。当其他用户浏览这个被注入了 恶意脚本的帖子时,恶意脚本就会在用户的浏览器中得到执行。
存储型ⅩSS攻击的流程如下
- 用户提交了一条包含XSS代码的留言到数据库
- 当目标用户查询留言时,那些留言的内容会从服务器解析之后加载出来
- 浏览器发现有XSS代码,就当做正常的HTML和JS解析执行
DOM型XSS
DOM是文档对象模型Document Object Model。它是HTML文档的对象表示,同时也是外部内容(例如javascript)与html元素之间的接口。解析树的根节点是“document”对象。使用DOM使程序和脚本能够动态访问和更新文档的内容、结构和样式。它是基于DOM文档对象的一种漏洞,并且DOM型XSS是基于JS上的,并不需要与服务器进行交互。
其通过修改页面DOM节点数据信息而形成的ⅩSS跨站脚本攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的 Javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。
一种基于DOM的跨站,这是客户端脚本本身解析不正确导致的安全问题
注入点
通过js脚本对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以DOM动态修改页面的内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所 以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。
攻击方式
用户请求一个经过专门设计的URL,它由攻击者提供,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本,当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存 在XSS漏洞。
攻击流程是这样的:
- 攻击者寻找具有漏洞的网站
- 攻击者给用户发了一个带有恶意字符串的链接
- 用户点击了该链接
- 服务器返回HTML文档,但是该文档此时不包含那个恶意字符串
- 客户端执行了该HTML文档里的脚本,然后把恶意脚本植入了页面
- 客服端执行了植入的恶意脚本,XSS攻击就发生了
反射型XSS与DOM型区别
反射型XSS攻击中,服务器在返回HTML文档的时候,就已经包含了恶意的脚本;
DOM型ⅩSS攻击中,服务器在返回HTML文档的时候,是不包含恶意脚本的;恶意脚本是在其执行了非恶意脚本后,被注入到文档里的
通过JS脚本对对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以DOM动态修改页面的内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。