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. 在 macOS High Sierra 10.13 搭建 PHP 开发环境

    2017 年 9 月 26 日,苹果公司正式发布了新一代 macOS,版本为 High Sierra (11.13). macOS High Sierra 预装了 Ruby(2.3.3).PHP(7. ...

  2. js 各种循环的区别与用法(for in,forEach,for of)

    1,forEach循环   不能跳过或者终止循环 const a = ["a","ss","cc"] a.dd="11" ...

  3. Tomcat启动错误【Error listenerStart】

    今天启动Tomcat启动不了,报以下错: org.apache.catalina.core.StandardContext startInternal SEVERE: Error listenerSt ...

  4. 跨主机使用 Rex-Ray volume - 每天5分钟玩转 Docker 容器技术(77)

    上一节我们在 docker1 上的 MySQL 容器中使用了 Rex-Ray volume mysqldata,更新了数据库.现在容器已经删除,今天将演示在 docker2 中重新使用这个卷. 在 d ...

  5. 深度学习框架caffe在macOS Heigh Sierra上安装过程实录

    第一步.安装依赖库 brew install -vd snappy leveldb gflags glog szip lmdb brew tap homebrew/science brew insta ...

  6. CSS div阴影效果

    <div class="image"><img src="default.jpg" /></div> .image{box- ...

  7. ZOJ1171

    错误代码先放这 #include<cstdio> #include<cstdlib> #include<iostream> #include<cstring& ...

  8. Java web AJAX入门

    一:AJAX简介 AJAX :Asynchronous JavaScript And XML 指异步 JavaScript 及 XML 一种日渐流行的Web编程方式 Better Faster Use ...

  9. Java基础入门知识

    Java编程入门知识   知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...

  10. BZOJ 1041 [HAOI2008]圆上的整点:数学

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 题意: 给定n(n <= 2*10^9),问你在圆x^2 + y^2 = n^ ...