Chazeon Talk

钓鱼网站是如何让那么多人上钩的

副标题:一个钓鱼网站的近距离观察与分析报告

注意,该钓鱼网站 aa286.com 目前已经下线。不知是管理员把该网站修复还是黑客们主动收手了。

最近有大批的同学不同程度被“盗号”。虽说对于虚拟资产不多的我们而言,被盗号,或者说被别人登录的经济损失并不严重,但被别人告知“你被盗号了”,并且去腾讯修改密码,这一过程还是搞得我们十分痛苦。甚至,很多人被盗号之后,根本意识不到自己到底是在哪一个阶段向别人透露了自己的帐号,至于别人收到一些奇葩的链接,简直变成了一件万分诡异的事情。于是,我便“深入虎穴”,研究了这个盗号过程的始末。对于我们这些少用 QQ 的小朋友们而言,对于如笔者这些有良好上网习惯的同志们而言,这也是我们第一次与钓鱼网站的亲密接触。

在这篇文章当中,笔者将从三个层次揭露盗号的整个过程,以满足不同人群的好奇心。由于不能确保实验研究过程的百分之百安全,不能确保除了钓鱼网站之外盗号还有没有利用漏洞进行木马植入、病毒传播的第二种手段,笔者还是用那句老话劝告大家,此处有风险,非专业人士,切勿模仿。笔者,就身先士卒了。

这篇文章的读者有三个层次的人群,如果你对于一些表面的问题不感兴趣的话,第一部分只看图片即可,然后直接跳到第二部分或者第三部分。恐怕那里更加适合你。如果你对于深入的技术细节不感兴趣,只要看第一部分和结尾即可。

上篇(Beginner):我们为什么会中招

首先,我们先来科普一下钓鱼网站这个概念。

钓鱼式攻击(Phishing,与钓鱼的英语fishing发音一样,又名“网钓法”或“网络网钓”,以下简称网钓)是一种企图从电子通信中,通过伪装成信誉卓著的法人媒体以获得如用户名、密码和信用卡明细等个人敏感信息的犯罪诈骗过程。这些通信都声称(自己)来自于风行的社交网站(YouTube、Facebook、MySpace)、拍卖网站(eBay)、网络银行、电子支付网站(PayPal)、或网络管理者(雅虎、互联网服务提供商、公司机关),以此来诱骗受害人的轻信。网钓通常是通过e-mail或者实时通信进行。它常常导引用户到URL与接口外观与真正网站几无二致的假冒网站输入个人数据。就算使用强式加密的SSL服务器认证,要侦测网站是否仿冒实际上仍很困难。网钓是一种利用社会工程技术来愚弄用户的实例。它凭恃的是现行网络安全技术的低亲和度。种种对抗日渐增多网钓案例的尝试涵盖立法层面、用户培训层面、宣传层面、与技术保全措施层面。

维基百科,钓鱼式攻击

这是维基百科对于钓鱼网站的定义。事实上,这些年,如果我们还算关注新闻的话,我们对于“钓鱼”这个词的第二重含义应当已经不再陌生了。类似于钓鱼执法,我们提得很多,就是放开钩去,通过骗术诱使他人上钩。而这里的一个“诱”字,便清楚得标明了,这里面,没好事。

事实上,笔者认为,钓鱼执法便是来源于钓鱼网站。本来就都算是外来词,毫无疑问,互联网领域的的这个词出现得更早些。那么,这里面的继承关系也就比较明显了。

说说钓鱼网站,用一句话说明白就是,弄个假网站糊弄你,你登录的时候用户名密码不是用来登录了,给了那个黑客了。这个假网站弄得真不真,直接保证了它得到你用户名密码的难以程度。这里面还不是就靠不被你发现不是。那么有人说了,这样的网站,我怎么知道啊,怎么就中了。于是,这篇文章的主角,我们的钓鱼网站就要粉墨登场了。

如第一张图片所示,这就是我们会看到的钓鱼网站,而第二张图片是该空间的正规登录页面。如果只看内容,我们怎么看得出来到底哪个是真,哪个是假?的确,钓鱼网站就是干这个的。怎么能让你看出来。当然,如果有细心的人,比如笔者,发现了这字体渲染里面的问题、或者你常用 QQ 空间的网页版,发现了这里面的区别,知道 QQ 空间改版改过,那就是另外一回事了。笔者敢说那绝对是少数,这是后话了。

