前言
一次比较简单的app渗透,原本主要目的是分析脱壳方面,但是这个360比较好脱壳,所以直接使用工具梭哈了,但是frida-dexdump就脱不了壳,猜测是做了frida的特征检测,可能需要使用魔改的frida才行。最后也是分析分析到后面发现短信验证码的缺陷导致严重漏洞产生。
apk脱壳
首先分析apk加固情况,从下图发现是360加固
参考文章: HackTwoHub网络安全社区

这里也不啰嗦,直接使用fundex和lsposed进行脱壳试试

启动app,成功脱壳,在data/data/<包名>下就可以看到脱壳下来的dex文件。这里如果不知道包名是多少可以使用下图中的am monitor命令进行操作


脱壳后可压缩后下载至电脑进行分析

如下图,成功脱壳获取其代码

任意注册+重置+登录
这里再来查看下app登录逻辑,发现可以使用验证码登录

任意输入手机号进行发送验证码抓包,发现存在phone和token两个参数

复制数据包使用yakit更改手机号发包,发现做了签名校验,这种情况可以分析下代码来看看情况

通过搜索关键字来定位代码,比如参数,请求头,请求路径等等字段来全局搜索即可,这里发现有几处存在代码逻辑

点进来后,发现getCode函数,很简单,只有区区三四行代码,主要看332行,对token参数使用getEncryptelCode进行加密,其次还可以发现login函数,主要是验证码的,这里参数也很简单,而且通过简单分析是可以发现没有对验证码进行校验,主要是对手机号与验证码进行匹配,这里我们也可以进行爆破试试

public void login() {
HashMap map = new HashMap();
map.put(AliyunLogCommon.TERMINAL_TYPE, this.phone);
map.put("code", this.code);
Utils.send(mQueue, 1, "login/sms", map, this);
}
我们再回过头来查看getEncryptelCode函数,跟进去发现md5加密加盐,先使用substring从3开始截取再与_android_xxx_1998进行拼接然后md5加密,再次md加密。比如手机号为15312345678,那么最终会把12345678最后八位截取与_android_xxx_1998进行拼接,最后进行两次md5加密

如下,使用测试账号18888888888进行登录

抓去登录包,发现token信息

我们自行进行token加密,最后对比一下是否与请求包中的token数据一致即可,这里第一次md5加密

再进行md5加密,通过加密的值和上述对比发现和我们分析的是一样的情况

而且根据上述分析我们是知道没有进行验证码严格校验的,比如下图中:
通过发现送验证码

然后对验证码进行爆破,再爆破至2000多次时成功爆出验证码

我们把该请求包再次重放,发现该验证码还是可以正常使用,这说明该出验证码验证码没有进行次数校验从而造成账号密码泄漏,比如通过忘记密码处,或者任意注册又或者直接手机号验证码的方式登录任意账号。

app脱壳2
后续通过发现和这个app一样也存在这个情况,如下
某个app,360加固,需要脱壳,并且打开发现提示root检测

手机打开app,存在root检测,直接使用magisk插件绕过

成功绕过root检测打开app

同样使用fundex2+lsposed进行脱壳,成功脱壳但是反编译后里面的代码并没有我们想要的东西

这里猜测可能是360加固的版本不一样,导致脱壳没有脱全。
严重敏感信息泄漏
不过这个app没有进行加密,所以也不需要太在意脱壳的加解密分析部分,这里绕过root检测点击我的进行登录

任意输入手机号,发现可以输入任意验证码进行登录

登录后需要身份证上传,这里先上传自己的试试,反正后续是可以注销的

再来挨个分析数据包,发现某个数据包像是获取什么信息的,这里刚开始也不清楚

直接重新抓包对接口中的参数进行增删改查,响应包中会提示某某参数不能为空,如下图所示

通过多轮测试,构造出如下请求包,发现泄漏用户大量敏感信息,而且敏感信息就是sfz上的信息。

可直接对手机号进行遍历发现更多的敏感信息。
