XX大学XX学院

《网络攻击与防御》

实验报告

实验报告撰写要求

实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性、规范性、正确性、有效性。现将实验报告撰写的有关内容说明如下:

1、 实验报告模板为电子版。

2、 下载统一的实验报告模板,学生自行完成撰写和打印。报告的首页包含本次实验的一般信息:

  组 号:例如:2-5 表示第二班第5组。

  实验日期:例如:05-10-06 表示本次实验日期。(年-月-日)……

  实验编号:例如:No.1 表示第一个实验。

  实验时间:例如:2学时 表示本次实验所用的时间。

实验报告正文部分,从六个方面(目的、内容、步骤等)反映本次实验的要点、要求以及完成过程等情况。模板已为实验报告正文设定统一格式,学生只需在相应项内填充即可。续页不再需要包含首页中的实验一般信息。

3、 实验报告正文部分具体要求如下:

一、实验目的

本次实验所涉及并要求掌握的知识点。

1.跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。

XSS的分类:

反射型XSS

存储型XSS

基于DOM的XSS

2.HTML

3.JavaScript

二、实验环境

实验所使用的设备名称及规格,网络管理工具简介、版本等。

一台windows7、安装wampserver、火狐浏览器、Chrome浏览器

三、实验内容与实验要求

实验内容、原理分析及具体实验要求。

实验内容:

1.反射型XSS,相对来说,危害较低,需要用户点击特定的链接才能触发。

2.存储型XSS,该类XSS会把攻击代码保存到数据库,所以也叫持久型XSS,因为它存在的时间是比较长的。

3.DOM 型XSS,这类XSS主要通过修改页面的DOM节点形成XSS,称为DOM Based XSS。

原理分析:XSS攻击,指通过在页面注入恶意JAVASCRIPT代码,从而在用户浏览被注入恶意代码的页面时,控制用户的浏览器行为的一种攻击。

具体实验要求:根据实验指导书完成实验与实验报告

四、实验过程与分析

根据具体实验,记录、整理相应命令、运行结果等,包括截图和文字说明。

详细记录在实验过程中发生的故障和问题,并进行故障分析,说明故障排除的过程及方法。

1、 反射型XSS

首先对反射性xss的网页进行测试,输入test测试并submit发现在网页上显示出test测试,如下图所示:

图1 反射性xss页面测试

当在输入框输入入测试,测试XSS最常用的就是,如果页面存在XSS,那么就会弹出“XSS”这个字符。观察发现弹出xss字符,如下图:

图2 反射性xss插入字符测试

观察页面源码,发现之所以我们输入的xss没有在输入内容部分展示,是因为我们输入的代码被当成代码解析,源代码如下图所示:

图3 反射性xss页面源代码展示

我们可以输入其他的JS代码,来让浏览器做其他的事,比如弹出用户cookie,在输入框中输入,其中document.cookie可以用来获取用户的cookie。提交后发现弹出窗口为空(如下图),这是因为因为访问的这个页面它没有给我们设置cookie。

图4 反射型xss获取cookie测试

修改源代码之后再次重复上述工作可以发现输入cookie,如下图所示:

图5 反射型xss获取cookie测试

我们可以通过JS,构造一个请求,来请求一个我们有权限的页面,在构造请求的时候,把用户的cookie当作参数传过去,然后我们就可以在这个页面里,接收传过来的参数,然后再保存起来。所以首先需要写一个接收cookie的页面,它能够接收某个参数,然后保存起来。通过构建url编码的内容,我们输入,可以在xss文件夹中的文件中获得用户的cookie,如下图所示:

图6 获得用户的cookie

2.存储型xss

存储型XSS一般发生在留言板等地方,因为它需要把用户输入的内容保存到数据库,用户向服务器提交的数据只是一次性的,如果不保存到数据库,数据就会丢失。

随便选择一个输入框,输入xss的测试代码,一般选择留言的地方测试,因为相对来说,允许我们输入的长度限制比较小,有的限制昵称的长度只能为32字符等。我这里也选择留言输入框测试,测试结果如下图:

图7 存储型xss测试结果

点击确定后,可以看到留言内容出显示空白。如下图所示:

图8 存储型xss测试结果

我们模仿其他用户访问该页面,打开Chrome,访问该页面,因为HTTP是无状态协议,它依靠cookie来识别用户身份,但是不同浏览器之间cookie不共享,所以2个浏览器可以模拟2个用户的身份,因为2个浏览器访问同一个页面的话,产生的cookie不同,如果想要查看2个浏览器的cookie是否相同,可以在想要查看cookie的页面打开开发者工具,然后在控制台输入document.cookie就可以看到当前网站的cookie。可以发现一打开页面就弹出了xss窗口。如下图所示:

图9 Chrome打开存储型xss网页

3. 基于DOM 的XSS

它通过修改页面的DOM节点形成的XSS,所以称为DOM based XSS。它和反射型XSS、存储型XSS的差别在于,DOM XSS的XSS代码并不需要服务器解析响应的直接参与,触发XSS靠的就是浏览器端的DOM解析。

可以查看页面的源代码如下图所示:

图 10 基于DOM的XSS页面源码

我们要让他没有语法错误,就需要构造语句闭合一些标签,所以,我们首先需要一个单引号来闭合 a标签的href属性。然后一个“>”来闭合a标签的“<”。这样构造以后,就变成了“在这里构造利用代码'>xssDom”。所以我们可以构造如下语句:

'>

输入后点击测试,发现并没有弹出提示窗,如下图。审查元素后我们发现我们应该用一个事件来触发行为:

图11 基于DOM的XSS测试

构造如下数据: ' onclick=alert(/xss/) //此时页面代码就变成了:<a href='' onclick=alert(/xss/) //'>xssDom,再进行如上操作的时候就可以触发弹窗了。

图12 基于DOM的XSS测试

页面在尝试加载路径为123 的图片时,无法加载该图片,所以触发onerror函数。src属性可以填任意错误的路径。如果想要获取用户cookie,可以像步骤一一样,在onerror事件中,插入JS代码,通过JS网页面插入节点等。我们使用hackbar这一工具将我们要插入的字符串转成String.fromCharCode格式的,插入之后首先进入c:\wamp\www\xss目录下,把cookies.txt删除。输入构造的语句后,点击测试后,然后去c:\wamp\www\xss目录下,可以看到cookies.txt又生成了,如下图所示:

图13 基于DOM的XSS测试cookie重新生成

要测试是没有成功获取到cookie还是没设置cookie导致的该文件内容为空,可以在浏览器控制台执行document.cookie,看是否有输出。观察下图我们发现已经设置了cookie:

图14 观察cookie是否设置

五、实验结果总结

对实验结果进行分析,完成思考题目,总结实验的心得体会,并提出实验的改进意见。

这一实验主要根据实验指导书完成了对于三种XSS的基本操作,其中反射型XSS最为简单,但是也最容易被发现,效果也最差。而存储型XSS和基于DOM的XSS的效果更好,相比而言也不容易被发现,危害也更大。反射型XSS,相对来说,危害较低,需要用户点击特定的链接才能触发。存储型XSS,该类XSS会把攻击代码保存到数据库,所以也叫持久型XSS,因为它存在的时间是比较长的。DOM 型XSS,这类XSS主要通过修改页面的DOM节点形成XSS,称为DOM Based XSS。

思考题:

XSS除了盗取用户COOKIE,还有什么其他用途?

  1. 界面劫持/伪造界面 伪造者可以重建一个和原网页大致一样的网页,使用JavaScript的特性修改页面的一些原有属性。
  2. 重定向页面
  3. CC攻击
  4. 命令执行
  5. 通过hybrid app获取手机通讯录,短信,地理位置,相册等敏感信息

    如何扩大XSS的危害?

    首先,CSRF漏洞就是攻击者可以诱导受害者在他们自己的浏览器上点击链接,以受害者的session执行一些敏感的操作。例如,假设下方的URL是某Web应用中用户修改密码的操作。https://www.example.com/profile/update_password?new_password=Welcome1

    如果这个地方没有做CSRF防护,那么攻击者便可以发送如下链接给受害者:https://www.example.com/profile/update_password?new_password=HACKER

    当受害者在 www.example.com站点已经是认证通过状态,如果点击了这个链接,那么修改密码的请求便会以受害者的session数据发送到服务端。这将会导致受害者的密码被修改为HACKER。因此较为简单的扩大危害方式如下:

    1.使用邮件的形式向某网站用户发送URL,通过这个伪造的url对用户进行攻击

    2.可以使用邮件等形式攻击网站的管理员,攻击成功后便可以执行许多恶意操作,例如窃取他的凭证。

心得体会:

通过这个实验对于XSS攻击有了初步的了解,也对于XSS攻击的基本形式进行了实践操作,基本理解如何通过一个url对用户进行攻击,获得用户cookie等恶意操作。从这个实验中学习到了比课本上更加实际更加深入的知识,对于了解信息安全有重要的意义。

实验改进意见:无