然而,在我们口口声声地说,我们遇到这些链接不会轻易中招。然而为什么就中了呢?我们从整个中招的过程中猜测一下其中的逻辑,顺便说一句,其实这个逻辑还是挺靠谱的,虽说我是使用腾讯软件的新手。

我连着 QQ 的时候,突然有人给我发了一个链接,它说我长得像它,毫无疑问,我会点开这个链接,我很好奇,究竟这个是个什么人呢?而且这是个短链。虽然我没有用过正经的 QQ 空间分享的功能,但大概这也是有可能的,用了一个腾讯微博的段链(虽然我也刚刚知道,这是以 “url.cn/” 为样式的,新浪微博的是 “t.cn/”, Twitter 的是 “t.co/”,国外还有“bit.ly”、Facebook 的 “fb.me” 等等,很不少),非常合理,腾讯用一系列自己的产品。

点开,我发现,的确,这是一个 QQ 空间。因为我脑子里想象的全都是这个人的样子。有个登录窗口,其他部分都是变暗的。那么我就需要登录其中。我填了我自己的 QQ 号和 QQ 登录口令。咣!不对,再试一次,又不对,总算对了。我看到了这个人。嗯。不太像。算了,不去计较了。

然后你的 QQ 号大概已经被服务器登记了,只等着那个盗号网站背后的男人去登录,或许他会虏走你所有的虚拟财产?然后他会给这个人的所有好友接着发相似的信息。接着,会有另外的一批人点击这个链接,笔者可以提醒你一下,这里经历的,是一个指数级的增长。非常客观呐!

然后下面再讲一讲笔者的一些猜测。为什么我们需要多次填入密码呢?笔者猜这是某种防破解的手段。假如只是有人尝试性地填入一些信息,那么这个人多半不会多次输入相同的用户名和密码。然而,假如两次填写的内容近似或者完全一致的话,那么它会把这些内容记录下来,作为它尝试的一个凭据。

另一方面,笔者之所以猜测这个人是通过人工进行下一步而不是机器进行,则是因为一个简单的情况,即透过其他的方式,笔者发现一个人的不同好友收到信息不是完全同时的。假如是机器进行的,它大概会以最快的速度处理完一笔交易吧,更何况,破解腾讯日臻完善的自身的协议,恐怕也不是那么简单的一件事情。要不然,带来的安全问题早就比盗号这样严重得多了。

当然每条消息的不同也是一个证据。如图(在此不得不暴露一下令人鄙视的在 Android 上使用 iOS 7 风格的 QQ )

然后,还有最后一个问题,我们就可以来到越来越有意思的部分了。那么这个问题就是,我们如何防范这种情况的发生?我们只能说,多留心。钓鱼网站与真实网站的区别,虽说比较细微,但还是有的。首先,注意浏览器的地址栏,网站直接用的是跳转,而不是其他什么高级的技术,因此,浏览器的地址会不同,其次,多留心页面的主体部分。虽然 QQ 空间的格式一改再改,但日日登录网页版的同学大抵还是会意识到其中的区别,突然样式好像退化了一样。

但是,这里其实也有一个问题。真正喜欢使用,天天在使用 QQ 空间的人,大概很少会有不用客户端的,因为正常 QQ 空间网站个人的体验实在是差劲,这样的一批人不会发现问题,而不用 QQ 空间的人,比如笔者,就发现这的确是个 QQ 空间的样子,于是笔者也不会发现这里的细微差距,只是后来为了撰写这篇文章才意识到真正的 QQ 空间已经进化了。但这实在是一个拙劣的说法,因为你所看到的不过是截图而已,图片,其实制药换掉就好了,这在以后的防范中可能不起作用。而且,腾讯最可气的是还指定了中文字体是“宋体”,这一点,在绝大多数人所用的中文操作系统当中都能够轻而易举地满足,本来试图通过这方面给 Mac OS X 用户带来一点喜讯,但这一条是不存在的。因此,很多很多的人,不论跟腾讯 QQ 产品关系如何的人都会登录,因为他们所见到的网站符合他们一贯的较差的审美体验。

