Joe Blog Levy

Update 2: După ce a scris acest post, am descoperit, de asemenea, o altă vulnerabilitate în Trivia Crack, care a permis pentru a oferi utilizatorilor vieți nelimitate/rotiri. În acel moment, am adăugat acest lucru ca o altă caracteristică a Trivia Cracker. Ieri (1/29/2016), Trivia Cracker a început să prevină această caracteristică (răspunsul automat la întrebări continuă să funcționeze — așa cum este descris în acest post). Dar ceea ce este amuzant este, în plus față de prevenirea acesteia, serverul Trivia Crack, de asemenea, mă cheamă în mod specific!

eroare de fisură Trivia

Actualizare 1: folosind tehnici similare cu cele de mai jos, am lansat și o extensie Chrome înșelătoare pentru Candy Crush. Adu-l aici.

pe măsură ce sezonul de sărbători a început acum câteva săptămâni, am început să observ că o nouă aplicație, Trivia Crack, devenea populară printre prietenii mei. Pentru cei dintre voi care nu știu, Trivia Crack este un joc nou pentru Android, iPhone și Facebook. Premisa jocului este simplă și foarte asemănătoare cu o altă aplicație populară de anul trecut, QuizUp. În esență, răspundeți la întrebări trivia din diferite categorii, concurând împotriva prietenilor dvs. pentru drepturile de laudă. În ciuda simplității (sau poate datorită acesteia), Trivia Crack a devenit foarte popular de la sfârșitul anului – adunând 5,3 milioane de Like-uri pe Facebook și devenind aplicația gratuită de top din magazinul Google Play (Android).

ai crede că dezvoltatorii de un astfel de joc lustruit și de succes ar fi luat timp să-l pună în aplicare într-un mod care este sigur de înșelăciune, dar se pare scris un program să trișeze la Trivia Crack este de fapt destul de simplu. Pe parcursul unui weekend, am reușit să scriu și să lansez o extensie Chrome, Trivia Cracker, care m-a transformat dintr-un medicore-at-best Trivia Crack player într-un semizeu aparent genial. Puteti vedea Trivia Cracker în acțiune de mai jos:

deci, ce e în neregulă cu punerea în aplicare Trivia Crack care mi-a permis să construiască atât de ușor un instrument care permite oricui ieftin? Pe scurt – atunci când Clientul Trivia Crack solicită de la serverul Trivia Crack următoarea întrebare pentru a cere utilizatorului, serverul răspunde nu doar cu întrebarea și răspunsurile posibile, dar, de asemenea, trimite Care răspuns este răspunsul corect. Detaliile vulnerabilității, cum am găsit-o și cum am construit o extensie Chrome pentru a profita de ea sunt mai jos.

1 – Găsirea vulnerabilității

după ce am pierdut în fața prietenilor mei în Trivia Crack de prea multe ori, am decis că vreau să văd dacă aș putea câștiga în felul meu special. În timp ce eu nu sunt atât de bun la trivia aleatoare, eu sunt destul de bun la reverse-engineering. Am bănuit că aș putea profita de trimiterea propriilor cereri către serverele Trivia Crack sau de utilizarea unor date în răspunsurile de pe serverele Trivia Crack, pentru a obține un avantaj în joc. Așa că am început prin a cerceta ce fel de date Trivia Crack client și server trece înainte și înapoi.

pentru a inspecta aceste date, am jucat Trivia Crack în browserul meu de pe Facebook, în timp ce înregistram și inspectam cererile și răspunsurile trimise între clientul și serverul Trivia Crack folosind un instrument pe care l-am creat anterior numit Gargl. Da, știu că aș fi putut folosi instrumentele pentru dezvoltatori Fiddler sau Chrome pentru a face același lucru. Am decis să folosesc Gargl în schimb, deoarece pe lângă faptul că vă permite să vizualizați cereri/răspunsuri client/server, Gargl vă permite, de asemenea, să modificați și să parametrizați aceste solicitări, apoi să generați automat module într-un limbaj de programare la alegere, astfel încât să puteți face aceleași solicitări fără a scrie o linie de cod. Mai multe despre asta mai târziu.

