核心提示,通过本文的提示,可达到如下目的:
1、木马制作者。可以绕过招行(以及同类的ActiveX)的保护,获取用户的帐户和密码(密文);
2、非IE使用者。可以达到使用其他系统其他浏览器登录招行(以及其他,比如腾讯财付通)的目的;
最近看到讨论招行ActiveX的贴子相当火热,一时手痒,作点研究。
首先,我要声明,招行的ActiveX并不安全,我已做出测试代码,可截取到用户的输入。不过出于安全考虑,我不会公开。另外,现在已经有木马可以做到,这并不是什么高难度问题。
现在,我们要讨论的是,不用二进制级的代码hack,只用一些简单的COM和javascript就可以达到目的。
我们先谈谈招行的登录流程,打开网页代码,可以看到,大概是这样的:
a)在ActiveX控件中输入卡号和密码,这时一般的没作过特殊处理的木马是截取不到键盘输入的;
b)用户提交时,页面脚本生成一个loginInfo(自定义javascript类),然后用一个函数(使用了XMLHTTP)提交这个类的数据。问题就出在这一步,我们知道,不管怎么样,卡号和密码都是要被提交到服务器的,只是被加密了而已。招行用的方法是“loginInfo.AccountNo = LoginForm.DebitCardNo_Ctrl.IValue;”这样的语句,DebitCardNo是控件的名字,IValue是被加密的,而且每次获取都用不同的种子加密了。
招行在这里有什么漏洞可以被利用?
很简单,招行页面提交的加密信息一是与页面状态无关(即不是页面提供种子),二是是可以重用,也就是如果记下一次的加密信息,以后就可以用这个加密信息来登录。目前我不能从密文得到明文,但我相信一定是可以的,虽然服务端不一定要知道明文的密码,但一定要知道明文的帐号吧,而且有一次我操作测试结果表明,服务端确实是会解析出明文的。啰嗦了一大堆,结论就是:现在很容易得到密文,而且一定可以推出明文,算法待研究。
怎么获取到密文,怎么模拟登录?我的步骤如下(假设我的程序已运行在后台)
a)发现招行的页面打开之后,修改这个页面的form的onsubmit的脚本——修改过的脚本会在用户提交前将密文保存起来;
b)模拟