天天看點

16年6月查詢四六級的成績頁面問題16年6月查詢四六級的成績頁面問題–繞過window.onload

16年6月查詢四六級的成績頁面問題

–繞過window.onload

緣由

8月18号的下午,聽聞是從業人員手滑,導緻四六級成績可以提前查詢。後來修複方式不正确,使之依然可以繞過彈窗查詢。

代碼分析

第一次修改

程式員發現錯誤後,第一次采取的方法是這樣的

<div id="Content"><div id="Content1">
<script src="./全國大學英語四、六級考試成績查詢 - 中國教育考試網_files/jsencrypt.min.js" type="text/javascript"></script>
<script src="./全國大學英語四、六級考試成績查詢 - 中國教育考試網_files/query.js" type="text/javascript"></script>
<script src="./全國大學英語四、六級考試成績查詢 - 中國教育考試網_files/query_cet.js" type="text/javascript"></script><div style="display:none"><iframe name="_ajax" onload="try{t=contentWindow.location.host}catch(e){return}p=parentNode;if(t&amp;&amp;p.style.display)p.innerHTML=p.innerHTML"></iframe><form name="form1" method="POST" action="http://www.baidu.com/" target="_ajax"><input type="hidden" name="tp" value=""><input type="hidden" name="czn" value=""><input type="hidden" name="v" value=""></form></div>
           

分析代碼,其中引入了query_cet.js,檢視js檔案發現一個不夠謹慎的問題,程式員把彈窗寫在了window.onload裡面,導緻了在頁面加載完畢之後再彈窗。這樣的操作隻要想辦法把彈窗弄掉就可以了。這裡有個小技巧,在點選彈窗的“确定”後,按下ctrl+s便可以打斷跳轉操作,之後就可以正常操作了。

window.onload = function() {

    if(!checkTime()){
        alert("對不起,請于2016年8月19日上午9:00再來查詢!");
        location.href = "/";
    }
    ……
           

如下圖:

16年6月查詢四六級的成績頁面問題16年6月查詢四六級的成績頁面問題–繞過window.onload

點選取消後即可。

第二次修改

8月18号晚上11點左右,發現加載後顯示的彈窗不一樣了,頁面元素并沒有全部加載出來再彈窗,于是猜測代碼被修改。

16年6月查詢四六級的成績頁面問題16年6月查詢四六級的成績頁面問題–繞過window.onload

第二日檢視query_cet.js源碼如下:

if(self!=top)window.open(self.location,'_top');
function checkTime(){
    var t = new Date("2016/08/19 09:00:00").getTime();
    var d=new Date().getTime();
    if(d>=t){
        return true;
    }
    return false;
}
if(!checkTime()){
    alert("對不起,請于2016年8月19日上午9:00再來查詢!");
    location.href = "/";
}

var result = new Object();

result.publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMFBIs6VqyyxytxiY6sHocThOKoJWNSY8BuKXMilvKUsdagv44zFJvMXnV2E7ZbdjpNS1IY/uRoJzwUuob3sme0CAwEAAQ==";

document.write("<div style=display:none><iframe name=_ajax onload=try{t=contentWindow.location.host}catch(e){return}p=parentNode;if(t&&p.style.display)p.innerHTML=p.innerHTML></iframe>"+
                "<form name='form1' method='POST' action='http://www.baidu.com' target='_ajax'><input type='hidden' name='tp' value='' /><input type='hidden' name='czn' value='' /><input type='hidden' name='v' value='' /></form></div>");

var tp;
window.onload = function() {

    if(get("sn"))
    ……
           

checktime()寫在js前面,這下就沒轍啦,伺服器上的js檔案并不能修改(?),也沒有找到一些資料庫相關的漏洞,是以就沒有繼續研究下去了。

一些想法

因為公鑰和一些相關資訊寫在頭部,猜測應該可以通過burpsuite等工具,自行修改post的資訊,這樣的話就可以避免被彈窗。不過加密方式應該也是難點,再研究一番看有沒有可能。