存储型XSS漏洞的挖掘
存储型XSS漏洞的挖掘
在第2节中我们曾经演示过如何发掘一些简单的XSS漏洞,以及确定XSS漏洞的基本方法是使用攻击字符串。例如把“”之类的字符串提交给应用程序的每个参数,同时监控这个输入的响应,如果攻击字符串原样出现在响应中,那么几乎可以肯定应用程序存在XSS漏洞,现在的许多自动化测试工具就是基于这项规则实现的。但是有些时候使用上述基本方法,可能无法确定应用程序中是否存在XSS漏洞。因为触发XSS的形式和因素众多,而且手段灵活多变,所以,需要建立一套完整的测试方案,甚至要运用多种特别的方法和技术。实际上,这里会涉及软件测试的一些概念。在软件测试领域中,有许多方法可用来协助寻找应用软件中所含有的Bug,然而目前没有一种方法能够找出某一受测对象所含有的全部问题,想要找出包含的所有安全漏洞更是困难重重。目前对Web应用程序进行安全测试主要有3种方法,分别为:白盒测试(Whitebox)、灰盒测试(Graybox)及黑盒测试(Blackbox)。
本节将以rocboss社区作为存储型XSS检测与挖掘的对象,将通过黑盒测试和白盒测试相互结合进行挖掘rocboss是否存在xss。
5.1 方案设计原理
本方案主要是以rocboss社区为检测对象。它有着实体化和过滤功能,还拥有着留言区、评论区、私言区,可谓输入口之多,可能出现XSS漏洞的可能性也高了,很方便我们进行黑盒测试。它还有着过滤功能的源码,让我们更好地进行白盒审计,这是我要选它作为检测对象地原由,也是我自己自行挖掘成功的第一个网站。
在前面我们进行几次都是没有防御下的演示,而我们这是在一个拥有完整防御功能的代码。但我们的中心思想不变,就是通过标签闭合配合浏览器的测试,一定是一个闭合标签,当然我们也添加一些限制绕过某些防御,XSS Payload那一节有着很多绕过方式,这里就不多讲了。在黑盒测试时,还要考虑各种编码形式、浏览器种类及版本、服务端程序语言等内容。总而言之,发掘XSS时一定要细致和彻底,要开拓思维,灵活利用各种知识,还要拥有超强的漏洞挖掘能力与漏洞辨识能力。
方案进行步骤:
(1)先进行黑盒测试,找数据交互的地方,比如:用户输入点、输出点、文件上传地方、flash、在url当中,get的地方。以存储型的xss漏洞为例,留言、注册、修改信息等等一些POST能写入到服务器数据库的一些功能点都有可能会出现存储型的XSS的漏洞。这个地方我们是找存储型xss的时候我们必须挖的地方。这些都有可能有xss的漏洞。
(2)找到功能点之后,怎么去挖掘,三个步骤:首先发起探子请求,然后查看源码,最后构造XSS Payload,。还有要注意的是很多留言框这种东西是写入后台数据库的,我们在前端是看不到的,相当于没有输出让我们知道是否有漏洞,大部分都是管理员才能看到。这些我们必须测试的地方,当我们都不知道的时候,所以我们就要在每个框里面添加XSS检测代码来执行探测。这种探测方法俗称盲打还要值得注意的就是:因为我们是看不到后台的情况的,但是管理员会看到,要是我们盲打的时候打的是全都是弹框的代码,那么管理员又不是猪,他肯定会知道这里有漏洞的甚 至还会追究,所以我们盲打探测语句的时候最好不要打弹框的代码了(alert这种)。(所以我们一般不留弹框的代码,留那种直接发送Cookie的代码,这种被称为盲打Cookie)。
(3)最后的得出是否存在某个点拥有XSS漏洞?是否直接攻击成功?不成功的话,可能是下面的三种情况,比如htmlspecialchars等函数,将接收到的数据转换成html实体,使之不能执行。比如转换成,也就没法执行了;strip_tags函数,去除html标签。比如strip_tags(’’)就变成了alert(/x/),不能执行了。这种方法用的少,因为它会去除所有有关<、>的内容,用户体验差;如果处理富文本,不能够用上面两种方式,一般都会选择使用黑名单过滤的方式,也就是XSS Fliter。如果是黑名单过滤的话,我们可以进行白盒审计等等方法。
(4)假设出现过滤情况,我可以对源码进行审计。查看是否对符号转义过滤、是否对ID进行了过滤等等,找出没有任何的过滤转义的参数。代码审计挖掘XSS,就是看那些输出函数中,参数是否被过滤,就知道是否存在XSS了。然后进行构造XSS Payload,再进行攻击检测,最后查看是否攻击成功。得出rocboss社区是否存在XSS漏洞。
5.2 攻击方案的实现
(1)搭建好我们需要检查的社区rocboss,开始进行查找数据交互的地方。
图5.1 rocboss社区已搭建好
(2)在网站查找数据交互的功能点,可以找到发布帖子、发表回复和发私信,这些功能点都有可能写入后台数据库,都有可能出现XSS漏洞。
图5.2 可能出现XSS漏洞的功能点
(5)直接在这四个功能点输入进行扫盲,如果出现被HTML实体化,就无法继续XSS攻击,则排除这个功能点。
图5.3 发布帖子功能点出现HTML实体化。
图5.4 发表回复功能点出现HTML实体化
图5.5 发现私信的XSS攻击代码没有全部被HTML实体化
(6)通过扫盲发现私信这个功能点没有被HTML完全实体化,可能是出现黑名单过滤情况,通过转换其它XSS Payload进行试探,比如:
<sc<script>ript>alert(/xss/)</script>
<ScRipt>alert(/xss/)</script>
<img src=1 onerror=alert(/xss/)>```
最后发现
图5.6 进行对rocboss的Filer源码进行审计
(7)我们通过白盒审计发现details标签和ontraggle事件没有被过滤,那我们就可以利用它们来构造我们的XSS Payload,当我们发现Filer还对字符串进行了过滤,所以我们XSS Payload 需要转换为编码形式。最后构造XSS Payload为:
“><details open οntοggle=eval(”\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3aalert(‘xss’)")><"
最后绕过了过滤器,进行XSS攻击。我们将以一个普通用户通过私信,发送我们的XSS Payload给管理员,使管理员查看并触发存储型XSS漏洞。
图5.7 攻击者直接将XSS Payload通过私信发给管理员
图5.8 管理员查看私信,触发了存储型XSS漏洞
(6)最终检测结果可以知道,rocboss社区存在存储型XSS漏洞。其实我们想想如果我利用它们的标签和事件进行构造Payload来盗取Cookie的话,在进行会话劫持等操作,就可以进入管理员页面,进行修改相关设置,比如添加管理员等操作,就会造成很大的危害。所以在黑名单过滤方面,开发者和设计者要对各种标签进行过滤,细节决定成败。
上一篇: 2019年度总结
下一篇: Android开发-Dialog对话框