Joe Blog Levy

Update 2: After written this post, I also discovered another vulnerability in Trivia Crack that allowed for giving users unlimited lives/spins. Tuolloin, lisäsin tämän toisena ominaisuutena Trivia Cracker. Eilen (1/29/2016), Trivia Cracker alkoi estää tätä ominaisuutta (automaattinen kysymyksenvastaus toimii edelleen — kuten tässä viestissä on kuvattu). Mutta mikä hassua on, sen lisäksi, että estää sen, Trivia Crack server myös kutsuu minua ulos erityisesti!

Trivia Crack error

Update 1: käyttäen samanlaisia tekniikoita kuin Alla, olen julkaissut myös huijaavan Chrome-laajennuksen Candy Crushille. Tuo se tänne.

lomakauden alkaessa muutama viikko sitten aloin huomata, että uusi sovellus, Trivia Crack, oli tulossa suosituksi ystävieni keskuudessa. Niille teistä, jotka eivät tiedä, Trivia Crack on uusi peli Androidille, iPhonelle ja Facebookille. Lähtökohta peli on yksinkertainen, ja hyvin samanlainen kuin toinen suosittu sovellus viime vuonna, QuizUp. Pohjimmiltaan, vastaat trivia kysymyksiä eri luokkiin, kilpailevat ystäväsi kerskailuoikeudet. Huolimatta yksinkertaisuus (tai ehkä sen vuoksi), Trivia Crack on tullut erittäin suosittu kuin myöhään raastava 5.3 miljoonaa tykkää Facebook ja tulossa alkuun ilmainen sovellus Google Play (Android) store.

luulisi, että näin hiotun ja onnistuneen pelin kehittäjät olisivat ehkä vieneet aikaa toteuttaa sen tavalla, joka on suojattu huijaukselta, mutta käy ilmi, että ohjelman kirjoittaminen huijaamiseksi Trivia Crackissa on itse asiassa melko yksinkertaista. Aikana viikonlopun, pystyin kirjoittamaan ja vapauttamaan Chrome laajennus, Trivia Cracker, joka muutti minut medicore-at-best Trivia Crack pelaaja näennäisesti nero puolijumala. Voit nähdä Trivia Crackerin toiminnassa alla:

Joten mitä vikaa Trivia Crackissa on toteutuksessa, jonka ansiosta pystyin niin helposti rakentamaan työkalun, jonka avulla kuka tahansa voi huijata? Lyhyesti sanottuna-kun Trivia Crack-asiakas pyytää Trivia Crack-palvelimelta seuraavan kysymyksen käyttäjältä, palvelin ei vastaa vain kysymykseen ja mahdollisiin vastauksiin, vaan lähettää myös oikean vastauksen. Yksityiskohdat haavoittuvuuden, miten löysin sen, ja miten rakensin Chrome laajennus hyödyntää sitä ovat alla.

1 – haavoittuvuuden löytäminen

hävittyäni ystävilleni Trivia Crackissa liian monta kertaa päätin, että haluan nähdä, pystynkö voittamaan omalla, erikoisella tavallani. Vaikka en ole niin hyvä satunnaisessa triviassa, olen aika hyvä käänteistekniikassa. Epäilin, että voisin hyödyntää omien pyyntöjeni lähettämistä Trivia crackin palvelimille, tai joidenkin tietojen käyttämistä Trivia crackin palvelimien vastauksissa, saadakseni etulyöntiaseman peliin. Joten aloitin tutkimalla, millaisia tietoja Trivia Crack-asiakas ja palvelin kulkevat edestakaisin.

näiden tietojen tarkastamiseksi pelasin Trivia crackia selaimessani Facebookissa, samalla kun tallennin ja tarkastin Trivia crackin asiakkaan ja palvelimen välillä lähetettyjä pyyntöjä ja vastauksia käyttäen työkalua, jonka olin luonut aiemmin nimeltään Gargl. Kyllä, tiedän, että olisin voinut käyttää Fiddler tai Chromen kehittäjätyökaluja samaan. Päätin käyttää Gargl sen sijaan, koska sen lisäksi, että voit tarkastella asiakkaan / palvelimen pyyntöjä / vastauksia, Gargl myös voit muokata ja parametrisoida näitä pyyntöjä, ja sitten automaattisesti luo moduulit valitsemallasi ohjelmointikielellä, jotta voit tehdä nämä samat pyynnöt kirjoittamatta koodia. Lisää siitä myöhemmin.

