前端Hack之XSS攻击个人学习笔记

web安全 2019-11-10

本文作者:Yunen

此篇系本人两周来学习 XSS 的一份个人总结,实质上应该是一份笔记,方便自己日后重新回来复习,文中涉及到的文章我都会在末尾尽可能地添加上,此次总结是我在学习过程中所写,如有任何错误,敬请各位读者斧正。其中有许多内容属于相关书籍、文章的部分摘取,如有侵权,请联系我修改。(asp-php#foxmail.com)

1) 什么是 XSS?

XSS (Cross-Site Script, 跨站脚本)是由于 web 应用程序对用户的输入过滤不足而产生的一种漏洞。攻击者可以利用网站漏洞把恶意的脚本代码注入到网页之中,当其他用户浏览这些带有恶意代码的网页时就会执行其中的恶意代码,对受害者产生各种攻击。

如果对以上描述还不是很了解的话,可以参考百度百科

余弦大大xisigr大大的书籍《Web 前端安全技术揭秘》第三章中这样说道:

跨站脚本的重点不在“跨站”上,而应该在“脚本”上...因为这个“跨”实际上属于浏览器的特性,而不是缺陷,造成“跨”的假象是因为绝大多数的 XSS 攻击都会采用嵌入一段远程或者说第三方域上的脚本资源。

确实,当攻击者的服务器上的 js 嵌入到受害者的页面,至于接下来的攻击就是关于“脚本”的事了。

2) XSS 可以带来哪些危害?

对于 XSS 攻击的危害,大多数的人们却没有正确的认识,实际上攻击者可以利用 XSS 攻击造成巨大的危害。比如:

  • 网页挂马;
  • 盗取 Cookie;
  • DoS 攻击;
  • 钓鱼攻击;
  • 蠕虫攻击;
  • 劫持用户 web 行为;
  • 结合 CSRF 进行针对性攻击;
  • ······

这些都是可以利用 XSS 漏洞来达成的。

3) XSS 类型

目前的 XSS 总共可以分为三种类型:

  • 反射型(也叫非持久型)
  • 存储型(也叫持久型)
  • DOM 型

PS:前两种 XSS 都会与服务器产生交互,后一种不会产生交互。(某安全大佬面试)

反射型 XSS

反射型 XSS,也称非持久型 XSS,最常见也是使用最广的一种。在反射型 XSS 中,payload 一般存在于网页的 Url中,只用户单击时触发,只执行一次,非持久化,故称反射型 XSS。攻击者发送恶意 Url 链接让受害者点击(一般会对 payload 部分进行处理,如:编码转换和短域名跳转)

由于篇幅问题,关于反射型 XSS 我就不做过多简述。

有的人认为反射型 XSS 需要用户已经登陆的情况下才能利用,其实不然。我们可以通过反射型 xss 让浏览器远程嵌入我们的 js 文件,然后配合浏览器漏洞进行 RCE 攻击。这里给出个相近的例子:

《记一次从DOM型XSS到RCE过程》:

https://xz.aliyun.com/t/3919

存储型 XSS

存储型 XSS,也称持久型 XSS,攻击者首先将恶意 javascript 代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意 javascript 页面就会执行恶意代码,不需要用户点击特定 Url 就能执行,故存储型 XSS 比反射型 XSS 更具威胁性。--- 《XSS跨站脚本攻击剖析与防御》

存储型 XSS 与反射型 XSS 最大的区别就在于提交的 XSS 代码会储存于服务端,下次再访问目标页面时不用再提交 XSS 代码。---《Web前端黑客技术揭秘》

DOM 型 XSS

许多朋友对反射型 XSS 和存储型 XSS 都比较清楚,可是却不太了解什么是 DOM 型 XSS,没关系,看完这里你就应该会对 DOM 型 XSS 有个大概认识 DOM, 即 Document Object Model(文件对象模型)的缩写,关于 DOM 的概念想了解的朋友可以在百度百科得到相应的解答。

DOM 型 XSS 是如何产生的?我们知道,客户端 javascipt 是可以访问浏览器的 DOM 文本对象模型,如果没有经过适当的过滤和消毒,那么应用程序可能会受到基于 DOM 的 XSS 攻击。

的《白帽子讲 Web 安全》是这样讲的:

通过修改页面的 DOM 节点形成的 XSS,称之为 DOM Based XSS,也就是 DOM 型 XSS。

举个简单的例子(来自《Web 前端黑客技术揭秘》):


本文由 信安之路 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论