最新公告  | 
  • CTRL + D 加入收藏不迷路哦

  • 欢迎您光临码云笔记网,一个关注WEB前端开发的个人技术博客!

Web安全 区分并理解XSS攻击方式(一)

什么是XSS攻击?

XSS攻击又称CSS,全称Cross Site Script(跨站脚本攻击),其原理是攻击者向有XSS漏洞的网站中输入恶意的HTML代码,当用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。XSS攻击类似于SQL注入攻击,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。XSS是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式。

xss攻击可以分成两种类型:一种是非持久型XSS攻击一种是持久型XSS攻击

非持久型xss攻击:顾名思义,非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。

持久型XSS攻击:持久型XSS,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。

也可分为两种方式:

  1. 反射型:经过后端,不经过数据库
  2. 存储型:经过后端,经过数据库

反射型

发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,xss代码随响应内容一起传回给浏览器,最后浏览器执行XSS代码。这个过程像一次反射,故叫反射型XSS。

接下来通过构建node应用来演示反射型xss攻击

Mkdir mybj
cd mybj
mkdir xss
cd xss
express -e ./

-e:  使用 ejs作为模板引擎

然后安装依赖

npm install

然后安装依赖

正常情况下在XSS目录下执行npm start整个服务就可以正常启动了

安装完成后进入目录看一下代码

cd ../

目录结构

routes下的index.js就是服务端写接口的地方。

routes下的index.js

然后viewsindex.ejs就是我们视图部分

views中index.ejs就是我们视图部分

接下来我们启动一下服务

npm start

在浏览器中输入localhost:3000,如下图,显示express欢迎页面表示我们安装成功

express欢迎页面

到这里我们这个服务就简单搭建起来了。

接下来我们来演示XSS反射型攻击

首先我们在routes/index.js接口中,这里是用来解析search内容,在这里我们设置一个字段XSS,通过req来获取用户在url中写的search内容xss:req.query.xss,如下代码

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express',xss:req.query.xss });
});

module.exports = router;

然后在视图层views/index.ejs 输出我们显示的内容,代码如下:

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
    <div class="mybj">
	<%- xss -%>
    </div>
  </body>
</html>

<%-xss-%>表示服务端用模板的方式把刚才接口中下发的字段解析出来

注意:为什么<%-中用的是”-”号而不是”=”号呢?如果是”=”号会有什么区别呢?这里呢其实就是说要不要对html进行转义,如果我这个内容允许输出html,那么我们这里就不用进行转义,所以用”-”号。

然后我们重启一下服务,让我们的接口生效,看一下效果。

我们在浏览器中输入”?xss=mybj123.com”,然后在页面上就会输出我们输入的search内容,如下图

express效果展示

接下来我们在输入一些具有攻击性的脚本,比如 ?xss=<img src=”null” onerror=”alert(123)”/>

输入攻击性的脚本展示

从上图我们可以看到,我们输入的img已经成功加入到页面上了,因为我们输入的src地址是null,没有空地址,但是alert(123)没有执行。当我们这个图片地址没有成功加载时,它会自动触发onerror,那为什么这里这个脚本没有执行呢?我们来看一下console面板,答案就在这里。

console面板

从上图我们可以知道,XSS具有XSS的这个能力脚本是被浏览器所拦截的,也就是说浏览器帮你自动做了拦截,换句话说如果我们把这个拦截关掉的话是不是攻击就可以生效了呢?我们来看一下如何关掉XSS拦截。

我们在接口调试中加入

res.set('X-XSS-Protection',0);

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.set('X-XSS-Protection',0);
  res.render('index', { title: 'Express',xss:req.query.xss });
});

module.exports = router;

也就是说把X-XSS-Protection拦截响应设置成0,即不要浏览器对它进行拦截,保存后,我们重启一下服务,看看效果如何

X-XSS-Protection拦截响应设置成0

这个时候你会发现alert被成功执行,所以在这个阶段反射型的xss攻击已经生效了。

讲到这儿有的小伙伴可能要问了,这里只可以写img吗,当然不是了,任何其他脚本都可以。比如:

?xss=<p onclick=”alert(‘点我’)”>点我</p>

如图:

点我看看

比如一个黑客想在页面中植入一部分内容,也就是篡改页面内容,从而破坏页面完整结构,你会在页面上看到具有引诱性的文字,当用户点击后,URL中所具备的编写的XSS脚本已经执行,这个时候就是整个网站具有被攻击的一部分了。那么,当黑客把这个地址通过其他渠道发送给用户,用户点击具有引诱性的文字后,这个XSS攻击从攻击到受害流程就走完了。

上面我们通过img方式是自动触发的,p标签方式是引诱触发的,还有一种形式是大家比较关注的,就是iframe方式,如下图:

iframe攻击方式

从上图可以看到,这个攻击方式使你的页面会嵌入一个页面。如果xss共计代码是这样写的,它就会实现各种广告的插入,这是最简单也是最常见的攻击方式。这样他就可以在你的页面插入任何他想插入的广告。

存储型

存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务端(数据库,内存,文件系统等),下次请求目标页面时不用在提交XSS代码。

在反射型XSS攻击中,通过在脚本中获取url参数来做解析xss:req.query.xss。如果是存储型XSS攻击,端口代码可能就是sql语句了xss:sql(),通过读数据库,读缓存最后返回,至于视图渲染这一块两攻击方式渲染流程是一样的。

这里给大家一个疑问,存储型的攻击脚本是如何到达服务器端存储系统里面的呢?

1. 本站所有免费资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!
2. 本站不保证所提供下载的免费资源的准确性、安全性和完整性,免费资源仅供下载学习之用!如有链接无法下载、失效,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或技术教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
5. 加入前端开发QQ群:565733884,我们大家一起来交流技术!
码云笔记 » Web安全 区分并理解XSS攻击方式(一)

发表评论