joka tapauksessa, kun oli käskenyt Garglin aloittaa tallennuksen ja mennä Trivia Crackiin Facebookiin selaimessani, ensimmäinen askel oli selvittää, mitkä Facebook-sivulla lähetetyistä pyynnöistä liittyivät Trivia Crackiin, Facebookiin itseensä. Sivun HTML: n tarkastaminen osoitti, että Trivia Crack-sisältö on upotettu Facebookiin iframen kautta. Tämän iframen yläpuolella oleva elementti oli muoto, joka oli tarkoitus lähettää merkilliseen URL – osoitteeseen – https://preguntados.com/game.

käyttämällä Chrome Dev-työkaluja Trivia crackin HTML: n tarkastamiseen

rajoittunut espanjantaitoni muistutti minua siitä, että ”pregunta” tarkoittaa ”kysymystä”, joka näyttää liittyvän triviaan, joten epäilin, että tämä oli se verkkotunnus, jossa Trivia crackia isännöidään. Menee https://preguntados.com/game URL vahvisti, että epäily:

Pelaan Trivia crackia Preguntadoksella.com

seuraava askel oli vain alkaa pelata Trivia crackia, ja pelatessani katso pyyntöjä Gargl toteaa, että sivu tekee mihin tahansa url-osoitteeseen, joka sisältää ”preguntados.com”:

käyttämällä Gargl tallentaa toimia Trivia Crack

kun vastasin Trivia Crack kysymyksiä, huomasin Uusi pyyntö näytti annetaan jokaisen kysymyksen. Itse asiassa pyyntö näytti olevan annettu ennen kuin edes ”kehräsin spinneriä” Trivia Crackissa määrittääkseni, mikä luokka seuraava kysymys olisi:

käyttämällä Gargl: ää tallentamaan toimia Trivia Crackissa

tämä sai minut ajattelemaan, että kysymykset olivat ennalta määrättyjä, ja ”random spinner” itse asiassa oli ennalta määrätty laskeutumaan tiettyyn kategoriaan (ja kysymään tietyn kysymyksen) perustuen palvelimen vastaukseen ”api.preguntados.com/api/users / <userID>/games/<gameID>” pyyntö, joka lähetetään ennen kuin napsautat ”Spin” – painiketta. Minulle tämä tarkoitti, että voisin luultavasti varoittaa käyttäjää kysymyksestä, jota he ovat aikeissa kysyä etukäteen, joten heillä olisi niin paljon aikaa kuin he halusivat miettiä sitä tai etsiä sitä. Tämä olisi etu, koska Trivia Crackissa saat vain 30 sekuntia aikaa vastata kysymykseen, kun kysymys on näytetty, estääkseen käyttäjää etsimästä vastauksia. Lisäksi joissakin pelitiloissa sen ei vain määrä kysymyksiä saat oikein, mutta myös määrä aikaa otat vastata, joka määrittää, jos voitat. Jos voisin näyttää kysymyksen Käyttäjälle etukäteen, he voisivat tietenkin vastata siihen paljon nopeammin, kun Trivia Crack itse näyttää kysymyksen.

joten ajattelin, että minulla on johtolanka ja kaivoin tämän pyynnön yksityiskohtia. Osoittautuu, että tämä pyyntö itse asiassa tarjosi paljon suuremman ”huijarin edun” kuin luulin…

2 – haavoittuvuus yksityiskohtaisesti

käyttämällä Gargl: ää katsomaan ”api: a.preguntados.com/api/users/<userID>/games/<gameID>” request / response in detail, I had to confirm that it does does provide the question of the question, as the possible answers, in the response. Yllätyin kuitenkin huomatessani, että vastaukseen on upotettu myös oikea vastaus kysymykseen!

käyttämällä Gargl: ää tallentamaan toimintoja Trivia Crack - vastaushaavoittuvuus

kuten yllä näkyy, vastaus tähän pyyntöön sisältää kysymyksen, mahdolliset vastaukset ja mikä mahdollisten vastausten joukon indeksi on oikea vastaus. Joten jos tämä data On todellakin noin seuraava kysymys, Kun olen klikkaa ”Spin,” minulta pitäisi kysyä ” Mikä seuraavista Afrikan maista ei ole rannikkoa?”ja oikean vastauksen pitäisi olla vastaukset ylhäältä, eli ”kaikki tekevät”. Napsauttamalla ”Spin” todisti tämän hypoteesin oikeaksi:

