记一次破解某APP的心路历程

说实话,在写这篇博文前,我很纠结,担心会不会被查水表。由于已经和APP所属的公司客服沟通过贵公司的APP存在很严重的安全漏洞,但是得到的答复很敷衍,所以在这里公开分享自己的破解过程(以下部分内容由于涉及到隐私以及相关用户信息所以做了打码),纯粹为了技术探究,并引起相关公司的重视,切勿恶意根据文章内容肆意破坏相关单位权益。

相关工具:
charles,google浏览器

1.通过charles抓到app相关页面,抓取过程省略,下面放下已经写好的代码片段
HbSGdWd9S8.png
其中抓取到用户排行榜的页面,话不多说,直接用google浏览器->F12->查看返回的数据结构和信息
9HLQPQFzKV.png
是谁给了你这么大的勇气直接明文返回了用户的这么多信息。通过分析,用户的pwd即用户的密码使用md5加密的,虽然我们都知道md5加密是不可逆的,但是现在网上很多解谜库,大概率可以逆向破解成功。直接放图
7urwRTxYGl.png
用户的手机号和密码都掌握了,直接可以登陆app,不过没有登陆过app,怕查水表,就不演示了。
上面还只是初步的探索了一下,就很容易的窃取到了用户的相关敏感信息。
重头戏来了。
接下来分析了这个页面所加载的js文件,发现app前端后端通信所用的加密方式竟然是AES-128-ECB,且直接写明了加密所需要的加密密钥
f4i2jLPCtI.png
这项目是外包出去的吗?
获取到了密钥之后,接下来就可以通过逆向解谜前端传给后端的参数了,通过上面charles抓取到的相关接口,我随意找了一个用户登陆的接口,通过密钥,逆向获取到了前端的明文传参,下面是我临时写好的模拟传参
34QsjtWMV3.png
通过测试,是能够模拟app用户登陆的。那接下来这个app的所有的接口我都可以进行模拟了。目前已测试了app很多功能都可以进行模拟,说句夸张话,可以模仿这款app的ui,使用这款app的所有功能模块进行开发了。
下面是我模拟该APP的邀请新用户注册后返回优惠券的功能:
mZZdQgr4k1.png
0A5SPBasFb.png
yjBaaIC0Bu.png

总结:用户的信息安全是一个企业的重中之重,如果一个企业的用户信息能这么容易的被窃取,那么这个责任在于谁呢?仅已此博文能够得到相关企业的重视。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 12

开门,查水表

3个月前 评论
ycstar (楼主) 3个月前

建议再写一篇文章来介绍 :grin:针对上面的漏洞如何做优化

3个月前 评论
ycstar (楼主) 3个月前
arukas 3个月前

很多APP获取接口信息是很容易的,但是密码也在接口中返回,这个不应该被原谅

3个月前 评论
ycstar (楼主) 3个月前

拿不到后端代码,模仿从何谈起,除了能干点坏事以外,连给自己加点账户余额都不一定能行 :smile:

3个月前 评论
ycstar (楼主) 3个月前
22 (作者) 3个月前
ycstar (楼主) 3个月前
bing8u

多年经验,小应用都这样,楼主提醒了大家,以后返回字段小心些(我才不会返回加密那些字段)。

防范此类应该用接口签名:

前端:用参数+appid(应用标识符)+时间戳+签名(所有参数升序/降序后转为字符串,用appid对应的secretkey做盐来加密)

服务端:用中间件,有带签名的参数就验证,解密失败了返回错误信息,解密成功就不用管了。

3个月前 评论
Debuff

看完之后有没有背后已凉....满脑壳在回忆自己写过的项目..... :joy:

3个月前 评论

说白了 还是后端么做好权限的处理 返回敏感字段

3个月前 评论

@MArtian 你为什么可以发语音

1个月前 评论
小李世界

大部分的态度还是

  • 骗子
  • 只要我挂掉这个电话,就没有后续其他烦心事了,少一事是一事,我又不是老板
  • 现在运行挺好的,都两年了,哪里有什么问题呢
  • 用户的隐私我们并不关心,客户有充钱就可以了。
1个月前 评论

AES-128-ECB 是对称加密吧

1个月前 评论

估计外包写的·

4周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!