XSS的分类

  • 非持久型
非持久型XSS也称反射型XSS。具体原理就是当用户提交一段代码的时候,服务端会马上返回页面的执行结果。那么当攻击者让被攻击者提交一个伪装好的带有恶意代码的链接时,服务端也会立刻处理这段恶意代码,并返回执行结果。如果服务端对这段恶意代码不加过滤的话,恶意代码就会在页面上被执行,攻击就成功了。举个例子,一般的网页是有搜索框的对吧,如果攻击者搜索一段带有html标签的字符串,搜索的结果就会以该形式显现在页面上,或者至少页面上会包含用户搜索的字符串,而如果我们提交一段精心构造的字符串时,并且服务端没有对其做任何处理时,XSS漏洞就产生了。
  • 持久型
持久型XSS也称存储型XSS。我们在浏览网页时都见过论坛、留言板之类的地方吧。他们有一个共同的特点就是每个用户都能提交自己的文本,并且都能被其他任何人看到。那么,当攻击者提交一段恶意脚本作为内容时,并且服务端不加过滤的话,这段恶意脚本会持久的存在在这个页面上,从而使每个访问这个页面的用户都会执行这段恶意代码。
  • 基于DOM的XSS
这种XSS攻击方式不同于非持久型XSS。非持久型XSS是通过在链接上添加js动态脚本来达到攻击的目的,而基于DOM的XSS则是在链接上添加一个带参数的DOM元素,将要执行的脚本语句写入这个DOM的特定事件中,通过触发事件来达到执行这段脚本语句的目的。

实验演示

本实验环境为:apache 2.4.4,php 5.4.16,mysql 5.6.12,chrome 59,ie 11,win7

1. 非持久型XSS

首先我们写一个客户端client.html和服务端server.php,如下图所示:
客户端代码:
客户端界面:
服务端代码:
构造链接:
http://localhost/server.php?search=%3Cscript%3Ealert(/test/)%3C/script%3E
简易非持久型XSS在IE11下的显示结果:
简易非持久型XSS在chrome下的显示结果
可以看到我们的代码'alert(/test/)'在IE 11下已被成功执行,而在chrome下则被浏览器拦截,无法执行,但是我们也可以通过一些字符串构造的方法绕过浏览器自带的安全防护。在下期的文章中我们会深入探讨这些方法。

2. 持久型XSS

要演示持久型XSS,这里我们先做了一个简易的留言板,服务端对提交的数据不进行任何编码,提交的数据直接存进数据库,前端用ajax从服务端读取数据。 当我们提交一条
<script>alert(/test XSS/)</script>
时,这条记录就会被显示在页面上,从下图可以看到我们的代码已执行成功。以后每个访问此页面的用户都会自动执行此代码。
持久型XSS演示:

3. 基于DOM的XSS

那么为了方便,我直接沿用了上面演示非持久型XSS的客户端和服务端,只不过我这里的请求链接变成了
http://localhost/server.php?search=%3Cimg%20src=1%20onerror=alert(/test/)%3E`
如下图所示: 在IE11上还是能够正常执行:
在chrome下则被浏览器拦截:
如果想隐藏的稍微好点,我们可以在图片中写一句样式style="height:0;width:0",这样连图片的影儿都看不到了。

总结

经过了上面的三个实验演示,我们可以总结出三种XSS攻击方式的隐蔽性和有效性从强到弱是:持久型XSS>基于DOM的XSS>非持久型XSS。
另外,我们在实验中也碰到了XSS被浏览器拦截的情况,并且在实际情况中,服务端也会对我们提交上来的数据做一些编码处理,导致有时我们的XSS攻击并不是那么的有效,在下期文章中我们会对绕过诸如此类的安全防护做进一步的研究探讨。

