XSS漏洞

1、XSS简介

作为一种HTML注入攻击,XSS攻击的核心思想就是在HTML页面中注入恶意代码,而XSS采用的注入方式是非常巧妙的。

在XSS攻击中,一般有三个角色参与:攻击者、目标服务器、受害者的浏览器。

由于有的服务器并没有对用户的输入进行安全方面的验证,攻击者就可以很容易地通过正常的输入手段,夹带进一些恶意的HTML脚本代码。当受害者的浏览器访 问目标服务器上被注入恶意脚本的页面后,由于它对目标服务器的信任,这段恶意脚本的执行不会受到什么阻碍。而此时,攻击者的目的就已经达到了。

下面我们以一段简单的JavaScript脚本为例,来描述整个XSS攻击的过程:

    ` <script>alert(document.cookie);</script>`

上面这段脚本的执行具体内容就是弹出一个对话框显示用户的Cookie信息。攻击者在向目标服务器的某个页面进行数据输入的过程中,通过正常的输入方式夹带进这段脚本。假如一切正常的时候,生成的页面代码如下形式:

         <html>

         …

         text           //正常输入的数据

         …

         </html>

如果用户的输入为text<script>alert(document.cookie);</script>,而目标服务器又没有对这个输入进行检验的话,则会生成如下形式的页面代码:

         <html>

         …

         text

         <script>alert(document.cookie);</script>

         …

         </html>

可以看到,这段脚本已经成功嵌入到该页面当中。当受害浏览器访问这个页面的时候,这段脚本也将被认为是页面的一部分,从而得到执行,即弹出对话框显示受害浏览器的Cookie信息。

当然,上面的脚本只是一个简单的例子,只要你愿意,可以尽管注入任意的脚本代码,而这些脚本代码也将能够在受害的浏览器上得到执行。剩下的关键就是如何让更多受害者去浏览这个被注入脚本的页面了,而这方面就属于社会工程学的范畴了,作为一名骇客,坑蒙拐骗的功底还是要有的。

二、XSS攻击的分类

根据XSS脚本注入方式的不同,我们可以对XSS攻击进行简单的分类。其中,最常见的就数反射型XSS和存储型XSS了。

1.反射型XSS

反 射型XSS,又称非持久型XSS。之所以称为反射型XSS,则是因为这种攻击方式的注入代码是从目标服务器通过错误信息、搜索结果等等方式“反射”回来 的。而称为非持久型XSS,则是因为这种攻击方式具有一次性。攻击者通过电子邮件等方式将包含注入脚本的恶意链接发送给受害者,当受害者点击该链接时,注 入脚本被传输到目标服务器上,然后服务器将注入脚本“反射”到受害者的浏览器上,从而在该浏览器上执行了这段脚本。

比如攻击者将如下链接发送给受害者:

http://www.targetserver.com/search.asp?input=<script>alert(document.cookie);</script>

当 受害者点击这个链接的时候,注入的脚本被当作搜索的关键词发送到目标服务器的search.asp页面中,则在搜索结果的返回页面中,这段脚本将被当作搜 索的关键词而嵌入。这样,当用户得到搜索结果页面后,这段脚本也得到了执行。这就是反射型XSS攻击的原理,可以看到,攻击者巧妙地通过反射型XSS的攻 击方式,达到了在受害者的浏览器上执行脚本的目的。由于代码注入的是一个动态产生的页面而不是永久的页面,因此这种攻击方式只在点击链接的时候才产生作 用,这也是它被称为非持久型XSS的原因。

2.存储型XSS

存储型XSS,又称持久型XSS,他和反射型XSS最大的不同就是,攻击脚本将被永久地存放在目标服务器的数据库和 文件中。这种攻击多见于论坛,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入到帖子的内容之中。随着帖子被论坛服务器存储下来,恶意脚本也永久地 被存放在论坛服务器的后端存储器中。当其它用户浏览这个被注入了恶意脚本的帖子的时候,恶意脚本则会在他们的浏览器中得到执行,从而受到了攻击。

可 以看到,存储型XSS的攻击方式能够将恶意代码永久地嵌入一个页面当中,所有访问这个页面的用户都将成为受害者。如果我们能够谨慎对待不明链接,那么反射 型的XSS攻击将没有多大作为,而存储型XSS则不同,由于它注入的往往是一些我们所信任的页面,因此无论我们多么小心,都难免会受到攻击。可以说,存储 型XSS更具有隐蔽性,带来的危害也更大,除非服务器能完全阻止注入,否则任何人都很有可能受到攻击。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏蓝天

不再担心日志文件过大:通用日志滚动脚本

log_rotater.zip #!/bin/sh # https://github.com/eyjian/mooon/blob/master/mooo...

1742
来自专栏木子昭的博客

免代理下载安装纯净Chrome插件离线包

Chrome的插件非常好用, 作者还为此在简书开了一个文集Chrome插件英雄榜, 用于详细介绍一些小众插件的使用方法

2641
来自专栏JadePeng的技术博客

Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现

前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇到一个问题,jenkins构建出来的镜像部署后,需...

4038
来自专栏猿人谷

CentOS7安装GitLab、汉化、邮箱配置及使用

一.GitLab简介 GitLab是利用Ruby On Rails开发的一个开源版本管理系统,实现了一个自托管的Git项目仓库,是集代码托管,测试,部署...

2877
来自专栏吴伟祥

系统服务管理工具 systemd 原

在RHEL 7.x/CentOS 7.x版本中,一个重要的改变就是 使用systemd 管理机制,

1233
来自专栏用户2442861的专栏

解决stackoverflow打开慢不能注册登录

问题原因:并不是stackoverflow被墙,而是因为stackoverflow用了google的api,而Google在天朝是用不了的,所以才导致像stac...

4261
来自专栏cnblogs

基于ko-easyui实现的PC前端模板功能完善

上一篇博客我向大家介绍了基于ko-easyui实现的开发模板,博客地址:https://cloud.tencent.com/developer/article/...

2802
来自专栏猿人谷

CentOS7安装GitLab、汉化、邮箱配置及使用

GitLab是利用Ruby On Rails开发的一个开源版本管理系统,实现了一个自托管的Git项目仓库,是集代码托管,测试,部署于一体的开源git仓库管理...

4040
来自专栏cvm功能

通过控制台vnc方式登录云主机

1)打开控制台,点击到云服务器的实例一栏,找到要登录的云主机,点击最右侧的操作栏的登录按钮。

4.2K11
来自专栏FreeBuf

OpenVAS开源风险评估系统部署方案

OpenVAS,即开放式漏洞评估系统,是一个用于评估目标漏洞的杰出框架。功能十分强大,最重要的是,它是“开源”的——就是免费的意思啦~ 它与著名的Nessus“...

5627

扫码关注云+社区

领取腾讯云代金券