Trivia Crack-pelin pelaaminen, ennen kuin valitset vastauksen

pelasin Trivia crackia, valitsemalla oikean vastauksen

käytin myös selainta huomatakseni, että toistuvat GET-pyynnöt ”api.preguntados.com/api/users/<userID>/games / <gameID>” anna aina sama vastaus, kunnes vastaat sen tarjoamaan kysymykseen. Tämä tarkoittaa, että voisin pyytää tätä URL-osoitetta omasta työkalustani ja silti saada saman kysymyksen kuin Facebook Trivia Crack-asiakas saisi.

oikean vastauksen sisältävä vastaus, Kun tavoitteena on, että käyttäjän on itse määriteltävä vastaus, on suorassa ristiriidassa ohjelmoinnin ”puolustavan ohjelmoinnin” käytännön kanssa – erityisesti ”älä koskaan luota asiakkaaseen” – web-ohjelmointiperiaatteen kanssa. Koska palvelin ei voi vaikuttaa siihen, miten asiakas toimii, se ei voi olettaa, että asiakas ei toimi haitallisella tavalla, ja niin on suojauduttava. Oikea tapa toteuttaa vastausten tarkistuskäyttäytyminen on tehdä se palvelimen puolella. Älä lähetä oikeaa vastausta asiakkaalle missään vaiheessa, vaan laita asiakas lähettämään käyttäjän vastaus palvelimelle, jossa palvelin tarkistaa sen oikeellisuuden ja hyvittää käyttäjälle, jos se on oikea (ja tietenkin vain yksi vastaus lähetetään käyttäjää kohti per kysymys).

Trivia Crack ei kuitenkaan tätä tehnyt, vaan luottaa asiakkaaseen. Nyt kyse oli vain haitallisen asiakkaan luomisesta, jonka tarkoituksena oli hyödyntää sitä, että vastauksessa lähetetään oikea vastaus. Ihannetapauksessa sellainen, joka olisi helppo ei-teknisille käyttäjille asentaa ja käyttää. Hmm … entä Chrome laajennus, joka vain lisää painikkeen Trivia Crack peli, kun pelataan Facebook, että kun napsautetaan vastaa nykyiseen kysymykseen oikein automaattisesti??

3 – hyödyntämällä haavoittuvuutta

kuten edellä mainitsin, Gargl antaa sinun ottaa pyynnöt, joita se oli tallentaa, muokata ja parametrisoida niitä tarpeen mukaan, ja sitten automaattisesti luoda moduulit valitsemallasi ohjelmointikielellä tehdä nämä samat pyynnöt. En aio mennä yksityiskohtiin, että prosessi, koska voit tarkastella yksi minun Gargl blogikirjoituksia löytää, että info, mutta olennaisesti olen luonut Gargl mallitiedoston Trivia Crack eri API pyynnöt, käyttäen Gargl Chrome laajennus, ja sitten käytetty Gargl generaattori kääntää että mallitiedoston Trivia Crack JavaScript kirjasto. Käyttämällä Gargl tähän antoi minulle mahdollisuuden luoda JavaScript kirjasto, joka puhuu Trivia Crack palvelimet, kirjoittamatta rivi koodia tehdä niin, ja myös on mallitiedosto noin tulevaisuutta varten, jos haluan tehdä saman asian myöhemmin toiselle ohjelmointikielelle.

kun minulla oli tämä Trivia Crack JavaScript-kirjasto, se oli yksinkertainen asia rakentaa Chrome laajennus JavaScript joka toimii verkkotunnuksen ladattu Trivia Crack Facebook – pelisivu iframe (preguntados.com), Lisää painikkeen HTML pelin, ja kun tätä painiketta napsautetaan pyytää ” api.preguntados.com/api/users/<userID>/games / <gameID>” URL, jäsentää vastauksen oikeaan vastaukseen ja napsauttaa sitten oikean vastauksen edustavan sivun vastaus-painiketta.

Trivia Cracker running on Trivia Crack to answer questions for me

Write a Comment

Sähköpostiosoitettasi ei julkaista.