1. 程式人生 > >如何修改移動終端的wifi(在忘記後臺username和password的情況下)

如何修改移動終端的wifi(在忘記後臺username和password的情況下)

    這幾天回家,家裡的wifi被小朋友們共享了,本來也沒什麼,畢竟我晚上10點後才對網有很大的需求,現在就比較恐怖了,10點鐘之後小朋友對wifi的需求不減反增了。於是我惱怒的要改wifi密碼了!

    首先這裡的路由器是裝的移動寬頻,所以我們在這裡登陸:

    192.168.1.1(也有的是192.168.0.1)

    

到這裡之後,突然懵逼了:

我發現應該在路由器上註明的賬號密碼不見了。

- -這時候就要發揮一個瞭解過網安的程式設計師應該有的素質了!

首先,分析這個網頁,開啟網頁原始碼:

<html>
	<head>
	<title></title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<script language="javascript" type="text/javascript" src="../js/jquery-1.4.2.js"></script>
	<script language="javascript" type="text/javascript" src="../js/jquery.json-2.2.js"></script>
	<script language="javascript" type="text/javascript" src="../js/jquery.utils.homestation.min.js"></script>
	<script language="JavaScript">
	var Status = '0';
	var REGTYPE = '0';
	document.onkeydown=function mykeyDown(e){   
	e = e||event;		
	if(e.keyCode == 13) 
	{
		document.getElementById('login_btn').click();
	}    
	return;
	}
