如何修改移動終端的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注入和密碼學相關知識。
最後我登陸進去了修改了密碼,開開心心的刷劇了。