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。
我先举个小例子,这个小例子就是一个简单的弹框,有对呀的前端基础知识,理解起来并不难,具体如下:
<html>
<head>XSS小例子</head>
<body>
<script>alert('I LOVE YOU ')</script>
</body>
</html>
我们来分析下,这个简单的小例子,这仅是一个 alert 弹窗,这是 XSS 的本质,在前端执行我们构造的任意代码,可以是很有危害的任意代码,但是我们常用弹窗,仅仅只是为了验证可能存在XSS 漏洞,弹窗本质并没有什么危害。
0x02: XSS的类型
存储型XSS、反射型XSS,DOM型XSS
0x03 存储型XSS
存储型XSS的攻击代码是保存在服务端(数据库),随着用户访问-数据库获取数据加载,输出在http响应中。
例如说一个场景:黑客在其他人的网站上写了一篇带有恶意JavaScript代码的文章,文章发表以后,所有访问该文章的用户,都会在他们的浏览器上执行黑客写入的恶意JavaScript代码。
存储型XSS的一个流程:
1、在留言板处输入内容,构造恶意代码
2、将输入的内容,提交给后端代码执行,后端对输入过滤不严格,然后执行 插入(Insert)数据库操作。
3、此时,我们的恶意代码已经保存在数据库,
4、不管何时何地何人查看这条留言,都会被执行恶意代码,除非数据库中删除这条恶意代码
0x04 反射型XSS
攻击代码在URL里,并且由服务器解析,输出在http响应中。
黑客需要诱惑用户点击一个恶意链接,触发XSS攻击。
反射型XSS的流程:
1、在输入点输入内容,构造恶意代码,输入点是以 GET 方式提交的,比如上面那个例子,我们可以在 URL 中看到输入的内容
2. 后端接受提交的数据,并没有进行输入进行相关的过滤
3.然后将其呈现给前端,浏览器执行了恶意代码
0x05 DOM型XSS
DOM XSS 与 反射XSS很像。
区别就是DOM的攻击代码是在URL中,并且使用客户端接收,输出在DOM节点中。
0x06 不同类别之间的区别
XSS类型 | 存储型XSS | 反射型XSS | DOM型XSS |
---|---|---|---|
触发过程 | 1,黑客构造XSS脚本保存入数据库 2,正常用户访问携带XSS脚本的页面 |
正常用户访问携带XSS脚本的URL | 正常用户访问携带XSS脚本的URL |
触发点 | 数据库 | URL | URL |
解析处 | 后端web应用 | 后端web应用 | 前端JavaScript |
输出位置 | HTTP响应中 | HTTP响应中 | 动态构造的DOM节点 例如:js函数-innerHTML |