第一部分我们就写到这里。如果你对于钓鱼网站的细节内容还感兴趣的话,读下去,否则,请直接跳到结尾,因为这篇文章要面对不同的读者。

中篇(Intermediate):这些网站是怎么躲避监控的

仔细研究这个钓鱼网站表明,整个过程包含相互跳转的数个网站。这些网站的复杂性,使得它能够瞒天过海避免被腾讯检测到,而在短链跳转过程中对这一过程予以提醒;另一方面,一旦腾讯提示了可能是钓鱼网站之后,这后面两个网站,为最终网站留下了多个入口,这使得整个体系能免于全军覆没的灾难。

跳转过程涉及下列五类地址:

据笔者个人观察,这里面除了腾讯网之外剩下的网站大概都是正经的以 IIS/7.5 ASP.net 为后台的服务器,都是受到黑客攻击的正规网站,而且被 Google 等搜索引擎中有所收录。甚至即使在作为黑客攻击之后的跳转服务器之后,它的前台仍然能够正常工作,即我们直接访问网站首页还是可以得到正常的信息的,只是它的后台隐蔽地设置了跳转的代码。

事实上,笔者在检测过程中,发现的短链就有两个,他们牵出来的系列网站也是完整的两个系列,上面列出的便是其中之一。

在真正进行过程中,跳转速度还算是可以接受的。至少,和 QQ 空间正常载入的速度差不多,而在载入速度较慢的两次跳转之间,还有文字提示正在载入,可谓是非常贴心,上当一事,也便让人不以为意了。

接下来,我们考虑一下这一套网站当中其他的一些随机机制。

首先自然是前面所提到的跳转的多个入口使得腾讯公司的监管会有很大的难度。从短链的拒绝解析角度的“堵”几乎没有什么效果。

第二个,便是钓鱼网站本身是随机生成的。我们可以围观以一下这个钓鱼网站在某一时刻获取的代码(这里只保留了最重要的部分),我们可以看到,这里的变量名都是一些随机生成的字符串,长度也不一样,因此直接匹配有很大的困难。事实上,这些随机字串是实时生成的,在输出结果的过程中,也是以这些内容作为变量名输出。每一次刷新,这些字串都会完全不一样。因此这样的信息难以通过简单的匹配截获。

<div id="D2nlQ9Kf">
<form name="UWnAzNcjKPRpc635kA" action="" method="post">
<p class="lM3xci1uj8"><span class="pjJJ3wtDnt">编号:</span><input name="x73zzpFngdMAeesF" id="x73zzpFngdMAeesF" type="text"/></p>
<p class="yxDuou86hAx"><span class="EnUhq8DPFUe">密码:</span><input name="x4NRcQhjDLouRleSn" id="x4NRcQhjDLouRleSn" type="password"/></p>
<div id="mKtk4" onClick="ZkjmGoQJ3U()"></div>
</form>
</div>
<script type="text/javascript">
function keyDown(){ 
    if (event.keyCode == 13) { 
        ZkjmGoQJ3U();
    }   
} 
document.onkeydown=keyDown; 
function ZkjmGoQJ3U(){
    if(UWnAzNcjKPRpc635kA.x73zzpFngdMAeesF.value==""){
        alert('请输入帐号!');
        return false;
    }
    if(UWnAzNcjKPRpc635kA.x4NRcQhjDLouRleSn.value==""){
        alert('请输入密码!');
        return false;
    }
    UWnAzNcjKPRpc635kA.action = "";
    UWnAzNcjKPRpc635kA.submit();
}

</script>

第三个,就是 cookie 的随机性,每天,所需登录的 cookie 都不一样,而如果没有正确的 cookie 我们所看到的就是好好的网站,发现不了他们已经被入侵过的悲惨事实,这些网站因此也难以被监控。

事实上,这样具有一定随机性的网站,只有依靠如笔者这般的热心群众的关注才能被及时发现,对于每一个类似东西进行一个匹配,不但滥杀无辜伤不起,哪怕只考虑花在上面的代价也是不可接受的。

下篇(Advanced):谈一点技术,跳转与制造

腾讯的跳转,毫无疑问是标准的 302 跳转。

第二次跳转,是首先通过 Javascrip DOM “document.URL” 获得的地址中 query 部分 “cnbais.com/c8edb71beeef9a51/index.htm” 与 “http://www.” 连接起来,并利用 Javascript 的 DOM 控制 “window.location.href=url;” 跳转到该页面。

