当前位置: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

厂商回复:

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

最新状态:

暂无


漏洞评价:

评论

  1. 2015-09-24 11:41 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)

    算法牛!

  2. 2015-09-24 11:43 | king7 ( 普通白帽子 | Rank:612 漏洞数:110 | 一场秋雨一场寒~)

    NBNBNBNBNB

  3. 2015-09-24 12:21 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:19 | 当我又回首一切,这个世界会好吗?)

    洞主很擅长这个啊

  4. 2015-09-24 14:19 | 数据流 认证白帽子 ( 普通白帽子 | Rank:737 漏洞数:92 | 没关系啊,我们还有音乐)

    搞算法的是高富帅 搞脚本的都是屌丝

  5. 2015-10-18 22:14 | 小杰哥 ( 普通白帽子 | Rank:179 漏洞数:28 | 逆水行舟,不进则退。)

    这个吊!算法逆向各种屌啊