Hydra. почему подобранный пароль не подходит ?

Discussion in 'Уязвимости' started by lok888, 5 Mar 2017.

  1. lok888

    lok888 New Member

    Joined:
    5 Dec 2016
    Messages:
    43
    Likes Received:
    0
    Reputations:
    0
    доброго времени суток всем.
    гидрой пытаюсь брутить айпишник порт 8080
    гидра с разными логинами ( admin/root) выдает результат, что можно войти с паролем 123456
    причем в обоих случаях на одном и том же айпишнике.

    однако не подходят они. не авторизуется с этими логинами и паролями.
    почему так гидра находит не верные логины и пароли ?
    как исправитть?

    скринн не вставляется почему то
    вот ссылка
    http://uploads.ru/8LOno.jpg

    [​IMG]
    [​IMG]
    [​IMG]
     
    #1 lok888, 5 Mar 2017
    Last edited: 6 Mar 2017
  2. lifescore

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

    Joined:
    27 Aug 2011
    Messages:
    599
    Likes Received:
    451
    Reputations:
    65
    руками повтори, желательно с таким же p/pm
    скрин один виден, удали (s) в протоколе на скрин, если конечно на них присутствует конфиги. А так, проще повтори посмтри, получишь ответ. Только не забывай валидировать попытки не как хомосапиенс, а как ты в гидре это указал.
    p.s. ну или просто делай валдацию по кукам, если конечно это консольная сатана так вообще умеет)
    Имхо, яб даже быстрее руками бы сбрутил чем эту гидру пока настроишь, пока она покрехтит..
     
  3. lok888

    lok888 New Member

    Joined:
    5 Dec 2016
    Messages:
    43
    Likes Received:
    0
    Reputations:
    0
    Эмм... признаться я с гидрой и брутом очень мало знаком. Брут осуществлял практически из инструкций гугла copy/past.))
    Если возможно напишите как обычному пользователю ПК как это руками сделать?
    Что такое p/pm тож не знаю((
    И как это "валидировать"?

    в гидру ввел такой запрос (тож в гугле нашел :))
    hydra -l root -P passwords.txt -o ./hydra_result.log -f -V -s 8080 111.11.111.111 http-post-form "/cgi-bin/luci:username=^USER^&password=^PASS^:Invalid username"
    (айпи другой конечно же)
     
  4. lifescore

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

    Joined:
    27 Aug 2011
    Messages:
    599
    Likes Received:
    451
    Reputations:
    65
    p/pm - passwords per minute

    ну тогда все ясно)
    ну типичная ошибка, у вас идет валидация по строчке invalid username
    Даже по скрину как я понял, видно, хотя не столь важен конкретный пример.
    Допустим движки ipb/vbulletin форумов если взять, дефолтно в конфигах выставлено 5 попыток пароль выести на 1 логин в течении 30-60 минут. И все 4 первые будь да что-то вроде неверный пароль осталось Х попыток. Но при пятой не удачной эта строчка заменяется на "пользовтель заблокирован на ХХ минут"

    Ну это понятно и валенку, суть в том что, обычно в подоьных системах как у вас, да тот же pma, может вообще грубо говоря вернуть ответ пустой, может быть там waf стоять кооторый будет фильтровать попытки как это реализовано довольно часто в ftp/ssh

    Элементарно говоря, конечно все куда замудренней и зависит зачастую от ситуации.

    В конкретном случае с gpon, посмотрите сорс странички (ctrl+u)
    явным "валидатором" будет строчка

    Code:
    XUsername = "Guest";
    var XPasswdTip = '';
    var XHasLogin = '0';
    в случае авторизации предпологаю значение сменится на '1'
    var XHasLogin = '0';

    Добавьте еще -vV, по логу будет ясна ошибка, в случае если он все еще будет присутсвовать

    вместо invalid user, мануал глянул бегло, вроде как в гидре это делаетьсч так
    :S=XHasLogin = '1';

    где :S= последняя опция указывающая на то, что если Source страницы содержит текст после "=", такая автортзация удачна.

    p.s. не забываем экранировать пробелы и ковычки в зависимоти от ОС и требованиям гидры. если просто так добавить, бось гидра это прочтет не как строчку haslogin а как праметр со значением '1'.
    Хз, может вообще нельзя ковычки использовать как текст, я один раз в жизни гидру эту открывал, и славу богу что последний) Ну вообщем либо другую строчку, но invalid username только когда 100% всегда один ответ при не удачной попытке

    но в иделае по хедерам фильтровать, во первых это быстрее, не надо тянуть сорс, во вторых это уневерсально, в RFC расписаны стандарты ответов, под все случая так скажем. 100-200 коды - успех, до 399 педиректы, остальное либо fail либо ошибки сети.
    но впрочем это уже точно не под гидру)
     
  5. lok888

    lok888 New Member

    Joined:
    5 Dec 2016
    Messages:
    43
    Likes Received:
    0
    Reputations:
    0
    вот код страницы, но там нету
    XUsername = "Guest";
    var XPasswdTip = '';
    var XHasLogin = '0';

    Code:
    <!-- vim:fenc=utf-8
    -->
    <html>
    <head>
    <title>GPON Home Gateway</title>       
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script>if(self!=top) top.location=self.location </script>
    <link rel="stylesheet" href='/css/main.css' type='text/css'/>
    <style>
    body {
        margin:0px; padding:0px; background:#ffffff;
        font-size:12px; color:#E36813;
        line-height:170%;
        text-align:center;
        vertical-align: middle ;
        padding-top: 150px;
    }
    .ct_text{
        width:115px;border:1px #87a6c3 solid;background:#ffffff;
    }
    
    </style>
    <script src="js/jquery-1.6.1.min.js" charset="UTF-8"></script>
    <script>
    var err_t=[];
    var ns4 = (document.layers) ? true : false;
    var ie4 = (document.all) ? true : false;
    
    var hexVals = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
                  "A", "B", "C", "D", "E", "F");
    var unsafeString = "\"<>%\\^[]`\+\$\,'#&";
    // deleted these chars from the include list ";", "default.htm", "?", ":", "@", "=", "&" and #
    // so that we could analyze actual URLs
    
    function isUnsafe(compareChar)
    // this function checks to see if a char is URL unsafe.
    // Returns bool result. True = unsafe, False = safe
    {
       if ( unsafeString.indexOf(compareChar) == -1 && compareChar.charCodeAt(0) > 32
            && compareChar.charCodeAt(0) < 123 )
          return false; // found no unsafe chars, return false
       else
          return true;
    }
    
    function decToHex(num, radix)
    // part of the hex-ifying functionality
    {
       var hexString = "";
       while ( num >= radix ) {
          temp = num % radix;
          num = Math.floor(num / radix);
          hexString += hexVals[temp];
       }
       hexString += hexVals[num];
       return reversal(hexString);
    }
    
    function reversal(s)
    // part of the hex-ifying functionality
    {
       var len = s.length;
       var trans = "";
       for (i = 0; i < len; i++)
          trans = trans + s.substring(len-i-1, len-i);
       s = trans;
       return s;
    }
    
    function convert(val)
    // this converts a given char to url hex form
    {
       return  "%" + decToHex(val.charCodeAt(0), 16);
    }
    
    function encodeUrl(val)
    {
       var len     = val.length;
       var i       = 0;
       var newStr  = "";
       var original = val;
    
       for ( i = 0; i < len; i++ ) {
          if ( val.substring(i,i+1).charCodeAt(0) < 255 ) {
             // hack to eliminate the rest of unicode from this
             if (isUnsafe(val.substring(i,i+1)) == false)
                newStr = newStr + val.substring(i,i+1);
             else
                newStr = newStr + convert(val.substring(i,i+1));
          } else {
             // woopsie! restore.
             alert ("Found a non-ISO-8859-1 character at position: " + (i+1) + ",\nPlease eliminate before continuing.");
             newStr = original;
             // short-circuit the loop and exit
             i = len;
          }
       }
    
       return newStr;
    }
    
    function onlogin() {
        with ( document.forms[0] ) {
            if(username.value.length <= 0) {
                alert("user name is null");
                return;
            }
    
            var loc = "login.cgi@username=" + encodeUrl(username.value) + "&psd=" + encodeUrl(password.value);
            var code = 'location="' + loc + '"';
            eval(code);
        }
    }
    
    function onlogindiag() {
        with ( document.forms[0] ) {
            if(username.value.length <= 0) {
                alert("user name is null");
                return;
            }
    
            var loc = "login.cgi@diag=1" + "&username=" + encodeUrl(username.value) + "&psd=" + encodeUrl(password.value);
            var code = 'location="' + loc + '"';
            eval(code);
        }
    }
    
    function myKeyDown(e) {
        if(ns4 && e.which==13){
            //onlogin();
            return e.which;
        } else if(ie4 && window.event.keyCode==13) {  
            //onlogin();
            return window.event.keyCode;
        }
        return 0;
    }
    
    document.onkeydown = myKeyDown;
    if(ns4) {
        document.captureEvents(Event.KEYDOWN);
    }
    
    var popUpWin=0;
    
    function popUpRegWin()
    {
      if(popUpWin)
      {
        if(!popUpWin.closed) popUpWin.close();
      }
      popUpWin = open("reg.cgi", 'popUpWin',
      'toolbar=yes,location=no,directories=no,status=no,menubar=yes,scrollbars=yes,resizable=yes,copyhistory=yes,width=800,height=600,left=200, top=200');
    }
    
    function frmLoad() {
      with (document.forms[0]) {
         
                 username.focus();
    
         
    
       
        if ($("#tip").val() != undefined) {
    
            tip_stat="";
            tt="<font color='black'>Password Tip:</font>";
    
    
    
            if ($("#tip").text() == ""){
                tip_stat=tt+"<font color='red'>Default web password is WiFi WPA password</font>";
    
                $("#tip").text("");
                $("#tip").html(tip_stat);
    
            }else{
                stt="<font color='red'>"+$("#tip").text()+"</font>";
                tip_stat=tt+stt;
                $("#tip").html(tip_stat);
            }
    
        }
       
        if(err_t.length >0){
           err1=parseInt(err_t[0]);
           if((err1>0)&&(err1<4)){
               err_str="<font color='red'>You have failed</font>";
               err_str+=" "+err1+" ";
               err_str+="<font color='red'>times</font>";
               $("#err_times").html(err_str);
           }else{
               $("#err_times").html("");
           }
        }
    
       
      }
    }
    
    </script>
    </head>
    <body leftmargin="0" topmargin="0"  onload="frmLoad()">
    <form method="post" action="login.cgi" >
    
    <table width="300" height="20%" cellpadding="0" cellspacing="0" bgcolor="#ffffff" align="center" >
        <tr height="32" bgcolor="#4393A3" align="center"  >
            <td colspan=2 style="FONT-WEIGHT: bold;color:#000000;">GPON Home Gateway Login </td>
        </tr>
        <tr height= "100" >
            <td  width="100%"  style="border:2px solid #4393a3 ">
                <table >
                    <tr height="50%" align="top">
                        <td align="center" width="55%" style="color:#000000">Username</td>
                        <td  align="center" width="120" height="15" >
                       
                        <input type="text" name="name" id="username" class="ct_text"  style="background-color:0xffffff" value="" maxlength="55"/>
                       
                        </td>
                    </tr>
                    <tr height="10" background-color:#ffffff></tr>
                    <tr>
                        <td align="center" width="55%" style="color:#000000">Password</td>
                        <td align="center" width="120" height="15"><input type="password" name="pswd" id="password" class="ct_text" style="background-color:0xffffff"  maxlength="88"/></td>
                    </tr>
                    <tr height="5" align=center>
                        <td colspan=2 id="err_times"></td>
                    </tr>
                </table>
            </td>
        </tr>
    
        <tr height="12" bgcolor="#4393A3" align="center">
            <td colspan=2>
                <table width="100%">
                    <tr>
                        <td width="40%" align="right">
                            <input type="submit"  height="10" value="Login"  />
                        </td>
                        <td align="center">
                            <input   type="reset" height="10" value="Reset"/>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
       
    </table>
    </form>
    </body>
    </html>
    
    заменил в команде Invalid username на S=XHasLogin = '1' как вы написали. ну из библиотеки нескольких логинов и паролей ( у меня не большой список паролей (текстовый файл на 1 кб всего) на этот раз не обнаружено ни одного пароля и логина.
     
  6. Kevin Shindel

    Kevin Shindel Well-Known Member

    Joined:
    24 May 2015
    Messages:
    974
    Likes Received:
    1,149
    Reputations:
    60
    lifescore правильно написал, видимо лочит по кол-ву попыток.
    1. Можно попробовать изменить валидацию
    2. Брутить через telnet или ssh
     
  7. lok888

    lok888 New Member

    Joined:
    5 Dec 2016
    Messages:
    43
    Likes Received:
    0
    Reputations:
    0
    это программой SSH bruteforse ?

    простите, а у кого-нибудь есть словари для брута этой программой ?
    найти не могу в интернете.
    там я так понял логин и пароль в одном файле и через точку с запятой.
     
    #7 lok888, 6 Mar 2017
    Last edited: 6 Mar 2017
  8. lok888

    lok888 New Member

    Joined:
    5 Dec 2016
    Messages:
    43
    Likes Received:
    0
    Reputations:
    0
    а как через гидру ssh сделать этот ? не подскажете команду?
    в гугле что находил не получается(

    пишет ERROR cjmpiled without LIBSSH v.o.4.x support, module is not available
     
    #8 lok888, 6 Mar 2017
    Last edited: 6 Mar 2017
  9. Kevin Shindel

    Kevin Shindel Well-Known Member

    Joined:
    24 May 2015
    Messages:
    974
    Likes Received:
    1,149
    Reputations:
    60
    hydra -L logins.txt -P pws.txt 192.168.1.1 ssh
    перед этим нужно убедится что ssh или telnet открыты...
     
    lok888 likes this.
  10. lok888

    lok888 New Member

    Joined:
    5 Dec 2016
    Messages:
    43
    Likes Received:
    0
    Reputations:
    0
    попробовал эту команду, с запущенным в другой командной строке telnet ничего не вышло (


    если я правильно понял у меня не установлены библиотеки libssh в hydra.
    а как установить не понимаю.
    Уже и скачал отдельный архив libssh-0.4.8.... а установить не получается никак((
     
    #10 lok888, 6 Mar 2017
    Last edited: 6 Mar 2017
  11. Kevin Shindel

    Kevin Shindel Well-Known Member

    Joined:
    24 May 2015
    Messages:
    974
    Likes Received:
    1,149
    Reputations:
    60
    У меня всё ок.... тестировал на Kali 2016.2 и Windows 7 SP1 брутило и телнет и ссш....
     
  12. lok888

    lok888 New Member

    Joined:
    5 Dec 2016
    Messages:
    43
    Likes Received:
    0
    Reputations:
    0
    может у меня версия hydra не полная.
    не подскажете ссылку на версию с ssh ? или я опять не правильно понял все ? )))

    выдает эту ошибку ERROR cjmpiled without LIBSSH v.o.4.x support, module is not available
    и все тут (


    поставил kalilinux попробовал этой командой hydra -L User.txt -P password.txt -o ./hydra_result.log -t 6 ssh://116.58.241.185

    пишет что атакует 22 порт. потом пишет что не может с ним соединиться ((

    а еще у меня теперь комп ужасно тормозит. вирусов накачал ?? )))
     
    #12 lok888, 6 Mar 2017
    Last edited: 6 Mar 2017
  13. lok888

    lok888 New Member

    Joined:
    5 Dec 2016
    Messages:
    43
    Likes Received:
    0
    Reputations:
    0
    так же и вот так попробовал hydra -L logins.txt -P pws.txt 192.168.1.1 ssh (telnet) - не может
    пишет такую ошибку Error: Child with pid (рандомное число) terminating, can not connect - что это значит ?
     
  14. Veil

    Veil Banned

    Joined:
    21 May 2015
    Messages:
    2,049
    Likes Received:
    3,420
    Reputations:
    72
    Эта тулза тоже брутит http://zalil.su/9771351
    Вот его вирустотал https://www.virustotal.com/ru/file/...8803efe441ccbeca141f5d57/analysis/1487765084/

    Вот другая прога,но антивирус показывает вот это https://www.virustotal.com/ru/file/...8bc46158ef058cf55adf1284/analysis/1484430995/

    Делай выводы сам.
    http://zalil.su/9529288
     
    #14 Veil, 7 Mar 2017
    Last edited: 7 Mar 2017
    Payer likes this.
  15. lok888

    lok888 New Member

    Joined:
    5 Dec 2016
    Messages:
    43
    Likes Received:
    0
    Reputations:
    0
    я правильно понимаю, что через телнет или ssh можно зайти на компьютер (рабочий стол, диск С )?
    еще вопрос такой: заходил сначала по айпи под 80 портом. теперь видимо увидели и сменили пароль. и порт 8080 был открыт - там страница авторизации была. но теперь её нет - значит убрали совсем этот порт ? nmap его не видит((
    или заблокировали вход на него ?
     
  16. Kevin Shindel

    Kevin Shindel Well-Known Member

    Joined:
    24 May 2015
    Messages:
    974
    Likes Received:
    1,149
    Reputations:
    60
    Пройти nmap"ом по портам и вопрос снимается...
     
  17. lok888

    lok888 New Member

    Joined:
    5 Dec 2016
    Messages:
    43
    Likes Received:
    0
    Reputations:
    0
    я и прошелся. порт 8080 теперь отсутствует. я не очень хорошо понимаю как он работает потому и спросил: nmpam если не показал порт - то его убрали или заблокировали?
    при чем я один айпи с разными командами сканировал и в первы раз показал :

    21/tcpclosedftp
    23/tcpopen telnet
    80/tcpopen ssl/http

    а второй раз:

    21/tcp filtered ftp
    22/tcp filtered ssh
    23/tcp filtered telnet
    80/tcp filtered http
    443/tcp filtered https
    1723/tcp open pptp MikroTik (Firmware: 1)
    2000/tcp open bandwidth-test MikroTik bandwidth-test server
    8291/tcp open unknown
    т.е. выходит что nmap не всегда может вид
    еть порты ?
     
  18. Kevin Shindel

    Kevin Shindel Well-Known Member

    Joined:
    24 May 2015
    Messages:
    974
    Likes Received:
    1,149
    Reputations:
    60
    Все фильтруются кроме 1723,2000,8291.
    1723 это порт VPN-тунеля (pptp) можно перехватить логин:пасс от впн туннеля , зайти туда и можно выйти на роутер.
    Порт 2000 не интересный , это проверка пропускной способности канала.
    8291 не известно, попробуй через веб зайти возможно это форвард 80 порта...

    По фильтрованым портам можно еще раз пройтись, возможно лочит фаерволл, чуть позже скажу флаги...

    попробуйте с флагом -A запустить... (агрессивное сканирование, отображает больше информации и длиться чуть дольше обычного)
    nmap -A 192.168.1.1 -p 21,22,23,80,443 > output.txt
     
    #18 Kevin Shindel, 8 Mar 2017
    Last edited: 8 Mar 2017
    lok888 likes this.
  19. lok888

    lok888 New Member

    Joined:
    5 Dec 2016
    Messages:
    43
    Likes Received:
    0
    Reputations:
    0
    спасибо. попорбую!
     
  20. lok888

    lok888 New Member

    Joined:
    5 Dec 2016
    Messages:
    43
    Likes Received:
    0
    Reputations:
    0
    попробовал. результат такой:
    21/tcp closed ftp
    22/tcp closed ssh
    23/tcp closed telnet
    80/tcp closed http
    443/tcp closed https


    так же с флагом -А попробовал без портов, результат:
    1024/tcp open rtsp Hikvision DVR rtspd
    2000/tcp open bandwidth-test MikroTik bandwidth-test server
    3389/tcp open ssl/ms-wbt-server?
    8000/tcp open http-alt?
    8001/tcp open vcom-tunnel?
    8291/tcp open unknown
    9000/tcp open cslistener?

    не подскажете на каком из этих портов может сидеть ip камера и какой командой с помощью hydra подобрать пароль ?
     
Loading...