游戏安全实验室 首页 技术入门 查看内容

 阅读目录

基于协议内容的挖掘

发布于:2018-1-25 16:59   |    99715次阅读 作者: 管理员    |   原作者: TP

协议内容中的包含了许许多多的字段,不同的字段被服务器/客户端使用,起到了不同的作用。但很多时候,服务器/客户端并未对异常的字段做校验或者过滤,导致了游戏漏洞的产生,而漏洞的风险也不尽相同,先来看看下面几组案列:

游戏未对代表皮肤颜色的字段做校验,导致直接修改颜色字段的值即可获得不同肤色的角色(下图中创建出了黑色皮肤的女性角色)

游戏的幻影瞬移药剂中有字段代表着瞬移位置ID是因游戏未做校验,则可替换位置ID,到任意想城镇

游戏的弹框协议中有字段代表着所要拒绝的玩家的ID,因为服务器ID的合法性做校验,则可以游戏中给任意玩家造成无限弹框(下图为在正常跳舞过程中收到弹框骚扰)

FPS游戏的攻击协议中有字段代表着攻击类型,则可以直接修改对应协议,导致玩家每次开枪攻击必定爆头(下图为开枪后远程爆头)

游戏登录协议中有字段代表着玩家QQ,直接修改为任意QQ,即可实现任意QQ号登录游戏(下图修改玩家QQ实现任意QQ的强登)

游戏登录游戏时,有字段代表着协议长度,将对应的字段改为0Xff-1),直接导致了整个服务器的宕机,服务器中所有玩家全部掉线

结合上述的案例,可以发现,可以将基于协议内容的挖掘方法归纳为两个方面:

等效值替换:用于测试能否突破游戏限制

边界值替换:多用于用于测试协议的兼容性

针对协议内容2个挖掘方向,挖掘的方法不相同:

等效值替换:通过控制变量分析猜测协议单一字段的含义,非常见数值进行替换,观察服务器客户端反应

边界值替换:更多依赖与fuzz,通过构造0x00, 0x7F, 0x80, 0xFF边界数据,去观察服务器和客户端的稳定性

下面用具体案例来进行挖掘方法的详细讲解:

FPS类游戏在创建对战地图时,上行协议被协议工具拦截切割为:

[B7 81 09 00 01 50 BC 06]协议头

[06 00 71 71 71 71 71 71]房间名称

[00 90 EF 08 01 50 23 03 ]未知,值固定

[05 00 31 32 33 34 35]房间密码

[05 10 3A 04 2A 07 50 04 29 07 0A 07]未知,值固定

[01 01 05 00 00 01 40 BF 02]对战人数观战开关对战模式

[B0 01 00 00 0A 00 00 00] B0代表着地图号

确认对应字段什么意思后,则可以针对性修改,用同类型值进行替换

修改对战人数,发现了可以任意修改对战人数漏洞

修改对战模式,即发现了更改不存在的对战模式漏洞导致游戏直接崩溃

修改地图号,即可创建隐藏的地图(应该是游戏预埋或丢弃的地图)

进行边界值替换,发现游戏并未创建房间成功,对这个字段有了过滤和校验。于是通过对协议内容的挖掘,一条协议就发现了3个漏洞。而这种挖掘方法,又不用基于协议内容的挖掘,主要通过分析猜测协议字段的含义去大胆进行尝试。通过服务器/客户端反应,最终确定风险点。



*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

分享到:
踩1 赞0

收藏

上一篇:前言

下一篇:基于协议场景的挖掘

最新评论
B Color Image Link Quote Code Smilies

发表评论