如何对Flash应用进行渗透测试,并在21点纸牌游戏中作弊……
作者:admin | 时间:2017-9-24 20:27:28 | 分类:黑客技术 隐藏侧边栏展开侧边栏
在这篇文章中,我们将跟大家讨论如何拦截、审查、篡改和重放基于Flash的Web应用。为了能够让大家更好地理解,我选择了21点纸牌游戏作为演示例子。我们将会研究如何控制系统的发牌以及计分逻辑。
这篇文章的重点是跟大家演示渗透测试人员是如何对Flash应用进行安全研究的,并让大家了解获取客户端代码的方法,然后通过修改其代码来实现自己的目的。
文章结构大致如下:
1.拦截.swf文件,使用代理将该文件存储在本地
2.使用反编译器拆封.swf文件
3.修改代码以改变应用的行为
4.通过有效的HTTP会话重放.swf
注:在这篇文章中,我们选择的是一款免费的在线版21点纸牌游戏。我选择的这个网站不提供任何的金钱奖励,并且我们也没有尝试去访问或修改任何受限制的资源。请大家不要使用本文所介绍的技术来干坏事,谢谢大家!
环境配置
我使用的是Mac,但是我所提到的每一份工具都可以在Windows或Linux上运行。你需要以下几种工具:
1. Burp Suite【下载地址】:安装并配置好浏览器代理;
2. ffdec【下载地址】:一款免费版的Flash反编译器;
3. playerglobal27_0.swc【下载地址】:将该文件存储在本地,待会儿需要用到;
拦截SWF
配置你的Web浏览器,并通过Burp来发送请求。此时,你并不需要开启“拦截”功能,你可以让请求正常通过Burp发送。
清除浏览器缓存。接下来,我们需要从头开始加载.swf文件,如果你最近曾加载过该文件,那么它便会在缓存中。
现在,访问托管了目标Flash应用的网站,并等待其完全加载成功。打开Burp,查看“Proxy”标签下的“HTTP History”的内容,你可以在“Extension”那一列中看到一个标记为“swf”的条目。
如上图所示,选择这一行,然后查看下方的“Response”>“Headers”标签,你将会看到一堆随机数据,它们就是swl文件编译后的内容。右键点击该区域然后在弹出的菜单中选择“Copy to file”。
我将其保存到了桌面的“blackhack.swf”。
注:你也许能够在文件系统中访问到.swf文件缓存版本,但出于数据一致性和稳定性方面的考虑,我更愿意选择使用代理。
使用反编译器拆封.swf文件
安装好ffdec之后,将【playerglobal27_0.swc】保存在你的电脑中。运行ffdec,然后选择“Settings”>“Advanced Settings”>“Paths”。
在第三个设置中选择playerglobal27_0.swc的路径地址:
保存设置,然后重启应用让设置生效。
接下来,选择“Open”,然后找到“blackhack.swf”文件:
修改代码以改变应用行为
根据测试目标的不同,这一部分的可变程度是非常高的。你可能需要花一点时间来查看每一个文件夹中的内容,尤其是“scripts”文件夹中的脚本代码。
我发现了一个名叫“Play”的脚本,该脚本貌似负责的是该游戏的主要功能。除此之外,我还想要确定类似计分和纸牌选择是否是在客户端上进行的。如果是的话,那我就可以修改游戏的输出结果了。
我发现了如下图所示的代码段(可修改),这个数组貌似是用来描述纸牌花色(Clubs, Diamonds, Hearts和Spades,即方片、梅花、红桃和黑桃)的:
点击代码下方的“Edit ActionScript”按钮,然后修改数组“this.arrSuit”,让它只包含一个字符。如果修改之后每次游戏都只出一个花色的牌,则说明发牌是由客户端控制的。
修改之后,别忘了点击代码下方的“Save”按钮。首先将其保存为单独的脚本文件,接下来将其写回.swf数据包之中。
通过有效的HTTP会话重放.swf
现在,我们需要通过一个有效的会话来让网站执行我们修改后的游戏版本。彻底清除浏览器的缓存,然后重启浏览器,因为如果你的swf文件已经在缓存中的话,接下来的操作很可能会遇到问题。在Burp中,打开“拦截”功能。回到网站中,然后重新加载Flash应用。此时,你需要手动“转发”每一条经过Burp的请求。
请注意!我们现在要寻找的是包含了.swf文件的GET请求,大致如下图所示:
找到这个请求之后,右键点击raw数据,并选择“Do Intercept” >“Response to this request”。这将允许我们在浏览器呈现内容之前修改应用程序。
修改完成之后,你就可以点击“Forward”按钮了。可能网站中会有一些类似广告或浏览器插件的随机流量,你可能需要多次点击“Forward”按钮。接下来,你需要注意带有“Response from http:///……..<your swf file>”的内容。
在这里,我们需要将Header中的垃圾文本全部删除掉,删除完之后的Header应该如下图所示:
现在,在空白区域点击鼠标右键,选择“paste from file”。
选择修改后的“blackhack.swf”,然后将其填充空白区域。接下来,点击“Forward”然后关闭“拦截”功能。
现在游戏应该已经在你的浏览器中加载完毕了,你可以看一下你所修改的代码是否成功影响了游戏。正如你在下图中看到的那样,我们可以让游戏100%发出方片牌。
奖励加分
很明显,我们还想演示一些影响更严重的漏洞,这样才能让开发人员真正意识到哪些数据应该在服务器端进行处理。
除了之前那个脚本之外,我还发现了负责分配纸牌数字值的代码段。这就非常棒了,因为我将能够确保每一份纸牌的值:
总结
对于这种21点纸牌游戏而言,我们可能还需要根据游戏的复杂程度以及逻辑架构来做出调整。
本文给大家介绍了控制Flash应用程序的方法,并跟大家描述了如何处理21点纸牌游戏的的发牌逻辑和计分逻辑,感兴趣的同学可以自行动手尝试一下。
* 参考来源:privsec, FB小编Alpha_h4ck编译