0x01:XSS 是啥子

XSS:中文名称:跨站脚本,英文全称:Cross-Site-Scripting, 为了与 CSS 样式表区分开,故缩写为 XSS,这也更贴合 XSS 的核心思想,一切地方皆可插。

产生原因:主要是由于 WEB 应用程序对用户输入的过滤不足而产生的。攻击者可以利用该漏洞把恶意脚本代码注入到网页之中去,当其他用户访问浏览这些网页时,就会执行其中的恶意代码。受害用户可能会被窃取Cookie,会话劫持,钓鱼等各种攻击。

XSS 漏洞是属于前端漏洞,主要攻击的是前端网页,我们在之前的笔记中知道,前端三大剑客, HTML 、CSS、JavaSctipt 。这三大剑客驱动着页面,呈现的活灵活现。但是当程序对用户输入过滤不严,那么我们其实就可以将恶意代码嵌入到网页中去,然后诱导其他人去点击,我们其实可以执行很多危险操作,比如窃取目标 Cookie, 或是进行会话劫持,或是钓鱼操作等等。我们都知道 Cookie 都存储着重要的信息,当你窃取到别人的 Cookie 时,可以进行很多操作。比如窃取的是登录时的 Cookie ,那么你可以很轻松的通过这个 Cookie 登录目标的账户。

XSS 漏洞理解起来也不难,在学过前端基础知识之后,大家都一定有所了解,其实XSS本质是 JavaSctipt,当然也涉及到 HTML、CSS,但能执行危险操作的大多是JavaScript。

我先举个小例子,这个小例子就是一个简单的弹框,有对呀的前端基础知识,理解起来并不难,具体如下:

  1. <html>
  2. <head>XSS小例子</head>
  3. <body>
  4. <script>alert('I LOVE YOU ')</script>
  5. </body>
  6. </html>

image.png
我们来分析下,这个简单的小例子,这仅是一个 alert 弹窗,这是 XSS 的本质,在前端执行我们构造的任意代码,可以是很有危害的任意代码,但是我们常用弹窗,仅仅只是为了验证可能存在XSS 漏洞,弹窗本质并没有什么危害。

0x02: XSS的类型

存储型XSS、反射型XSS,DOM型XSS

0x03 存储型XSS

存储型XSS的攻击代码是保存在服务端(数据库),随着用户访问-数据库获取数据加载,输出在http响应中。

例如说一个场景:黑客在其他人的网站上写了一篇带有恶意JavaScript代码的文章,文章发表以后,所有访问该文章的用户,都会在他们的浏览器上执行黑客写入的恶意JavaScript代码。

存储型XSS效果图.jpg

跨站脚本(XSS)攻击 - 图3
存储型XSS的一个流程:
1、在留言板处输入内容,构造恶意代码
2、将输入的内容,提交给后端代码执行,后端对输入过滤不严格,然后执行 插入(Insert)数据库操作。
3、此时,我们的恶意代码已经保存在数据库,
4、不管何时何地何人查看这条留言,都会被执行恶意代码,除非数据库中删除这条恶意代码

0x04 反射型XSS

攻击代码在URL里,并且由服务器解析,输出在http响应中。

黑客需要诱惑用户点击一个恶意链接,触发XSS攻击。

跨站脚本(XSS)攻击 - 图4
反射型XSS的流程:

  1. 1、在输入点输入内容,构造恶意代码,输入点是以 GET 方式提交的,比如上面那个例子,我们可以在 URL 中看到输入的内容
  2. 2. 后端接受提交的数据,并没有进行输入进行相关的过滤
  3. 3.然后将其呈现给前端,浏览器执行了恶意代码

0x05 DOM型XSS

DOM XSS 与 反射XSS很像。

区别就是DOM的攻击代码是在URL中,并且使用客户端接收,输出在DOM节点中。

DOM型XSS效果图.jpg

0x06 不同类别之间的区别

XSS类型 存储型XSS 反射型XSS DOM型XSS
触发过程 1,黑客构造XSS脚本保存入数据库
2,正常用户访问携带XSS脚本的页面
正常用户访问携带XSS脚本的URL 正常用户访问携带XSS脚本的URL
触发点 数据库 URL URL
解析处 后端web应用 后端web应用 前端JavaScript
输出位置 HTTP响应中 HTTP响应中 动态构造的DOM节点
例如:js函数-innerHTML