哈工大 信息安全实验 XSS跨站脚本攻击原理与实践的更多相关文章

  1. XSS (跨站脚本攻击) 的原理分析,测试 && 应对措施

    1 1 1 XSS (跨站脚本攻击) 的原理分析,测试 1 demo: <!DOCTYPE html> <html lang="en"> <head& ...

  2. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  3. xss(跨站脚本攻击),crsf(跨站请求伪造),xssf

    我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...

  4. xss跨站脚本攻击及xss漏洞防范

    xss跨站脚本攻击(Cross Site Scripting,因与css样式表相似故缩写为XSS).恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Scrip ...

  5. 初窥XSS跨站脚本攻击

    XSS跨站脚本攻击的分类 一. 反射型XSS跨站脚本攻击 二. 存储型XSS跨站脚本攻击 三. 基于DOM的XSS跨站脚本攻击 1.反射性XSS 经过后端,不经过数据库 2.储存型XSS 经过后端,经 ...

  6. web应用程序安全攻防---sql注入和xss跨站脚本攻击

    kali视频学习请看 http://www.cnblogs.com/lidong20179210/p/8909569.html 博文主要内容包括两种常见的web攻击 sql注入 XSS跨站脚本攻击 代 ...

  7. XSS跨站脚本攻击实例讲解,新浪微博XSS漏洞过程分析

    2011年6月28日晚,新浪微博遭遇到XSS蠕虫攻击侵袭,在不到一个小时的时间,超过3万微博用户受到该XSS蠕虫的攻击.此事件给严重依赖社交网络的网友们敲响了警钟.在此之前,国内多家著名的SNS网站和 ...

  8. PHP漏洞全解(四)-xss跨站脚本攻击

    本文主要介绍针对PHP网站的xss跨站脚本攻击.跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理员发信息 的方式诱使管理员浏览,从而获得管理员权限,控制整个网站 ...

  9. JAVA覆写Request过滤XSS跨站脚本攻击

    注:本文非本人原著. demo的地址:链接:http://pan.baidu.com/s/1miEmHMo 密码:k5ca 如何过滤Xss跨站脚本攻击,我想,Xss跨站脚本攻击令人为之头疼.为什么呢. ...

随机推荐

  1. Spring中的单例模式

    Spring中的单例模式 单例模式的介绍 1.1 简介 ​ 保证整个应用中某个实例有且只有一个 1.2作用 保证一个类仅有一个实例,并且提供一个访问它的全局访问点. 单例模式的优点和缺点 单例模式的优 ...

  2. docker和K8s对应参数

    创建 Pod 时设置命令及参数 创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其参数.如果要设置命令,就填写在配置文件的 command 字段下,如果要设置命令的参数,就填写在配置文件的  ...

  3. python if-elif-else 判断

    #!/usr/bin/python #coding=utf-8 #好好学习,天天向上 age=12 if age<4: price=0 elif age<18: price=40 elif ...

  4. Kubernetes的Controller进阶(十二)

    一.Controller 既然学习了Pod进阶,对于管理Pod的Controller肯定也要进阶一下,之前我们已经学习过的Controller有RC.RS和Deployment,除此之外还有吗,如果感 ...

  5. %r和%s的区别

    理解%r和%s的区别 %r会重现所表达的对象,%s会将所有转成字符串 eg1: print('i am %s years old' % 22) print('i am %r years old' % ...

  6. PyCharm专业版破解教程

    破解步骤: 1. 下载激活包和注册码:https://pan.baidu.com/s/1_1nrQdTElf4aEg8vGnMTzg 2. 将下载的破解包放入PyCham安装目录的bin文件夹中 3. ...

  7. 报错:java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp

    感谢原文作者:风起云淡- 原文链接:https://blog.csdn.net/shenguan777/article/details/78615521 异常分析: 在使用MySql时,如果数据库中有 ...

  8. 导出SQL语句

    转载请注明来源:https://www.cnblogs.com/hookjc/ if(!($db_conn=mysql_connect($db_server,$db_name,$db_pass))){ ...

  9. Ubuntu好用的文本编辑器-SciTE Text Editor

    Ubuntu下除了gedit之外,还可以使用SciTE编辑器,非常方便,安装 sudo apt install scite 不过刚刚装好在中文环境下还是不能够用的,因为会有中文乱码,还有很多设置也不符 ...

  10. java file已存在,新建流写入此文件是否会覆盖原本file信息

    java中建立文件输出流,当文件不存在时会新建一个文件:如果有同名文件,自动覆盖.不存在时自动建立.FileOutputStream的默认构造方法是直接覆盖掉原来的文件,而FileOutputStre ...