当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0143128

漏洞标题:地下城堡iOS客户端伪造上传存档获取水晶(通信算法解密分析)

相关厂商:dxcb.leiting.com

漏洞作者: GoSSIP_SJTU

提交时间:2015-09-24 11:40

修复时间:2015-11-09 10:54

公开时间:2015-11-09 10:54

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-09-24: 细节已通知厂商并且等待厂商处理中
2015-09-25: 厂商已经确认,细节仅向厂商公开
2015-10-05: 细节向核心白帽子及相关领域专家公开
2015-10-15: 细节向普通白帽子公开
2015-10-25: 细节向实习白帽子公开
2015-11-09: 细节向公众公开

简要描述:

地下城堡iOS客户端上传存档功能校验算法存在漏洞,可以任意伪造存档。通过此方法可以获取大量付费资源。

详细说明:

地下城堡为中国区iOS付费榜前十的游戏,其iOS版中存在一个上传存档的功能,会将用户目前的游戏数据处理后发往api.dxcb.cn.taojingame.com,这个功能存在逻辑漏洞,可以构造任意存档。
首先通过抓包可以截获到上传存档的流量:

1.jpg


2.jpg


通过反复的尝试上传不同的存档,可以确认data参数代表了存档数据,md5参数是对存档数据的签名,其他参数在短时间内不会改变。
通过逆向程序发现存档数据的变换算法为:
data = urlencode(base64encode(zlib.compress(game_data)))
对data参数的值进行解码可以得到明文的存档数据:

3.jpg


通过修改这些数据,可以构造任意的存档,其中也包含了钻石等付费资源的数据。
存在漏洞的部分是之后的md5签名算法,开发商通过对data参数进行md5签名校验来防止用户篡改存档,但是此处的md5签名算法内嵌在程序代码中,保护强度不够,可以被逆向分析。通过逆向代码我们可以发现md5签名的具体算法:

4.jpg


md5 = md5(zlib.compress(game_data) + secret1 + secret2)
其中secret1硬编码在代码中,为"dxc.taojinhudong.6%&76"。secret2为动态生成,逆向代码无法获得,但是通过对代码的分析我们发现secret2会在同一个流量中被base64encode后发出,作为pwd参数的值,通过对该值进行base64解码我们就可以得到secret2,至此我们已经可以计算出正确的md5值,也就是可以伪造任意的上传存档请求。通过向api.dxcb.cn.taojingame.com发送伪造后的上传存档请求,就可以为自己的账号构造任意的存档,以此来获取大量的资源。

5.png

漏洞证明:

6.png

修复方案:

更换md5签名算法,不要将动态生成的secret发出。

版权声明:转载请注明来源 GoSSIP_SJTU@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2015-09-25 10:53

厂商回复:

我方工作人员已确认此漏洞,目前正在修复中,非常感谢

最新状态:

暂无