原代码如下:

<html>
<head>
</head>
<body>
<script type="text/javascript">
    function getpara()
    {
        var url=document.URL;
        var para="";
        if(url.lastIndexOf("?")>0)
        {
            para=url.substring(url.lastIndexOf("?")+1,url.length);
            var arr=para.split("&");
            para="";
            for(var i=0;i<arr.length;i++)
            {
                var url="http://www."+arr[i].split("=")[1];
            }

        window.location.href=url;
        }
        else
        {
            document.write("没有参数!");
        }

    }
    getpara();
</script>

</body>
</html>

这就是第一部分的代码。

第二部分,挂载在 aa286.com 之上的一部分 Javascript, 这一部分的代码功能和上面类似,但写法复杂了许多,还充斥着大量的象征着黑客的 F*** 四字母词汇,以及大量象征中国程序员创造的拼音变量名。

代码如下:

<!DOCTYPE>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>正在载入 ...</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
    if (typeof (fuck) == 'undefined') { fuck = {}; }
    if (!fuck.passport) {
        fuck.passport = {
            registerNumber: {},
            registerRedirect: function (url) {
                var n = this.registerNumber[url];
                n = n ? n + 1 : 1;
                this.registerNumber[url] = n;
            },
            defaultRedirect: function (url) {
                var n = this.registerNumber[url];
                n = n ? n - 1 : 0;
                this.registerNumber[url] = n;
                if (n <= 0) {
                    window.location.href = url;
                }
            }
        };
    }
</script>
<div>正在载入请稍候 ...</div>
<script type="text/javascript">
    (function() {
        var url = ("fuckyou"=="1") ? "/" : unescape(decodeURI("/"));
        if (fuck.passport.clientRedirect) {
            fuck.passport.clientRedirect(url);
        } else {
            window.location.href = url;
        }
    })();
</script>

</body>
</html>

只不过这里的 HTTP 头部会提供一个形如 “ASPSESSIONIDAQBCQQSA=DACFELFADAIJFHKGPKNLBEMK” 的 cookie。 不知为何,正常的 ASP 的 cookie 应该类似于 “ASPSESSIONID=FOOBARFOOBARFOOBAR”, 这一部分的 cookie 也是被重写过的。

这个 cookie 的周期大约是一天左右。同一天登录,获得的这个 cookie 是相同的;带着这个 cookie 访问 aa286 网站首页,显示的是钓鱼网站,否则这里只显示一个普通的建站信息。等到过了这一天,这个 cookie 就会失效,访问 aa286 网站得到的是普通建站信息,此时可以通过登录那个网站来刷新 cookie。

第三个就是我们可以观察一下真正钓鱼页的代码。之前只摘录了一小部分,现在全部照录如下:

<html>
<META http-equiv=Content-Type content="text/html; charset=gb2312">

