Уязвимостта на VKontakte позволи получаването на директни връзки към лични снимки

позволи

директни

Когато се добави връзка, сървърът я анализира, опитва се да разбере към какъв обект се отнася и извлича информация за този обект от базата данни. Като правило, когато пишете този вид функция с много условия, вероятността разработчикът да забрави нещо е много висока. Затова не можех да си позволя да подмина и реших да отделя няколко минути, за да експериментирам малко.

Реших да отида в мобилната версия на сайта, за да проверя дали там всичко се показва по същия начин, както в нормалната версия. Разглеждайки кода на страницата, видях това:

позволи

По този начин беше възможно да се получи директна връзка към всяко изображение във Vkontakte, независимо от това къде е качено и какви настройки за поверителност има. Може да е изображение от лични съобщения или снимка от лични албуми на всеки потребител/група.

Как работят снимките във VK

Уви, след като прекарах два часа в експерименти, все още не разбрах това. През 2012 г. на HighLoad++ Олег Иларионов каза няколко думи за това как съхраняват снимки, за хоризонтално шардинг и произволен избор на сървър за зареждане, но тази информация не ми даде нищо, тъй като няма връзка между идентификатора на сървъра и идентификатора на снимката. Ясно е, че има определен глобален брояч, но има някаква друга логика там ... Защото ако второто число се формира с помощта на обичайното автоматично нарастване, тогава стойностите на фото idishok отдавна биха достигнали огромни стойности (FB, например, в момента е

700 трилиона), но за Vkontakte тази стойност е само

400 милиона (въпреки че според статистикатаежедневнопотребителите качват повече от 30 милиона снимки). Тези. ясно е, че тази цифра не е уникална, но не е и случайна. Написах сценарий, който преминаснимки на "стари" потребители и въз основа на получените данни направи графика за това колко тази цифра се променя с всякагодина:

vkontakte

Сортиране на снимките

Ускорете търсенето x25

За да заобиколя малко ограничението от 3 заявки, реших да използвам метода execute. В едно извикване на този метод са възможни 25 извиквания на API методи.

По този начин беше възможно да се увеличи скоростта на грубата сила до 3*25 отметки/сек. През изминалата година снимките щяха да бъдат сортирани за дълго време, но за кратки периоди този метод на сортиране вече беше доста добър.

Ускоряване на итерацията x25 * брой едновременни заявки в секунда

Ограничението за брой заявки/сек важи за всяко приложение поотделно, а не за целия потребител. Така че нищо не ви пречи да изпращате много заявки паралелно, но в същото време да използвате токени от различни приложения в тях.

Като начало беше необходимо да се намери (или създаде) необходимия брой приложения. Написан е скрипт, който търси самостоятелни приложения в даден диапазон от идентификатори на приложения:

Също така беше възможно да се изберат приложения по броя на потребителите, за да се ускори допълнително по-нататъшното изброяване:

Ако приложението е инсталирано от по-малко от 10 000 души, можете да направите 5 заявки в секунда, до 100 000 - 8 заявки, до 1 000 000 - 20 заявки, повече от 1 милион - 35 заявки в секунда. [Ограничения и препоръки]

Но реших да не се занимавам с това.

Колкото приложения са намерени, толкова много паралелни заявки. За паралелизиране на цялото това нещо беше решено да се използва скъпоценният камък Typhoeus, който се е доказал в други задачи. Оказа се такъв малък bruteforcer:

За да се ускори допълнително грубата сила, имаше опит да се отърве отненужно тяло в отговора, но при заявкатаHEADсървърът на VKontakte връща грешка501 Not implemented.

Крайната версия на скрипта изглежда така:

След стартиране на програмата, всички снимки на потребителя за посочения период бяха в отметките. Остана само да отидете в мобилната версия на Vkontakte, да отворите конзолата на браузъра, да извадите директни връзки и да се насладите на снимките в оригиналния им размер.

Време на периода (минути)
Вчера0,84
Миналата седмица6.9
Миналия месец18.3
Миналата година121.1
3 последни години312.5
Таблицата показва средното време, необходимо за изпробване на идентификация на снимки за даден период. Сигурен съм, че всичко това може да се ускори 10-20 пъти. Например в груб форс скрипт направете една голяма опашка от всички заявки и нормална синхронизация между тях, т.к. в моята реализация една заявка с изчакване ще забави целия процес. Както и да е, можете просто да закупите няколко екземпляра EC2 и да получите всички снимки на всеки потребител за един час. Но вече исках да спя.

И като цяло, няма значение колко време прекарва нападателят, 5 часа или цял ден, защото по един или друг начин той ще получи връзки към лични изображения. Възможността за иронично получаване на достъп до лична информация за ограничено време е основната заплаха, породена от тази уязвимост.

Докладване на уязвимост

позволи

Hardcore conf в C++. Каним само професионалисти.