#tinder #tutorial Jak…

Categories Programowanie

#tinder #tutorial Jak zobaczyć odblurowane zdjęcia osób, które polajkowały nasz profil

TL;DR

pokaż spoiler GET /v2/fast-match/teasers HTTP/1.1
Host: api.gotinder.com
x-auth-token: <YOUR-X-AUTH-TOKEN>

Na końcu poradnik dla nietechnicznych mirków.

Jako że ostatnio samotność weszła mocno, to postanowiłem zainstalować (drugi raz w życiu) tindera. Z mojej pierwszym wizyty na tym wspaniałem portalu pamiętam, że dało się łatwo podglądać odblurowane zdjęcia osób, które ostatnio polajkowały nasz profil.

Podglądanie zdjęć użytkowników było możliwe dzięki temu, że tinder przesyłał na nasze urządzenia oryginalne obrazki, a blurował je dopiero po stronie frontu. Oznaczało to tyle, że w każdym momencie mieliśmy na swoim komputerze oryginalne obrazki i wystarczyło tylko po nie sięgnąć swoimi łapkami – czy to odblurowując zdjęcia z poziomu devtoolsów, przeglądając zasoby aplikacji czy chociażby poglądając zwracane z webowego API URI obrazków.

Podczas mojej drugiej wizyty, zauważyłem że zespół tindera naprawił opisaną wyżej podatność i teraz zwraca nam adresy do już wyblurowanych zdjęć. Oznacza to, że nie jesteśmy już w stanie w łatwy sposób podejrzeć oryginalnych obrazków, ponieważ tinder zwyczajnie w świecie nam ich nie serwuje.

Jak na prawdziwego #programista15k przystało, zamiast skupić się na poszukiwaniach swojej drugiej połówki, postanowiłem zrobić prosty reverse-engineering ichniejszego API i sprawdzić, czy da się jakoś łatwo uzyskać oryginalne zdjęcia manipulując odrobinę parametrami zapytania/nagłówkami HTTP. Przeglądając zwrotkę jaką tinder przesyła w odpowiedzi na żądanie uzyskania zajawek ostatnio polajkowanych przez nas osób, zauważyłem że znajduje się tam parametr “pre[podloga]blur” o wartości true. Uznałem, że skoro tinder coś takiego zwraca, to pewnie istnieje możliwość wymuszenia jakimś wejściowym parametrem/nagłówkiem ustawienia tego pierwszego parametru na wartość false i tym samym uzyskanie adresów do oryginalnych obrazków. Po kilku próbach szybko okazało się, że nagłówek “platform” odpowiada za ustawianie wartości parametru “pre[podloga]blur”. Korzystając z aplikacji webowej, front tindera, automatycznie wykonując request po zajawki, ustawia ów nagłówek na wartość “web” i tym samym API tindera zwraca nam zblurowane zdjęcia. Okazuje się jednak, że wystarczy owy nagłówek pominąć i API zaczyna nam serwować adresy do oryginalnych obrazków.

Po odkryciu opisanej wyżej podatności, postanowiłem napisać do zespołu tindera w ramach programu bug bounty. Stwierdziłem, że skoro naprawili pierwszą podatność, to pewnie będzie im zależało na naprawieniu kolejnej, która już w nie aż tak trywialny sposób jak ta pierwsza, pozwala na podglądanie zdjęć lajkujących nas osób. Wyskrobałem zatem szybkiego maila z opisem podatności, podałem im też kilka prostych przykładów jak można ów problem rozwiązać (oczywiście nie znam architektury ich systemu, więc to były tylko jakieś proste sugestie, a nie żadne rocket science). Oczekując na odpowiedź, w myślach miałem już wizję, że pewnie zaproponują mi ciepłą posadę w dolinie krzemowej, a teraz już tylko myślą jak należycie mnie przywitać #pdk Na następny dzień dostałem odpowiedź, że wiedzą już od jakiegoś czasu o podatności i nie zamierzają na razie nic z nią robić. Postanowiłem zatem podzielić się tym ficzerem tutaj z Wami.

No, to chyba na tyle. Poniżej poradnik dla nietechnicznych mirków.

Zaczynamy od pobrania i zainstalowania programu Postman. Jest to tzw. klient HTTP, który pozwala na wykonywanie zapytań HTTP. Po otworzeniu programu, w pasku adresu na samej górze wprowadzamy adres https://api.gotinder.com/v2/fast-match/teasers Jest to ścieżka do zasobu tindera, który serwuje nam zajawki osób, które polajkowały ostatnio nasz profil. Do wykonania żądania potrzebna nam jest już tylko wartość nagłówka HTTP o nazwie x-auth-token. Jak zdobyć ów wartość i czym ona właściwie jest? Przechodzimy na stronę tindera i logujemy się na swoje konto. Jeśli korzystamy z chroma, to otwieramy narzędzia deweloperskie, następnie w zakładkach u góry przechodzimy pod Application, później wybieramy Storage, Local Storage, https://tinder.com i szukamy w tabelce wartości klucza TinderWeb/APIToken – to to. I teraz uwaga, bardzo ważna kwestia. Pod żadnym pozorem, absolutnie nigdy, przenigdy, nie należy komukolwiek udostępniać owej wartości. Jest to tzw. identyfikator sesji, który poświadcza, że my to my tj. tinder na podstawie wartości tego klucza wie, że Jan Kowalski jest zalogowanym użytkownikiem Janem Kowalskim w aplikacji tinder. To tak w mega dużym uproszczeniu. Ten klucz jest oczywiście tymczasowy, co oznacza że nie jest ważny cały czas, ale co jakiś interwał generowany jest nowy klucz sesyjny i w każdym momencie aktywny jest maksymalnie jeden taki klucz – to tak na wypadek, gdyby ktoś wszedł w posiadanie tego klucza i chciał go wykorzystać przeciwko nam, aby się pod nas podszyć – uda mu się to, ale bez innego klucza (tzw. refresh tokenu), nie będzie on w stanie zregenerować starej wartości klucza pierwszego. Dla nas oznacza to fakt, że jeśli chcemy przeglądać obrazki, to musimy za każdym razem skopiować nową wartość klucza. Wracając do programu Postman. Kiedy już mamy ów wartość, przechodzimy pod zakładkę Headers i w nowym wierszu wklejamy parę klucz-wartość: x-auth-token-TO-CO-SKOPIOWALISMY. Następnie klikamy send i w ciele odpowiedzi powinniśmy dostać obrazki zaszyte w formacie JSON. Ów format jest ultra prosty, więc nie będę się już tutaj rozpisywał jak odczytać z niego dane – google z pewnością pomoże.

#tinder #randkujzwykopem #programowanie #programista15k #testowanieoprogramowania