Joe Blog Levy

Aktualizacja 2: Po napisaniu tego postu odkryłem również inną lukę w Trivia Crack, która pozwalała użytkownikom na nieograniczone życie/obroty. W tym czasie dodałem to jako kolejną funkcję do Trivia Cracker. Wczoraj (29.1.2016) Trivia Cracker zaczął zapobiegać tej funkcji (automatyczne odpowiadanie na pytania nadal działa — jak opisano w tym poście). Ale zabawne jest to, że oprócz zapobiegania temu, serwer Crack Trivia również mnie specjalnie wzywa!

 Trivia Crack error

Update 1: używając podobnych technik do poniższych, wydałem również rozszerzenie Chrome do Crush Candy. Przynieś to tutaj.

ponieważ sezon wakacyjny rozpoczął się kilka tygodni temu, zacząłem zauważać, że nowa aplikacja, Trivia Crack, staje się popularna wśród moich znajomych. Dla tych z Was, którzy nie wiedzą, Ciekawostki Crack to nowa gra na Androida, iPhone ’ a i Facebooka. Założeniem gry jest prosty, i bardzo podobny do innej popularnej aplikacji z ubiegłego roku, QuizUp. Zasadniczo odpowiadasz na pytania ciekawostek z różnych kategorii, rywalizując ze znajomymi o prawa do przechwałek. Pomimo prostoty (a może dzięki temu), Ciekawostki Crack stał się bardzo popularny od późna – zbierając 5.3 milionów polubień na Facebooku i stając się najlepszą darmową aplikacją w sklepie Google Play (Android).

można by pomyśleć, że twórcy tak dopracowanej i udanej gry mogli poświęcić czas na wdrożenie jej w sposób bezpieczny przed oszustwem, ale okazuje się, że napisanie programu do oszukiwania w Trivia Crack jest w rzeczywistości dość proste. W ciągu weekendu udało mi się napisać i wydać rozszerzenie Chrome, Trivia Cracker, które zmieniło mnie z medicore-at-best Trivia Crack player w pozornie genialnego półboga. Możesz zobaczyć Trivia Cracker w akcji poniżej:

więc co jest nie tak z implementacją Trivia Crack, która pozwoliła mi tak łatwo zbudować narzędzie, które pozwala każdemu oszukiwać? Krótko mówiąc-Gdy klient Trivia Crack żąda od serwera Trivia Crack następnego pytania, które należy zadać użytkownikowi, serwer odpowiada nie tylko pytaniem i możliwymi odpowiedziami, ale także wysyła, która odpowiedź jest poprawną odpowiedzią. Szczegóły dotyczące luki, jak ją znalazłem i jak zbudowałem rozszerzenie Chrome, aby z niego skorzystać, są poniżej.

1-znajdowanie luki

po przegraniu z przyjaciółmi w Trivia Crack o jeden za wiele razy, postanowiłem sprawdzić, czy mogę wygrać w swój własny, specjalny sposób. Chociaż nie jestem tak dobry w przypadkowych ciekawostkach, jestem całkiem dobry w inżynierii odwrotnej. Podejrzewałem, że mogę skorzystać z wysyłania własnych próśb do serwerów Trivia Crack lub korzystania z niektórych danych w odpowiedziach z serwerów Trivia Crack, aby uzyskać przewagę w grze. Zacząłem więc od zbadania, jakie rodzaje danych klient i serwer Crack Trivia przekazują tam iz powrotem.

aby sprawdzić te dane, grałem w Trivia Crack w mojej przeglądarce na Facebooku, podczas nagrywania i sprawdzania żądań i odpowiedzi wysyłanych między Klientem Trivia Crack a serwerem za pomocą narzędzia, które stworzyłem wcześniej o nazwie Gargl. Tak, Wiem, że mogłem użyć narzędzi programistycznych Fiddler lub Chrome, aby zrobić to samo. Zdecydowałem się użyć Gargla zamiast tego, ponieważ oprócz umożliwienia przeglądania żądań/odpowiedzi Klientów/serwerów, Gargl pozwala również modyfikować i parametryzować te żądania, a następnie automatycznie generuje Moduły w wybranym języku programowania, dzięki czemu możesz tworzyć te same żądania bez pisania linii kodu. Więcej o tym później.Facebook Facebooka, pierwszym krokiem było ustalenie, które z wielu próśb wysyłanych na tej stronie na Facebooku były związane z ciekawostkami Crack, a sam Facebook. Inspekcja HTML na stronie wykazała, że zawartość pęknięcia Ciekawostki jest osadzona w Facebooku za pomocą ramki iframe. Element tuż nad tym iframe był formą przeznaczoną do publikowania na osobliwy adres URL – https://preguntados.com/game.

