看了相关密码找回漏洞的分析文章后,打算找个应用来进行这方面的分析研究。最近刚入手了丁盯智能门磁这个智能家居硬件,它通过硬件和软件app的结合,来监控门的安全性。看到它验证码中只是四位简单的数字,估计其中可能存在安全漏洞,就着手进行了相关的测试。
存在的相关漏洞已经通过了相关企业,已经完成了修复。现在的文章来做个记录和对有需要的同学做个参考。
软件后台设计中存在缺陷导致可遍历账号信息,并重置任意账户密码
通过应用app的使用,发现后台设计存在两个问题:
1.login1接口会在发送密码前先进行是否存在账号进行检测,返回相应的错误码,可以随机遍历手机号测试接口取得存在的手机号列表,可能因为注册用户较少原因,测试158号码时候只得到一个注册手机信息。
测试代码:
https://github.com/joeyxy/python/blob/master/crawler/dingding/dingding.py
2.找回密码功能中,通过使用应用,观察其逻辑,反编译其软件,找到了aes加密算法及相应的key及iv向量组成方式。因为使用了4位纯数字弱验证码,虽然设定了过期时间为120秒,但是后台没有限定提交的次数,实际测试中,基本在不到一分钟的测试中就可以利用password2接口设计缺陷破解验证码,直接提交修改其它注册用户的密码。
测试代码:
https://github.com/joeyxy/python/blob/master/crawler/dingding/poc_dd3.py
这里使用到的分析工具主要有:Burp Suite,JD-Jui
手机通过配置代理将数据发送到Burp Suite分析
遍历账号login相应细节,存在账号则返回码为:0
提交账号请求:
服务器对账号请求的返回数据
测试破解验证码,修改用户密码。首先是请求接口password1,提交手机号码和参数,请求发送验证码,接口会返回aes加密所要使用的相关key,然后通过aes加密算法使用key+验证码和iv加密验证码加密码的字符串算出密码,发送给给服务器,这里代码是通过遍历测试,根据接口返回的信息,检查返回码,错误码为0就表示修改密码成功,打印相关消息。
反编译apk包所得到的加密算法:
找回密码password1接口测试:
更新密码password2接口测试:
将上面的测试过程编码,测试结果:
应用后台存在的漏洞主要是在于没有限定后台请求的次数,同时使用了简单数字验证码。在分析的过程中,花费时间多的地方在于对于加密算法的分析,通过反编译软件来找到AES算法及相应key与iv的组成。下面的工作就是进行编码测试了。
文章来源:FreeBuf黑客与极客(FreeBuf.COM)