oricum, după ce i-am spus lui Gargl să înceapă înregistrarea și să meargă la Trivia Crack pe Facebook în browserul meu, primul pas a fost să-mi dau seama care dintre numeroasele solicitări trimise pe această pagină de Facebook au fost legate de Trivia Crack, față de Facebook în sine. Inspectarea HTML-ului de pe pagină a arătat că conținutul Trivia Crack este încorporat în Facebook printr-un iframe. Elementul de deasupra acestui iframe era un formular menit să posteze la un URL specific – https://preguntados.com/game.

utilizarea Chrome Dev Tools pentru a inspecta HTML Trivia Crack

cunoștințele mele limitate de spaniolă mi-a amintit că „pregunta” înseamnă „întrebare”, care pare legată de trivia, așa că am suspectat că acesta este domeniul în care este găzduit Trivia Crack. Mergând la https://preguntados.com/game URL-ul a confirmat că suspiciunea:

redarea Trivia Crack pe Preguntados.com

următorul pas a fost doar pentru a începe redarea Trivia Crack, și așa cum am jucat uita-te la cererile Gargl constată că pagina este de a face la orice url-ul care conține „preguntados.com”:

folosind Gargl pentru a înregistra acțiuni în Trivia Crack

așa cum am răspuns la întrebări Trivia Crack, am observat o nouă cerere părea să fie emise pentru fiecare întrebare. De fapt, cererea părea să fie emisă înainte de a fi chiar „Filat spinner” în Trivia Crack pentru a determina ce categorie ar fi următoarea întrebare:

folosind Gargl pentru a înregistra acțiuni în Trivia Crack

acest lucru ma făcut să cred că poate întrebările au fost predeterminate, și „spinner aleatoare”, de fapt, a fost predeterminat să aterizeze pe o anumită categorie (și de a pune o anumită întrebare), pe baza răspunsului de la server la „api.preguntados.com/api/users/<userID>/games / <gameID>” cerere trimisă înainte de a face clic pe butonul „Spin”. Pentru mine, acest lucru a însemnat că probabil aș putea avertiza utilizatorul cu privire la întrebarea pe care urmează să o pună din timp, astfel încât să aibă cât mai mult timp pe cât doreau să se gândească la asta sau să o caute. Acest lucru ar fi un avantaj, deoarece în Trivia Crack, veți obține doar 30 de secunde pentru a răspunde la o întrebare odată ce întrebarea este afișată, pentru a împiedica utilizatorul să caute răspunsuri. În plus, în unele moduri de joc sa nu doar numărul de întrebări pe care le obține corect, dar, de asemenea, cantitatea de timp luați pentru a răspunde, care determină dacă veți câștiga. Dacă aș putea arăta utilizatorului întrebarea înainte de timp, ei ar putea, evident, să răspundă mult mai repede odată ce Trivia Crack se arată întrebarea.

așa că m-am gândit că am o pistă și am săpat în detaliile acestei cereri. Se pare că această cerere a oferit de fapt un „avantaj al trișorului” mult mai mare decât credeam…

2 – vulnerabilitatea în detaliu

folosind Gargl pentru a privi „api-ul.preguntados.com / api / users / <userID>/games/< gameID> ” solicitare/răspuns în detaliu, am putut confirma că oferă într-adevăr întrebarea care trebuie pusă, precum și răspunsurile posibile, în răspuns. Cu toate acestea, am fost surprins să aflu că răspunsul corect la întrebare este încorporat și în răspuns!

utilizarea Gargl pentru a înregistra acțiuni în Trivia Crack - vulnerabilitatea răspuns

după cum puteți vedea mai sus, răspunsul la această solicitare conține întrebarea, răspunsurile posibile, și care index în matrice de răspunsuri posibile este răspunsul corect. Deci, dacă aceste date sunt într-adevăr despre următoarea întrebare, după ce fac clic pe „rotire”, ar trebui să fiu întrebat „care dintre următoarele țări africane nu are o coastă?”și răspunsul corect ar trebui să fie răspunsurile de sus, care este „toți fac”. Dacă faceți clic pe „Spin”, s-a dovedit că această ipoteză este corectă:

redarea Trivia Crack, înainte de a selecta un răspuns

redarea Trivia Crack, selectând răspunsul corect

am folosit, de asemenea, browser-ul meu pentru a găsi că cererile repetate GET la „api.preguntados.com / api / users/ <userID>/games/< gameID> ” dați întotdeauna același răspuns, până când răspundeți la întrebarea pe care o oferă. Aceasta înseamnă că aș putea solicita această adresă URL din propriul meu instrument și să primesc în continuare aceeași întrebare pe care ar primi-o Clientul Trivia Crack de pe Facebook.

un răspuns care conține răspunsul corect, atunci când scopul este ca utilizatorul să determine răspunsul în sine, este în conflict direct cu practica de programare” defensivă „a programării – în special principiul de programare web” niciodată încredere în client”. Deoarece serverul nu are control asupra modului în care acționează clientul, nu poate presupune că clientul nu va acționa într-un mod rău intenționat și, prin urmare, trebuie să se protejeze. Modul corect de implementare a comportamentului de verificare a răspunsurilor este de a face acest lucru pe partea serverului. Nu trimiteți răspunsul corect clientului în niciun moment și, în schimb, faceți clientul să trimită răspunsul utilizatorului către server, unde serverul îl va verifica apoi pentru corectitudine și va credita utilizatorul dacă este corect (și, desigur, permite trimiterea unui singur răspuns pe utilizator pe întrebare).

cu toate acestea, Trivia Crack nu a făcut acest lucru și, în schimb, are încredere în client. Acum a fost doar o chestiune de a crea un client rău intenționat pentru a profita de faptul că răspunsul corect este trimis în răspuns. În mod ideal, unul care ar fi ușor de instalat și utilizat de utilizatorii non-tehnici. Hmm … ce zici de o extensie Chrome care adaugă doar un buton la jocul Trivia Crack, atunci când este jucat pe Facebook, care atunci când faceți clic răspunde corect la întrebarea curentă??

3 – profitând de vulnerabilitatea

după cum am menționat mai sus, Gargl vă permite să luați cererile pe care le-ați înregistrat, să le modificați și să le parametrizați după cum este necesar și apoi să generați automat module într-un limbaj de programare la alegere pentru a face aceleași solicitări. Nu voi intra în detaliile acestui proces, deoarece vă puteți uita la una dintre postările mele de blog Gargl pentru a găsi acele informații, dar în esență am generat un fișier șablon Gargl pentru diferitele solicitări API ale Trivia Crack, folosind extensia Gargl Chrome și apoi am folosit un generator Gargl pentru a transforma acel fișier șablon într-o bibliotecă JavaScript Trivia Crack. Utilizarea Gargl pentru acest lucru mi-a permis să creez o bibliotecă JavaScript care vorbește cu serverele Trivia Crack, fără a scrie o linie de cod pentru a face acest lucru și, de asemenea, să am un fișier șablon pentru viitor, în cazul în care vreau să fac același lucru mai târziu pentru un alt limbaj de programare.

odată ce am avut această bibliotecă JavaScript Trivia Crack, a fost o chestiune simplă de a construi o extensie Chrome în JavaScript care rulează pe domeniul încărcat în pagina de joc Trivia Crack Facebook iframe (preguntados.com), adaugă un buton la HTML pentru joc, și atunci când se face clic pe acel buton solicită „api.preguntados.com / api / users / <userID>/games/< gameID> ” URL, analizează răspunsul pentru răspunsul corect, apoi face clic pe butonul de răspuns de pe pagina care reprezintă răspunsul corect.

 Trivia Cracker rulează pe Trivia Crack pentru a răspunde la întrebări pentru mine

Write a Comment

Adresa ta de email nu va fi publicată.