Korzystanie z narzędzi programistycznych Chrome do sprawdzania HTML Trivia Crack

moja ograniczona znajomość hiszpańskiego przypomniała mi, że „pregunta” oznacza „pytanie”, które wydaje się związane z ciekawostkami, więc podejrzewałem, że jest to domena, w której hostowane jest Trivia Crack. Przechodząc na https://preguntados.com/game URL potwierdziło, że podejrzenie:

Gra Ciekawostki Crack Na Preguntados.com

następnym krokiem było po prostu zacząć grać w Trivia Crack, a jak grałem spójrz na prośby Gargl stwierdza, że strona robi na dowolny adres url zawierający „preguntados.com”:

używanie Gargla do nagrywania działań w Trivia Crack

gdy odpowiadałem na pytania Trivia Crack, zauważyłem, że dla każdego pytania wydawała się nowa Prośba. Właściwie, Prośba wydawała się być wydana, zanim nawet „obróciłem spinner” w Trivia Crack, aby ustalić, jaka kategoria będzie następne pytanie:

 używanie Gargla do nagrywania działań w Trivia Crack

to sprawiło, że pomyślałem, że może pytania były z góry określone, a „losowy spinner” w rzeczywistości został z góry określony, aby wylądować w określonej kategorii (i zadać określone pytanie) na podstawie odpowiedzi serwera na ” api.preguntados.com/api/users/<userID>/games / <gameID>” Prośba wysłana przed kliknięciem przycisku „Spin”. Dla mnie oznaczało to, że prawdopodobnie mogłem ostrzec użytkownika o pytaniu, które ma zostać zadane z wyprzedzeniem, więc miałby tyle czasu, ile chciał o tym pomyśleć lub sprawdzić. Byłoby to zaletą, ponieważ w Trivia Crack masz tylko 30 sekund na odpowiedź na pytanie po wyświetleniu pytania, aby uniemożliwić użytkownikowi szukanie odpowiedzi. Ponadto, w niektórych trybach gry nie tylko liczba pytań można uzyskać poprawne, ale także ilość czasu wziąć na odpowiedź, który określa, czy wygrasz. Gdybym mógł pokazać użytkownikowi pytanie z wyprzedzeniem, mógłby oczywiście odpowiedzieć na nie znacznie szybciej, gdy samo Trivia Crack pokaże pytanie.

więc pomyślałem, że mam trop i zagłębiłem się w szczegóły tej prośby. Okazuje się, że to żądanie faktycznie zapewniło znacznie większą „przewagę cheatera” niż myślałem…

2 – luka w szczegółach

używając Gargla do spojrzenia na „api.preguntados.com/api/users/<userID>/games/<gameID>” Prośba / odpowiedź w szczegółach byłem w stanie potwierdzić, że rzeczywiście zawiera pytanie, które należy zadać, a także możliwe odpowiedzi w odpowiedzi. Jednak byłem zaskoczony, że poprawna odpowiedź na pytanie jest również osadzona w odpowiedzi!

używanie Gargla do nagrywania akcji w Trivia Crack - luka w odpowiedzi

jak widać powyżej, odpowiedź na to żądanie zawiera pytanie, możliwe odpowiedzi i który indeks w tablicy możliwych odpowiedzi jest poprawną odpowiedzią. Więc jeśli te dane dotyczą następnego pytania, po kliknięciu „Spin”, powinienem zostać zapytany ” które z następujących krajów afrykańskich nie ma wybrzeża?”a poprawną odpowiedzią powinny być odpowiedzi z góry, czyli „wszystkie tak robią”. Kliknięcie „Spin” udowodniło poprawność tej hipotezy:

odtwarzanie Trivia Crack, przed wyborem odpowiedzi

grając w Trivia Crack, wybierając poprawną odpowiedź

użyłem również mojej przeglądarki, aby znaleźć powtarzające się żądania GET do ” api.preguntados.com / api/users / < userID > / games / < gameID> ” zawsze udzielaj tej samej odpowiedzi, dopóki nie odpowiesz na zadane pytanie. Oznacza to, że mogę poprosić o ten adres URL z własnego narzędzia i nadal otrzymywać to samo pytanie, co klient crack ciekawostki na Facebooku otrzyma.

odpowiedź zawierająca poprawną odpowiedź, gdy celem jest to, że użytkownik musi sam określić odpowiedź, jest w bezpośrednim konflikcie z praktyką programowania „defensywnego” – w szczególności zasadą programowania sieciowego „nigdy nie ufaj klientowi”. Ponieważ serwer nie ma kontroli nad tym, jak działa klient, nie może zakładać, że Klient nie będzie działał w złośliwy sposób, a więc musi się chronić. Poprawnym sposobem implementacji zachowania sprawdzania odpowiedzi jest zrobienie tego po stronie serwera. Nie wysyłaj poprawnej odpowiedzi do Klienta w dowolnym momencie, a zamiast tego spraw, aby Klient wysłał odpowiedź użytkownika do serwera, gdzie serwer następnie sprawdzi ją pod kątem poprawności i zaliczy użytkownika, jeśli jest poprawna (i oczywiście pozwoli wysłać tylko jedną odpowiedź na użytkownika na pytanie).

jednak Trivia Crack tego nie zrobił, a zamiast tego Ufa klientowi. Teraz to była tylko kwestia stworzenia złośliwego klienta, aby skorzystać z faktu, że prawidłowa odpowiedź jest wysyłana w odpowiedzi. Idealnie, taki, który byłby łatwy do zainstalowania i użycia przez nietechnicznych użytkowników. Hmm … a co z rozszerzeniem Chrome, które dodaje przycisk do gry Trivia Crack, gdy gra się na Facebooku, że po kliknięciu poprawnie odpowiada na aktualne pytanie??

3 – korzystając z luki

jak wspomniałem powyżej, Gargl pozwala na zapisywanie żądań, modyfikowanie ich i parametryzowanie w razie potrzeby, a następnie automatyczne generowanie modułów w wybranym języku programowania w celu wykonania tych samych żądań. Nie zamierzam zagłębiać się w szczegóły tego procesu, ponieważ możesz spojrzeć na jeden z moich postów na blogu Gargl, aby znaleźć te informacje, ale zasadniczo wygenerowałem plik szablonu Gargl dla różnych żądań API Trivia Crack, używając rozszerzenia Gargl Chrome, a następnie użyłem generatora Gargl, aby przekształcić ten plik szablonu w bibliotekę JavaScript Trivia Crack. Używanie do tego Gargla pozwoliło mi stworzyć bibliotekę JavaScript, która rozmawia z serwerami Trivia Crack, bez pisania linii kodu, aby to zrobić, a także mieć plik szablonu na przyszłość, na wypadek, gdybym chciał zrobić to samo później dla innego języka programowania.

kiedy miałem tę ciekawostkę Crack JavaScript library, była to prosta sprawa budowania rozszerzenia Chrome w JavaScript, który działa na domenie załadowanej na stronie Trivia Crack Facebook Game iFrame (preguntados.com), dodaje przycisk do kodu HTML gry, a po kliknięciu tego przycisku żąda ” api.preguntados.com / api/users/<userID>/games / <gameID>” URL, parsuje odpowiedź na poprawną odpowiedź, a następnie klika przycisk odpowiedzi na stronie reprezentujący poprawną odpowiedź.

 Trivia Cracker running on Trivia Crack to answer questions for me

Write a Comment

Twój adres e-mail nie zostanie opublikowany.