<STYLE type="text/css">
#mKtk4{cursor:pointer;  width:102px;height:27px;position:relative;z-index:20;left:118px;top:138px;}
#x73zzpFngdMAeesF{border:none;height:22px;width:196px;overflow:hidden;position:relative;left:113px;top:102px;}
#x4NRcQhjDLouRleSn{border:none;width:196px;overflow:hidden;position:relative;height:21px;left:113px;top:120px;}
#elhlnEpwo{width:100%;height:100%;background-color: #000;opacity:0.2;filter:alpha(opacity=20);}
#D2nlQ9Kf{width:423px;height:370px;background:url(/images/login.png) no-repeat;position: absolute;left:50%;top:50%;margin-left: -250px;margin-top: -150px;}
.BB6U9Blwvq8,.pjJJ3wtDnt,.EnUhq8DPFUe,.aVawaIAh2uc,.x3iuqkJRTN4,.AJF1xhJZS0{display:none;}
.yxDuou86hAx,.lM3xci1uj8{clear:both;padding:0;margin:0}
body {font-size:12px;BACKGROUND: url(/images/164.jpg) no-repeat #f9fafb center top;MARGIN: 0px;}
</STYLE>

<title>M2ZVZVIGnef0D</title>
</HEAD>
<BODY>
<div class="BB6U9Blwvq8" id="header">
    <ul>
        <li><a href="/web/index.asp">返回首页</a></li>
        <li><a href="/web/list.asp?classid=3">关于我们</a></li>
        <li><a href="/web/list.asp?classid=9">公司荣誉</a></li>
        <li><a href="/web/list.asp?classid=1">新闻中心</a></li>
        <li><a href="/web/list.asp?classid=2">产品展示</a></li>
        <li><a href="/web/list.asp?classid=7">人才招聘</a></li>
        <li><a href="/web/list.asp?classid=8">公司荣誉</a></li>
    </ul>

</div>
<div id="elhlnEpwo">
</div>
<div id="D2nlQ9Kf">
<form name="UWnAzNcjKPRpc635kA" action="" method="post">
<p class="BB6U9Blwvq8"><span class="BB6U9Blwvq8">姓名:</span><input name="userid" type="text"></p>
<p class="lM3xci1uj8"><span class="pjJJ3wtDnt">编号:</span><input name="x73zzpFngdMAeesF" id="x73zzpFngdMAeesF" type="text"/></p>
<p class="yxDuou86hAx"><span class="EnUhq8DPFUe">密码:</span><input name="x4NRcQhjDLouRleSn" id="x4NRcQhjDLouRleSn" type="password"/></p>
<p class="pjJJ3wtDnt"><span class="aVawaIAh2uc">重复密码:</span><input name="userpwd" type="password"></p>
<p class="EnUhq8DPFUe"><span class="x3iuqkJRTN4">性别:</span><input name="sex" type="text"></p>
<p class="aVawaIAh2uc"><span class="AJF1xhJZS0">年龄:</span><input name="age" type="text"></p>
<p class="x3iuqkJRTN4"><span class="pjJJ3wtDnt">邮箱:</span><input name="email" type="text"></p>
<p class="AJF1xhJZS0"><span class="EnUhq8DPFUe">地址:</span><input name="address" type="text"></p>

<div id="mKtk4" onClick="ZkjmGoQJ3U()"></div>
<p class="BB6U9Blwvq8"><a href="/web/index.asp?action=register"><span class="BB6U9Blwvq8">注册新用户</span><a/>&nbsp;<a href="/web/index.asp?action=getpass"><span class="BB6U9Blwvq8">忘记密码</span><a/></p>
</form>

</div>
<script type="text/javascript">
function keyDown(){ 
    if (event.keyCode == 13) { 
        ZkjmGoQJ3U();
    }   
} 
document.onkeydown=keyDown; 
function ZkjmGoQJ3U(){
    if(UWnAzNcjKPRpc635kA.x73zzpFngdMAeesF.value==""){
        alert('请输入帐号!');
        return false;
    }
    if(UWnAzNcjKPRpc635kA.x4NRcQhjDLouRleSn.value==""){
        alert('请输入密码!');
        return false;
    }
    UWnAzNcjKPRpc635kA.action = "";
    UWnAzNcjKPRpc635kA.submit();
}

</script>
<div class="BB6U9Blwvq8" id="footer">
<span><img src="/web/theme/mb/images/bang.gif"  /></span>
    <a href="/web/">麦酷电子商务</a> | <a href="/web/news/">新闻资讯</a> | <a href="/web/user/">会员中心</a> | <a href="/web/plug/book.asp">在线留言</a>  | <a href="/web/about/">联系我们</a>
      麦酷电子商务 <br/>
      2013 时代网站信息管理系统  版权所有<a href="/web/plug/rss.asp">RSS</a> <a href="/sitemap_baidu.xml">baidu</a> <a href="/sitemap_google.xml">Google</a>
</div>

</BODY>
</HTML>

所有的代码内容只包含在这样动态返回的一个伪静态的网页当中,没有单独的 .js 文件,没有特殊的 .css 文件,不得不承认写得是相当的简单粗暴。仔细观察,这里实际上只是通过表单 (form) 的一个简单的 .submit() 函数,向根目录发送一个表单的 POST 请求,上传表单填写的内容,注意这里表单的内容是有冗余的部分的,包括重复的密码、生日等等信息,是可以被扩展为一个注册网页的。返回值这里并没有写出来。一般来说,首先返回的是 “alert(“您输入的密码错误,请重新输入”);” 这样的一条通知。接下来,这一部分网页会重新出现一遍。当表单信息被重复提交了 2-3 遍之后,返回的第一行信息会变为 ” window.href=”http://281971873.qzone.qq.com” ” 然后故伎重演,跳转到那个真实的 HTML 网页之上。

另外我们也说一说这张网页的构成。这张网页呢,实际上是由两张图片构成的,这前面也说了。分别通过内嵌的 CSS 代码,分别设为 “body” 部分的背景和登录的一个 “div” 的背景。这个,不得不承认,还是相当真实的。两个登录框,实际上就是直接是表单的一部分,也是通过 CSS 代码固定了他们的位置,控制得非常好。

下面展示的便是从钓鱼网站提取的两张图片。

笔者曾经尝试给这个钓鱼网站喂一些垃圾信息,从而也发现了它的某些自保措施。当按照规定发送了几十组可能被接收到了的信息之后,发送一方的 IP 地址会被自动拒绝,然后这条规则在大约一天以后又一次地失效,这样的话,我们还能够继续访问该网站。

一点小小的要注意的就是,我们发送这个表单的 HTTP POST 方法过程中,都是要写清楚 Content-type 是用什么编码写的之类;在发送 HTTP GET 之类的请求还是要把 User-Agent 写上 Mozilla, 否则这些矫情的 IIS/7.5 ASP.net 服务器是不会正常响应网页的内容的。

总结

所以最后我们要给这一系列的把戏(英文中的 tricks)盖棺定论了。这个网站究竟如何呢?

首先,这一套体系的设计思路还是相当巧妙的。通过适当的逻辑使得大量的用户中招,并且中招之后也难以及时发现,这是一件多么奇怪的事情。

从技术层面上来讲,笔者起初还以为这是什么一个超级强大的跨平台的木马程序在作怪,使得大量的 QQ 号被精确地盗走,实验过程中还专门准备了虚拟机,并对虚拟机的虚拟硬盘做了备份,结果才发现居然是这么简单的一个钓鱼网站。

然而笔者一开始也没有料到,在这个过程中,在这一系列网站之间,通过了那么多次复杂的跳转,来掩饰其真实的目的。这是相当聪明的办法,笔者只是看了末端的网站,一度以为这真的只是一个静态网站而已。实际不是。中间环节太多,太复杂了。笔者是通过浏览器的隐身模式来测试 cookie 控制,重新开启一个隐身窗口后发现 aa286.com 那个网站完全不一样了,到这时,笔者才意识到这里面 cookie 的特殊作用。

从代码的角度上来讲,笔者确实很怀疑这个黑客的技术。代码,不管是不是直接生成的,拿了别人的来用,还是自己写,写的真是好难看啊!对于如笔者这样有一点代码强迫症的人来说完全不可接受。比如行首缩进有的地方用的是 4 个空格,有的地方用的是 TAB 缩进。然后代码当中,变量名用得很乱,而 HTML 网页也没有按照标准写, DOCTYPE 有的有有的没有,代码解释有的地方写了 有的地方没有,还在用 标签,真是相当混乱相当糟糕了,简直让人目不忍视。

但不管如何,盗号的目的曾经被达到过,好多人的帐号密码不得不被重新设置,如今,这一系列网站不知是被发现修复还是怎么着,它们的踪迹已经在消失,不见了。可谓是三十年河东,三十年河西啊!

这也是笔者与这种类型的钓鱼网站的第一次亲密接触,之前,所谓的钓鱼网站大多也只停留在江湖传言的阶段,如今,笔者便笔而记之,作为对后来之人的警示。但愿大家在今后的过程中,多一份小心。

最后还是要吐槽腾讯,要不是那么蛋疼的应用逻辑,自始至终糟糕的不统一的体验,这种恶劣的情况才不会发生呢!

最后的最后,笔者把那个钓鱼网站的样子静态处理、无害化处理之后的网页放出来,供大家把玩。它已经不会再正常地提交表单,而只能弹出提示框。如果不放心,把玩过程中可以完全不需要填写真是的帐号密码。该网页也可提供下载。

在线把玩地址: http://chazeon.com/wp-content/uploads/2014/01/fish/index.html

打包下载: http://chazeon.com/wp-content/uploads/2014/01/fish.zip [MD5-fa051bc8f1c5f6324d4e6862a1ea44ac | fish.zip]

二〇一三年一月十六日