function postRegisterResult()
{
	$.ajax(
    {
		url: 'registerResult_jiangsu.cgi?name=bb',
		dataType: 'json',
		cache: false,
		async: false,
		success: function(returnData, status)
        {
            if(returnData.RETURN.success)
            {
                callback(returnData.RETURN.success,returnData);
            }
            else
            {
                callback(returnData.RETURN.success,returnData);
            }
        }
    }
    );
}
	function onlogin(a) 
	{
		$.ajax({                                                                        
			url:'/area.conf',
			dataType:'json', 			
			cache:false,                                                                   
			async:false,                                                                   
			success: function(data, status){                                              
			AREACODE = data.AREA;                                                        
			RESULT = data.RESULT;				
			}
			});	
		if (a == 1)
		{	
			var loc = 'login_CM.htm.cgi?';
			var pass = password.value;
		    pass = pass.replace(/&/g, "123fiberhome321");
		    pass = pass.replace(/!/g, "321telecomadmin123");
		    pass = pass.replace(/#/g, "321useradmin123");
			loc += 'username=' + user_name.value;
			loc += '&password=' + pass;
			if(user_name.value == null || user_name.value.length <= 0)
			{
				alert("使用者名稱不能為空,請重新輸入!");
				return false;
			}			
			if(password.value == null || password.value.length <= 0) 
			{
				alert("密碼不能為空,請重新輸入!");
				return false;
			}			
			var code = 'location="' + loc + '"';
			eval(code);
		}
		else if (a == 2)
		{
			password.value = "";
			document.getElementById("login_error_hint").style.display = "none";	
		}
		else if (a ==3)
		{
			postRegisterResult();
			$.ajax({                                                                        
				url:'../JS.conf',
				dataType:'json', 			
				cache:false,                                                                   
				async:false,                                                                   
				success: function(data, status){                                              
				isOverMaxRegTime = data.isOverMaxRegTime;                                                        			
				}
				});	
			var regtype = '';	
			var Loid = '';				
			if (AREACODE == "Jiangsu" && isOverMaxRegTime == 1)
			{
				alert("已連續註冊失敗3次,請3分鐘後再嘗試註冊")
			}
			else if (AREACODE == "Jiangsu" && RESULT == 1)
			{
				alert("已經註冊成功,業務下發成功,無需再次註冊")
			}	
			else if (AREACODE == "Fujian" && RESULT == 1)
			{
				alert("裝置已註冊成功.無需再註冊")
			}
			else if (AREACODE == "Anhui" && RESULT == 1)
			{
				if (regtype != "2")
				{
					alert("該裝置已註冊成功(LOID:),如需重新註冊請恢復出廠設定")
				}
				else
				{
					alert("該裝置已註冊成功,如需重新註冊請恢復出廠設定")
				}	
			}
			else
			{
				window.location="../register.html";
			}
			document.getElementById("login_error_hint").style.display = "none";
		}	
		else if (a ==4)
		{
			window.location="routehainan.htm.cgi";
		}		
	}
		
	function formLoad()
	{
		var stata = '';
		var log = '0';
		if ( log == "1" )
		{
			setTimeout(function() {
			   var loc = '../index.html';
			   var code = 'window.parent.location="' + loc + '"';
			   eval(code);
			}, 60000 );
		}		
		var LOGSIGN = '0';
		var MENU_PREFIX = '';
		var Factory_mode = '0';
		var ROUTESTATUS = '1';

		if ( LOGSIGN == "3" )
		{
			alert("您的連續錯誤登陸次數已經超出3次,請1分鐘以後再試!");
		}		
		else
		{
		if ( MENU_PREFIX == "admin" )
		{
			alert("維護帳號已被禁用,請另選帳號登入!");
			document.getElementById("login_error_hint").style.display = "none";
		}
		else if ( MENU_PREFIX == "useradmin" )
		{
			alert("當前已有使用者在別處登入,請稍後登入!");
			document.getElementById("login_error_hint").style.display = "none";
		}
		else if ( MENU_PREFIX == "factory" )
		{			
			document.getElementById("login_error_hint").style.display = "";
		}
		else if ( MENU_PREFIX == "error" ) 
		{
			alert("您的連續錯誤登陸次數已經超出3次,請1分鐘以後再試!");
			document.getElementById("login_error_hint").style.display = "";
		}
		else
		{
			document.getElementById("login_error_hint").style.display = "none";
		}
		}
		$.ajax({                                                                        
			url:'/area.conf',
			dataType:'json', 			
			cache:false,                                                                   
			async:false,                                                                   
			success: function(data, status){                                              
			AREACODE = data.AREA;                                                        
			RESULT = data.RESULT;			
			}
			});
		

		if (AREACODE == "Jiangsu" || AREACODE == "Anhui" || AREACODE == "Fujian")
		{
			document.getElementById("register_btn").style.display = "";	
		}
		else
		{
			document.getElementById("register_btn").style.display = "";	
			if ( RESULT == '1' )
			{
				document.all("register_btn").disabled= 1;
			}
			else
			{
				document.all("register_btn").disabled= 0;
			}		
		}	
	}

	</script>
	<meta HTTP-EQUIV='Pragma' CONTENT='no-cache'>
	<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
	<link type=text/css rel=stylesheet href=../css/jquery.ui.core.css>
	<link type=text/css rel=stylesheet href=../css/style.css>
	<link type=text/css rel=stylesheet href=../branches/e8/customize.css>
	<link type=text/css rel=stylesheet href=../css/defaultBranding.css>
	</head>
	<body onLoad="formLoad()">
		<div class="wraplogin_CM">
			  <div id="login_header_CM"></div>
			  <div id="login_content">
					<div class="w_text">
						<div style="height:70px; width:400px; position:relative; left:190px;">		
							<div style="height:22px; width:inherit;">
								<span style="float:left;color:black;font-size: 12px; font-family: SimSun;" align=left>使用者:  </span>
								<span style="float:left;"><input name=user_name id=user_name class=board type=text size=20 /></span>
							</div>
							<div style="clear:both;"></div>						
							<div style="height:22px; width:inherit;">
								<span style="float:left;color:black;font-size: 12px; font-family: SimSun;" align=left>密碼:  </span>
								<span style="float:left;"><input name=password id=password class=board type=password size=20 /></span>
								<span id=login_error_hint align=left style="float:left; width:45%;display:none;"><font color='red'>使用者名稱或密碼輸入錯誤,請重新輸入</font></span>
							</div>
						</div>

						<div class="login_button2_CM">
							<span style="float:left;"><input type=button id=login_btn name=save onclick='onlogin(1)' value=登入 /></span>
							<span style="float:left;"><input type=reset id=reset_btn style="float:left;" onclick='onlogin(2)' value=取消 /></span>
							<span style="float:left;"><input type=button id=register_btn onclick='onlogin(3)' value=註冊 /></span>																
						</div>	
			  </div>
			  
			  <div id="login_footer"></div>		
		
		
		
				
			</div>
		</div> 
	</body>	
	</html>  

大概就是個簡單的基於ajax的html普通登陸驗證介面。

他的賬號密碼在登陸的時候都顯示了出來

var pass = password.value;
		    pass = pass.replace(/&/g, "123fiberhome321");
		    pass = pass.replace(/!/g, "321telecomadmin123");
		    pass = pass.replace(/#/g, "321useradmin123");
			loc += 'username=' + user_name.value;
			loc += '&password=' + pass;

所以我們只關注這個後面的程式碼。這裡是在防簡單的sql注入。

他把一些東西的關鍵詞給過濾了。比如#,!,&,相信懂sql注入的人都知道這些是什麼東西

&表示與,!表示非,#表示註釋。

因為它寫的方式,無法用js直接對其就行修改所以只能採用稍微繞一繞的方法了。

然後再看這段

if ( MENU_PREFIX == "admin" )
		{
			alert("維護帳號已被禁用,請另選帳號登入!");
			document.getElementById("login_error_hint").style.display = "none";
		}
		else if ( MENU_PREFIX == "useradmin" )
		{
			alert("當前已有使用者在別處登入,請稍後登入!");
			document.getElementById("login_error_hint").style.display = "none";
		}
		else if ( MENU_PREFIX == "factory" )
		{			
			document.getElementById("login_error_hint").style.display = "";
		}

這時候就很明顯了,看那個當前已有使用者在別處登陸,這個時候的使用者名稱為useradmin。

所以我們就鎖定了使用者名稱為useradmin

這個時候我們發現我們似乎只差密碼了。

但是密碼吧,很容易就可以百度到- -移動的wifi密碼是使用AES加密的。

AES是可以破解的。

然後開啟控制檯,移動到network那裡,這裡可以監控他們傳輸的資料包。隨便打一個密碼。


發現什麼都沒有,這時候開始分析AES由什麼獲取的,一般形式是如何,可以確定為四個字母一個數字,這樣是保證128位的,可自行百度,

然後把賬號改成' or 1=1#',同時禁用那個過濾的js,即pass=pass。控制檯輸入。

這個時候,你會發現network給了你正確的回饋。,


可以獲取AES加密後的密碼為j37772256t

具體怎麼解密肯定不能寫出來。。大家自己探索一下

要用sql注入和密碼學相關知識。


最後我登陸進去了修改了密碼,開開心心的刷劇了。