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的信息,这样的话就可以避免被弹窗。不过加密方式应该也是难点,再研究一番看有没有可能。