欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

存储型XSS漏洞的挖掘

程序员文章站 2022-05-17 08:28:32
...

存储型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实体,使之不能执行。比如转换成存储型XSS漏洞的挖掘,也就没法执行了;strip_tags函数,去除html标签。比如strip_tags(’’)就变成了alert(/x/),不能执行了。这种方法用的少,因为它会去除所有有关<、>的内容,用户体验差;如果处理富文本,不能够用上面两种方式,一般都会选择使用黑名单过滤的方式,也就是XSS Fliter。如果是黑名单过滤的话,我们可以进行白盒审计等等方法。
(4)假设出现过滤情况,我可以对源码进行审计。查看是否对符号转义过滤、是否对ID进行了过滤等等,找出没有任何的过滤转义的参数。代码审计挖掘XSS,就是看那些输出函数中,参数是否被过滤,就知道是否存在XSS了。然后进行构造XSS Payload,再进行攻击检测,最后查看是否攻击成功。得出rocboss社区是否存在XSS漏洞。
5.2 攻击方案的实现
(1)搭建好我们需要检查的社区rocboss,开始进行查找数据交互的地方。
存储型XSS漏洞的挖掘

图5.1 rocboss社区已搭建好
(2)在网站查找数据交互的功能点,可以找到发布帖子、发表回复和发私信,这些功能点都有可能写入后台数据库,都有可能出现XSS漏洞。
存储型XSS漏洞的挖掘

图5.2 可能出现XSS漏洞的功能点
(5)直接在这四个功能点输入进行扫盲,如果出现被HTML实体化,就无法继续XSS攻击,则排除这个功能点。
存储型XSS漏洞的挖掘

图5.3 发布帖子功能点出现HTML实体化。
存储型XSS漏洞的挖掘

图5.4 发表回复功能点出现HTML实体化

存储型XSS漏洞的挖掘

图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漏洞。
存储型XSS漏洞的挖掘

图5.7 攻击者直接将XSS Payload通过私信发给管理员
存储型XSS漏洞的挖掘

图5.8 管理员查看私信,触发了存储型XSS漏洞
(6)最终检测结果可以知道,rocboss社区存在存储型XSS漏洞。其实我们想想如果我利用它们的标签和事件进行构造Payload来盗取Cookie的话,在进行会话劫持等操作,就可以进入管理员页面,进行修改相关设置,比如添加管理员等操作,就会造成很大的危害。所以在黑名单过滤方面,开发者和设计者要对各种标签进行过滤,细节决定成败。

相关标签: 安全