在灰盒测试中因为协议分包导致BUG有不少,下面拿前几天发现的BUG举个例子。
测试副本功能时因为BOSS很强大,就想到利用主城NPC回血功能来打副本,用WPE发送回血协议同时角色在副本战斗,使用安卓模拟器的前端在发包时会分包发送(不清楚分包的自行百度),因为PC的WIN7注册表配置是分包发送,那么问题来啦分包发过程中夹杂着的回血协议。
假设
移动协议是 00 00 29 0F 00 00 04 57 00 00 00 00 00 00 00 18 0A 0A 0D 6A 64 41 43 15 FE 83 23 43 0A 0A 0D 13 95 27 43 15 70 4D 19 43
回血协议是 00 00 29 7D 00 00 04 57 00 00 00 00 00 00 00 02 08 00
角色使用移动,正常协议发送是"00 00 29 0F 00 00 04 57 00 00 00 00 00 00 00 18 0A 0A 0D 6A 64 41 43 15 FE 83 23 43 0A 0A 0D 13 95 27 43 15 70 4D 19 43 ",分包发送是:“00 00 29 0F00 00 29 7D 00 00 04 57 00 00 00 00 00 00 00 02 08 00 00 00 04 57 00 00 00 00 00 00 00 18 0A 0A 0D 6A 64 41 43 15 FE 83 23 43 0A 0A 0D 13 95 27 43 15 70 4D 19 43 ”,那么后端在接收这条技能使用的协议时,会对协议进行验证是否完整,因为上述分包夹杂回血协议已经不完整了,后端判断协议不完整或异常T角色下线,角色重登陆后后端崩溃!
那么崩溃是怎么出现的,后端不是已经T角色下线了么? 因为 00 00 29 0F移动协议接口在后端已经生效,但包已经是不完整的了,所以后端将角色移动到未知位置,挂了。
简单说后端T了角色也执行了移动处理。
所以在测试的中也要考虑TCP分包的问题,即使后端做了异常处理,也不排除分包攻击中挂掉
分包攻击以回血协议为例,每次发送1字节
00
00
29
7D
00
00
04
57
00
00
00
00
00
00
00
02
08
00