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. Opengl4.5 中文手册—F

    索引 A      B    C      D     E     F     G H      I     J      K     L     M     N O      P    Q      ...

  2. axios 学习笔记

    官方文档地址:https://github.com/axios/axios axios 是一个基于 Promise 的HTTP库,可以用在浏览器和 node.js 中 特性: • 从浏览器发起 XML ...

  3. Spring Boot Document Part I

    最近准备学习Spring Boot 随便翻一下官方的文档 Part I. Spring Boot Documentation Spirng Boot简短介绍,作为接下来内容的导航,可快速预览本章内容. ...

  4. 数据分析前戏:ipython使用技巧(上)

    不一定非得使用Jupyter Notebook,试试ipython命令行 安装 ipython 我只试过Windows 10环境下的. 1.安装python安装包之后,应该就有ipython了. 2. ...

  5. springmvc入门程序

    学习java有好几个月了,今天才想起每天学习的东西还是会忘记,所以准备开始每天把头一天学习的东西写在博客上,首先也不会写博客,文笔比较差劲,但是为了学习和巩固,也方便以后可以查看.温习. 昨天看了下s ...

  6. Java EE开发环境——MyEclipse2017破解 和 Tomcat服务器配置

    Java EE开发,我们可以搭建如下开发环境: 底层运行环境:jdk 和 jre. Web服务器:Tomcat 后台数据库:SQL Server 可视化集成开发环境:MyEclipse Java EE ...

  7. nodejs后台集成富文本编辑器(ueditor)

    1 下载ueditor nodejs版本 2 复制public目录下面的文件 到项目静态资源public文件夹下 3 在项目根目录创建ueditor文件夹 要复制进来的内容为 4 在根目录的 uedi ...

  8. 【转】Python正则表达式指南

    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...

  9. HDU2089 暴力打表

    62的判断就是倒过来没有26 hdu2089 #include<cstdio> #include<cstdlib> #include<iostream> #incl ...

  10. Oracle Database 10g Express Edition系统文件损坏的解决办法

    1.检查错误代码:ora-10010 亦或是ora-10003,上网找响应的解决办法: 异常状态:登陆不上 常用的方法解决 (1)进入Oracle命令行模式 (2)Shutdown immedaite ...