Joe Blog Levy

Oppdater 2: etter å ha skrevet dette innlegget, oppdaget jeg også et annet sårbarhet I Trivia Crack som tillot for å gi brukerne ubegrenset liv/spinn. På den tiden la jeg til dette som en annen funksjon Til Trivia Cracker. I går (1/29/2016) Begynte Trivia Cracker å forhindre denne funksjonen (automatisk svar på spørsmål fortsetter å fungere — som beskrevet i dette innlegget). Men hva er morsomt er, i tillegg til å hindre Det, Trivia Crack server også kaller meg ut spesielt!

Trivia Crack error

Oppdater 1: Ved hjelp av lignende teknikker til nedenfor har jeg også gitt ut en juksekromutvidelse For Candy Crush. Få det her.

da høytiden begynte for noen uker siden, begynte jeg å legge merke til at En ny app, Trivia Crack, ble populær blant vennene mine. For de av dere som ikke vet, Er Trivia Crack et nytt spill For Android, iPhone og Facebook. Premisset for spillet er enkel, og svært lik en annen populær app fra i fjor, QuizUp. I hovedsak svarer du trivia spørsmål av ulike kategorier, konkurrerer mot vennene dine for bragging rettigheter. Til tross for enkelheten (eller kanskje på grunn av Det), Har Trivia Crack blitt veldig populær som sen – reoler opp 5,3 millioner liker På Facebook og blir den beste gratisappen I Google Play (Android) butikken.

du tror utviklerne av et slikt polert og vellykket spill kan ha tatt deg tid til å implementere det på en måte som er sikker fra juks, men det viser seg å skrive et program for Å jukse På Trivia Crack er faktisk ganske enkelt. I løpet av en helg var jeg i stand til å skrive Og slippe En Chrome-utvidelse, Trivia Cracker, som viste meg fra en medicore-at-best Trivia Crack-spiller til en tilsynelatende geni-demigod. Du kan se Trivia Cracker i aksjon nedenfor:

Så hva er galt Med Trivia Crack implementering som tillot meg å så enkelt bygge et verktøy som lar noen jukse? Kort sagt – Når Trivia Crack klient forespørsler Fra Trivia Crack server neste spørsmål å spørre brukeren, svarer serveren ikke bare med spørsmålet og mulige svar, men også sender som svar er det riktige svaret. Detaljer om sårbarheten, hvordan jeg fant den, og hvordan jeg bygde En Chrome-utvidelse for å dra nytte av den, er under.

1 – Finne sårbarheten

etter å ha mistet vennene mine I Trivia Crack en for mange ganger, bestemte jeg meg for å se om jeg kunne vinne på min egen, spesielle måte. Selv om jeg ikke er så god på tilfeldig trivia, er jeg ganske god på reverse-engineering. Jeg mistenkte at jeg kanskje kunne dra nytte av å sende mine egne forespørsler Til Trivia Crack servere, eller bruke noen data i svarene Fra Trivia Crack servere, for å få en kant i spillet. Så jeg begynte med å forske på hva slags data Trivia Crack klient og server passere frem og tilbake.

for å inspisere disse dataene, spilte Jeg Trivia Crack i nettleseren Min på Facebook, mens jeg tok opp og inspiserte forespørsler og svar sendt mellom Trivia Crack klient og server ved hjelp av et verktøy jeg hadde opprettet tidligere Kalt Gargl. Ja, jeg vet at jeg kunne ha brukt Fiddler Eller Chrome Utviklerverktøy for å gjøre det samme. Jeg bestemte Meg for Å bruke Gargl i stedet fordi I Tillegg til å la deg se klient/serverforespørsler/svar, Lar Gargl deg også endre og parameterisere disse forespørslene, og deretter genererer automatisk moduler i et programmeringsspråk etter eget valg, slik at du kan gjøre de samme forespørslene uten å skrive en linje med kode. Mer om det senere.

uansett, etter å ha fortalt Gargl å starte opptak og gå Til Trivia Crack På Facebook i nettleseren min, var det første trinnet å finne ut hvilke av de mange forespørslene som ble sendt på Denne Facebook-siden, var relatert Til Trivia Crack, versus Facebook selv. Inspeksjon AV HTML på siden viste At Trivia Crack innholdet er innebygd I Facebook via En iframe. Elementet rett over denne iframe var et skjema ment å legge til en merkelig URL- https://preguntados.com/game.

Ved Hjelp Av Chrome Dev Verktøy for å inspisere Trivia Crack HTML

min begrensede kunnskap om spansk minnet meg om at «pregunta» betyr «spørsmål», som synes relatert til trivia, så jeg mistenkte at dette var domenet Der Trivia Crack er vert. Gå til https://preguntados.com/game URL bekreftet at mistanke:

Spille Trivia Sprekk På Preguntados.com

det neste trinnet var bare å begynne Å spille Trivia Crack, og som jeg spilte se på forespørsler Gargl finner at siden gjør til en url som inneholder «preguntados.com»:

Ved Å bruke Gargl til å registrere handlinger I Trivia Crack

da jeg svarte På Trivia Crack-spørsmål, la jeg merke til at en ny forespørsel syntes å bli utstedt for hvert spørsmål. Faktisk syntes forespørselen å bli utstedt før jeg selv «spunnet spinneren» I Trivia Crack for å avgjøre hvilken kategori det neste spørsmålet ville være:

 Bruke Gargl til å registrere handlinger I Trivia Crack

