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&&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 = "/";
}
……
如下圖:
點選取消後即可。
第二次修改
8月18号晚上11點左右,發現加載後顯示的彈窗不一樣了,頁面元素并沒有全部加載出來再彈窗,于是猜測代碼被修改。
第二日檢視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的資訊,這樣的話就可以避免被彈窗。不過加密方式應該也是難點,再研究一番看有沒有可能。