家父换电脑后忘记邮箱密码了,之前一直用网易闪电邮直接收邮件……
查了下网易闪电邮,貌似是基于正常的POP3,所以应该会本地保存密码。Google了下,发现账户信息文件默认在 安装目录/account/<邮箱>/Account.stg 里,叫家父找到它发给我。看了下是个sqlite文件,打开后果然有一行是密码,base64过的,解开后包含non-ascii字符,应该是加过密的,看不出原来的密码……
于是在本地装了个闪电邮,先试了下用我的126马甲邮箱登录。然后把我的account.stg文件直接替换掉,重启闪电邮后发现可以用家父的邮箱收邮件。说明所有信息都在account.stg里,而且存在机器无关的解密方法。
最直观的想法是用星号密码查看器,看能否看到账户设置页面的星号密码。但google了前几个结果貌似都不能下载或者我这里不能安装,感觉很折腾……
与此同时走了另一条线。收信时可以不打开SSL,于是抓包,搜索用户名,发现用了个自定义的XML进行认证,里面有user和password域。但password仍然是base64,不过解开后发现是另一个东西,不是原密码,但也跟account.stg里不一样。于是又换成马甲邮箱,尝试不同的密码,观察发现加密后的结果,发现存在一定前缀关系,而且加密结果稳定,但没看出是什么加密算法。多尝试几次后就说尝试次数过多,我还以为封IP了,结果发现换个用户名就能接着试了…… 试了半天,但好像没发现明显的可总结的规律:
abab 6e4f 616d bb 6d5f cc 6f47 d 3c dd 3e30 de 3e35 ee 3e45 uvab 3483 e16d abababcd 6e4f 616d 5e5d 6f40 abcdefgh 6e4f 5e3e 31d5 3f44 abcdabcd 6e4f 5e3e 3e5d 6f40 aaaaaaaa 6e4e 616e 4e61 6e46 aaaaaaaab 6e4e 616e 4e61 6e4e 5d xaxaxaxa 423e 5c6c 8861 4236 W 1e Z 91 a 6c aa 6e46 b 6d bb 6d5f c 6e cc 6f47 d 3c dd 3e30 e 3c ee 3e45
后来某次换用户名时突然注意到账户设置里的星号密码长度跟我尝试的密码长度差不多,意识到可能就是明文的星号密码。。于是进一步google,终于找到了个可用的星号密码查看器(存网盘了:http://pan.baidu.com/s/1o6LnF78 ),发现还是个base64,但解开后就直接是明文密码了…… 所以折腾了两个小时最后回到原点,果然认真google是好习惯。
最终用星号密码查看器+base64 decode拿到了明文密码。看来闪电邮的安全性挺弱的…… 要加强的话,大概可考虑自定义通信协议用 token based authentication,或者至少把accounts.stg用机器相关的hash加密,再至少强制SSL,最起码也要自己实现个简单的加密通信协议不要每次都传同样的密文吧。。而且星号那里也不该简单存储base64吧。。目前有三个大的漏洞,一个是单机可用星号密码查看器直接得到明文密码,二是得到accounts.stg后就能得到明文密码,三是网络传输默认明文而且其加密(or hash)算法貌似可逆度非常高,要是有谁有耐心把加密方法破解了就轻松中间人了。。