Dette fikk meg til å tro at spørsmålene var forhåndsbestemt, og «tilfeldig spinner» faktisk var forhåndsbestemt til å lande på en bestemt kategori (og stille et bestemt spørsmål) basert på svaret fra serveren til «api.preguntados.com/api/users/<userID>/spill / <gameID>» forespørsel som sendes før du klikker På «Spin» – knappen. For meg betydde dette at jeg sannsynligvis kunne varsle brukeren om spørsmålet de skal bli spurt på forhånd, så de ville ha så mye tid som de ønsket å tenke på det eller slå det opp. Dette ville være en fordel fordi I Trivia Crack, du bare får 30 sekunder å svare på et spørsmål når spørsmålet er vist, for å hindre at brukeren ser opp svar. I tillegg er det i noen spillmoduser ikke bare antall spørsmål du får riktig, men også hvor mye tid du tar for å svare, som bestemmer om du vinner. Hvis jeg kunne vise brukeren spørsmålet på forhånd, kunne de åpenbart svare på det mye raskere når Trivia Crack selv viser spørsmålet.

så jeg skjønte at jeg hadde en ledelse og gravd inn i detaljene i denne forespørselen. Det viser seg at denne forespørselen faktisk ga en mye større «cheater’ s advantage» enn jeg trodde…

2 – sårbarheten i detalj

Ved Hjelp Av Gargl for å se på «api.preguntados.com / api / users/<userID > / games / < gameID>» forespørsel/svar i detalj kunne jeg bekrefte at det faktisk gir spørsmålet som skal stilles, samt mulige svar, i svaret. Men jeg var overrasket over å finne ut at det riktige svaret på spørsmålet også er innebygd i svaret!

Bruke Gargl til å registrere handlinger I Trivia Crack - responssårbarheten

som du kan se ovenfor, inneholder svaret på denne forespørselen spørsmålet, de mulige svarene, og hvilken indeks i rekken av mulige svar er det riktige svaret. Så hvis disse dataene faktisk handler om det neste spørsmålet, etter at jeg har klikket På «Spin», bør jeg bli spurt » Hvilket Av De Følgende Afrikanske landene har ikke en kyst?»og det riktige svaret skal være svar ovenfra, som er «Alle gjør det». Ved å klikke på «Spin» viste denne hypotesen riktig:

Spille Trivia Crack, før du velger et svar

Spille Trivia Crack, velge riktig svar

jeg brukte også nettleseren min for å finne at gjentatte FÅ forespørsler til » api.preguntados.com / api / users/<userID > / games / < gameID> » gi alltid det samme svaret, til du svarer på spørsmålet det gir. Dette betyr at jeg kunne be om DENNE NETTADRESSEN fra mitt eget verktøy og fortsatt motta det samme spørsmålet Som Trivia Crack-klienten på Facebook ville motta.

et svar som inneholder det riktige svaret, når målet er at brukeren må bestemme svaret selv, er i direkte konflikt med «Defensiv Programmering» praksis med programmering-spesielt» aldri stol på klienten » webprogrammeringsprinsippet. Siden serveren har ingen kontroll over hvordan klienten fungerer, kan det ikke anta at klienten ikke vil handle på en ondsinnet måte, og så må beskytte seg selv. Den riktige måten å implementere svar kontroll atferd er å gjøre det på serversiden. Ikke send det riktige svaret til klienten på noe tidspunkt ,og i stedet la klienten sende brukerens svar til serveren, hvor serveren vil da sjekke det for korrekthet og kreditere brukeren hvis det er riktig (og selvfølgelig bare tillate at ett svar sendes per bruker per spørsmål).

Trivia Crack gjorde Imidlertid ikke dette, og stoler i stedet på klienten. Nå var det bare et spørsmål om å skape en ondsinnet klient for å dra nytte av det faktum at det riktige svaret sendes i svaret. Ideelt sett, en som ville være lett for ikke-tekniske brukere å installere og bruke. Hmm … hva med En Chrome-utvidelse som bare legger til en knapp I Trivia Crack-spillet, når det spilles På Facebook,at når du klikker, svarer det nåværende spørsmålet riktig automatisk??

3-Dra nytte av sikkerhetsproblemet

Som jeg nevnte ovenfor, Lar Gargl deg ta forespørslene du hadde det, registrere, endre og parameterisere dem etter behov, og deretter automatisk generere moduler i et programmeringsspråk etter eget valg for å gjøre de samme forespørslene. Jeg kommer ikke til å gå inn i detaljene i den prosessen siden du kan se på Et Av Mine Gargl-blogginnlegg for å finne den informasjonen, men i hovedsak genererte jeg En Gargl-malfil for Trivia Crack ‘ s ulike API-forespørsler, ved Hjelp Av gargl Chrome-utvidelsen, og brukte deretter En Gargl-generator for å slå den malfilen til Et Trivia Crack JavaScript-bibliotek. Bruke Gargl for dette tillot meg å lage Et JavaScript-bibliotek som snakker Til Trivia Crack servere, uten å skrive en linje med kode for å gjøre det, og har også en mal fil rundt for fremtiden i tilfelle jeg ønsker å gjøre det samme senere for et annet programmeringsspråk.

Når jeg hadde Dette Trivia Crack JavaScript-biblioteket, var det et enkelt spørsmål om å bygge En Chrome-utvidelse I JavaScript som kjører på domenet lastet Inn I Trivia Crack Facebook-spillsiden iframe (preguntados.com), legger en knapp TIL HTML for spillet, og når den knappen klikkes ber om » api.preguntados.com / api / users/ <userID > / games / < gameID> » URL, analyserer svaret for det riktige svaret, og klikker deretter på svarknappen på siden som representerer det riktige svaret.

Trivia Cracker kjører På Trivia Crack for å svare på spørsmål for meg

Write a Comment

Din e-postadresse vil ikke bli publisert.