【转载】XSS学习笔记的更多相关文章

  1. [转载]Log4net学习笔记

    Log4net 学习笔记: 主要是根据apache站点整理的: 原文链接:http://logging.apache.org/log4net/release/sdk/ http://logging.a ...

  2. [转载]pytest学习笔记

    pytest学习笔记(三)   接着上一篇的内容,这里主要讲下参数化,pytest很好的支持了测试函数中变量的参数化 一.pytest的参数化 1.通过命令行来实现参数化 文档中给了一个简单的例子, ...

  3. 转载-python学习笔记之输入输出功能读取和写入数据

    读取.写入和 Python 在 “探索 Python” 系列以前的文章中,学习了基本的 Python 数据类型和一些容器数据类型,例如tuple.string 和 list.其他文章讨论了 Pytho ...

  4. 转载-Python学习笔记之文件读写

    Python 文件读写 Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件 ...

  5. XSS学习笔记(一个)-点击劫持

    所谓XSS这个场景被触发XSS地方,在大多数情况下,攻击者被嵌入在网页中(问题)该恶意脚本(Cross site Scripting),这里的攻击始终触发浏览器端,攻击的者的目的.一般都是获取用户的C ...

  6. 转载——JavaScript学习笔记:取数组中最大值和最小值

    转载自:http://www.w3cplus.com/javascript/calculate-the-max-min-value-from-an-array.html. 取数组中最大值 可以先把思路 ...

  7. 转载-python学习笔记之文件I/O

    Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...

  8. 转载-python学习笔记之常用模块用法分析

    内置模块(不用import就可以直接使用)   常用内置函数   help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像函数一样调用 repr(ob ...

  9. XSS学习笔记(四)-漏洞利用全过程

    <script type="text/javascript" reload="1">setTimeout("window.location ...

随机推荐

  1. JAVA多线程---volatile关键字

    加锁机制既可以确保可见性又可以保证原子性,而volatile变量只能确保可见性. 当把变量声明为volatile时候 编译器与运行时都会注意到这个变量是共享的,不会将该变量上的操作与其他内存操作一起重 ...

  2. win32多线程编程

    关于多线程多进程的学习,有没有好的书籍我接触的书里头关于多线程多进程部分,一是<操作系统原理>里面讲的相关概念   一个是<linux基础教程>里面讲的很简单的多线程多进程编程 ...

  3. C#最基本的小说爬虫

    新手学习C#,自己折腾弄了个简单的小说爬虫,实现了把小说内容爬下来写入txt,还只能爬指定网站. 第一次搞爬虫,涉及到了网络协议,正则表达式,弄得手忙脚乱跑起来效率还差劲,慢慢改吧. 爬的目标:htt ...

  4. SQLserver2008r2安装过程

    首先,下载SQLserver2008的安装包,下载完成打开是以下界面 点击开始安装,随着安装进程,点下一步 . 接着来到设置角色的过程,点击SQL功能安装 然后按下一步,来到功能选择,点击" ...

  5. Sublime 3 打造成 Python/Django IDE开发利器

    Sublime Text 是一款非常强大的文本编辑器, 下面我们介绍如何将 Sublime Text 3 打造成一款 Python/Django 开发利器:   1. 安装 Sublime Text ...

  6. 23.Linux-块设备驱动(详解)

    通过上节的块设备驱动分析,本节便通过内存来模拟块设备驱动  参考内核自带的块设备驱动程序: drivers/block /xd.c drivers/block /z2ram.c 1.本节需要的结构体如 ...

  7. IDL 矩阵运算

    矩阵相乘,A#B表示A的列乘以B的行,要求A的行数必须跟B的列数一致 IDL> A=[[0,1,2],[3,4,5]] IDL> B=[[0,1],[2,3],[4,5]] IDL> ...

  8. iOS如何提高页面流畅度

    A.提高CPU性能 对象创建1.尽量用轻量的对象代替重量的对象,比如CALayer 比 UIView 要轻量许多,如果不考虑交互事件的话,可以选择CALayer.2.Storyboard和xib加载对 ...

  9. asp.net或javascript判断是否手机访问

    /// <summary> /// 判断手机用户UserAgent /// </summary> /// <returns></returns> pri ...

  10. WinForm 读写配置文件

    //读配置文件 方法(1) //ConfigurationManager.RefreshSection("appSettings"); //强制重新载入 string settin ...