阅读目录
基于协议内容的挖掘
发布于:2018-1-25 16:59 | 117014次阅读 作者: 管理员 | 原作者: TP
协议内容中的包含了许许多多的字段,不同的字段被服务器/客户端使用,起到了不同的作用。但是很多时候,服务器/客户端并未对异常的字段做校验或者过滤,导致了游戏漏洞的产生,而漏洞的风险也不尽相同,先来看看下面几组案列: 某游戏未对代表皮肤颜色的字段做校验,导致直接修改颜色字段的值即可获得不同肤色的角色(下图中创建出了黑色皮肤的女性角色) 某游戏的幻影瞬移药剂中有字段代表着瞬移到的位置ID,但是因游戏未做校验,则可替换位置ID,到任意想去的城镇 某游戏的弹框协议中有字段代表着所要拒绝的玩家的ID,因为服务器未对ID的合法性做校验,则可以在游戏中给任意玩家造成无限弹框(下图为在正常跳舞过程中收到弹框骚扰) 某FPS游戏的攻击协议中有字段代表着攻击类型,则可以直接修改对应协议,导致玩家每次开枪攻击必定爆头(下图为开枪后远程爆头) 某游戏登录协议中有字段代表着玩家的QQ,直接修改为任意QQ,即可实现任意QQ号登录游戏(下图为修改玩家QQ实现任意QQ的强登) 某游戏登录游戏时,有字段代表着协议长度,将对应的字段改为0Xff(-1),直接导致了整个服务器的宕机,服务器中所有玩家全部掉线。 结合上述的案例,可以发现,可以将基于协议内容的挖掘方法归纳为两个方面: l 等效值替换:多用于测试能否突破游戏限制 l 边界值替换:多用于用于测试协议的兼容性 针对协议内容2个挖掘方向,挖掘的方法也不相同: l 等效值替换:通过控制变量分析猜测协议单一字段的含义,用非常见数值进行替换,观察服务器和客户端的反应 l 边界值替换:更多依赖与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个漏洞。而这种挖掘方法,又不用基于协议内容的挖掘,主要通过分析猜测协议字段的含义,去大胆进行尝试。通过服务器/客户端的反应,最终确定风险点。 |

最新评论
发表评论