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

看图说话:反射式XSS(跨站)漏洞示例

作者头像
张树臣
发布2018-12-21 13:16:44
9K0
发布2018-12-21 13:16:44
举报

★安全测试之XSS漏洞(二)★

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

——张老师

张老师寄语

导图

1 反射型XSS漏洞是什么?

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

3.反射型XSS漏洞攻击的场景?

4.怎么避免反射型XSS漏洞攻击?

1. 反射型XSS漏洞是什么?

上一篇文章中我们讲到了XSS漏洞有两种类型:存储型和反射型(实际上还有一种是基于DOM的XSS),也提到了反射型XSS漏洞的特点,即:恶意代码并没有保存在目标网站,而是通过引诱用户点击一个恶意链接来实施攻击。这类恶意链接有哪些特征呢?

主要有:

  • 恶意脚本附加到 url 中,只有点击此链接才会引起攻击
  • 不具备持久性,即只要不通过这个特定 url 访问,就不会有问题
  • xss漏洞一般发生于与用户交互的地方

举个例子,比如我们在访问一个链接的时候(http://102.3.203.111/Web/reflectedXSS.jsp?param=value...),这个URL中就带了参数(param=value...),如果服务端没有对参数进行必要的校验,直接根据这个请求的参数值构造不同的HTML返回,让value出现在返回的html中(JS,HTML某元素的内容或者属性)并被浏览器解释执行,就可能存在反射型XSS漏洞。

可能有人会问,用户怎么可能把value改成可以执行的恶意代码呢?这不是自己坑自己吗?而且用户也不知道怎么改成恶意代码啊?而且这个“恶意代码”又是怎么传递给其他用户呢?疑问暂且保留,我们继续往下看。

我们用一张图来解释XSS漏洞攻击的原理:

上图中,攻击者(黑衣人)骗取用户信任,构造一个带有跨站脚本的链接,诱骗用户点击(第2、3步),跨站脚本在服务端(WEB应用程序)上没有被过滤,直接返回用户浏览器(第4步),用户浏览器执行恶意脚本(第5步),后面发生的事情就像第6、7步描述的那样。

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

上面提到,反射型XSS漏洞的前提是可以在url中附加参数,那么问题来了:应该如何构造“恶意参数”呢?

是不是只要能懂得构造“恶意参数”,并且用它来完成测试,就可以判断出系统是否存在反射型XSS漏洞呢?

并非所有系统都支持在url中添加参数,那么不支持在url中添加参数的系统是否就代表不存在XSS漏洞呢?

思考了上面这几个问题,我想我们基本可以总结出做反射型XSS漏洞测试的思路了:

1、探测输入向量。

对于存在用户交互的页面,先找出系统定义了哪些参数以及如何输入。这些参数不单单指页面上可以看到的字段,也包含隐藏的或非显式的输入,比如http参数、post数据、隐藏的表单字段、预定义的单选钮或复选框的值。

我们可以使用浏览器内置的F12控制台或抓包工具来审查这些隐藏的变量。

2、分析每个输入向量,用以推测潜在的漏洞。

为了检测潜在xss漏洞,我们可以为每个输入参数构造特别的数据。

测试数据可以借助一些模糊测试工具,自动生成攻击字符串列表。也可以参考XSS过滤的攻击列表,人工生成一些数据。

是否有一个通用的“恶意参数”构造列表呢?

我想应该是有的,不过本文主要主要目的是通过一个浅显的例子来让大家理解xss漏洞,若大家有兴趣,可以深入的理解去研究,也欢迎有研究成果之后跟小编做一下分享。

3、根绝测试结果进行分析。

根据页面的反馈,我们判断一下网站是否存在漏洞,如果存在,则再判断一下对网站安全构成什么威胁。通过这样的测试,我们可以识别出哪些地方还需要经过特别的编码、替换以及过滤。

原则上,所有的HTML关键字都需要经过html实体编码。特别需要关注的几个编码字符是:{< > & ' "}。

接下来我们用DVWA来做一下简单的练习:

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

2、在What's your name? 输入框里输入“tester”,提交

在服务端完成响应后,观察地址栏和页面就会发现,不但url中包含了我们之前的输入内容“tester”,而且内容“Hello tester”也有 tester 这个值。

读到这里,不妨暂停一下做一个思考:这是否能说明这个网页存在反射型XSS漏洞呢?如果存在,黑客会怎么利用这个漏洞进行攻击呢?也就是说这个攻击如何传递给其他用户呢?

我想没有安全测试基础的同学是不好回答上面的两个问题的,多数同学都会有这样的疑惑:这不是很正常的一个欢迎信息吗?我们接着往下看:

3、我们在输入框中输入其他内容,比如:

4、页面就会出现一个弹窗:

弹窗的出现,说明应用系统没有对相关的JS作出过滤,所以我们可以说它是存在XSS漏洞的。

再深入思考一下:为什么要过滤呢?这样未经过滤会导致什么后果呢?换句话说,攻击者如何利用这个漏洞去攻击其他用户呢?

3. 反射型XSS攻击的场景(途径)?

说几个常见的反射型XSS漏洞攻击途径:

1. 攻击特定用户:比如可以向目标用户发送email,email中包含指向漏洞的链接,并且包含相应的攻击payload(payload:简单来说就是在程序中起关键作用的代码)。比如给管理员发送一封邮件,抱怨某个url存在问题,诱使管理员点这个链接。当管理员点这个链接的时候,由于链接指向漏洞url,并且攻击payload是盗取cookie,这个时候管理员的cookie就被盗取了。

2. 利用系统中的“即时消息”攻击:xss攻击信息存在于“即时消息”,消息接收方接收到消息之后,被xss攻击。

3. 利用网站漏洞:有些网站允许用户提交html标签,攻击者可以利用这个特性来提交含有恶意攻击的链接,诱使用户访问,如果用户是在登录状态下点击了该链接,那么session信息就会被盗取。更进一步,黑客可能采用搜素引擎使用技术,嵌入必要的关键词,确保受害者在访问漏洞链接的时候已经登录,那么黑客就能够成功的盗取session信息。

4. 还有一个是第三种方式的变种。在含有漏洞的网站,黑客购买广告,而广告指向本网站的漏洞,当受害者点广告的时候,session信息基本上能够成功盗取。

5. 许多网站具有“告诉朋友”或者“向管理员反馈”功能。为了实现这些功能,服务器会产生一封email,而email的内容可以是任意的,通过使用这种email,黑客可以注入xss payload达到攻击的目的。

4. 怎么防止这种攻击呢?

具体的做法比较复杂,不过也不需要我们测试人员关心,交给开发人员就好了。

我们测试人员只需要知道,防止反射型XSS攻击只需要进行 htmlencode ,把 html 相关字符进行转码,让其不再是有效的可执行的 html/js 代码即可(这也是最大的难点)。

PS: 目前 chrome、safari 等主流浏览器已经自动做了 xss filter ,自动转码 html 相关字符,目前貌似只有 firefox 没有做这个处理。

5. 后记

这篇文章从收到投稿至今已经一周了,严格来说还是一个半成品。因为小编对于部分问题仍心存疑惑。我想这一点从这篇文章中的内容也能感受出来,因为很多问题小编并没有给出明确的答案。

今天将这篇“半成品”发出来,是希望能抛砖引玉,让更多的人关注安全,也希望有读者能在留言中解答小编的疑惑。

6. 相关链接

  1. 看图说话:文件上传(File Upload)漏洞示例
  2. 看图说话:文件包含(File Inclusion)漏洞示例
  3. 看图说话:持久式XSS(跨站)漏洞示例
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
手游安全测试
手游安全测试(Security Radar,SR)为企业提供私密的安全测试服务,通过主动挖掘游戏业务安全漏洞(如钻石盗刷、服务器宕机、无敌秒杀等40多种漏洞),提前暴露游戏潜在安全风险,提供解决方案及时修复,最大程度降低事后外挂危害与外挂打击成本。该服务为腾讯游戏开放的手游安全漏洞挖掘技术,杜绝游戏外挂损失。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档