Joe Blog Levy

Aktualizace 2: Po napsání tohoto příspěvku jsem také objevil další zranitelnost v Trivia Crack, která umožňovala uživatelům neomezené životy / otočení. V té době, přidal jsem to jako další funkci Trivia Cracker. Včera (1/29/2016) začal Drobnosti Cracker této funkci předcházet (automatické zodpovězení otázek pokračuje v práci-jak je popsáno v tomto příspěvku). Ale co je zábavné, kromě toho, že tomu zabráníte, Server Trivia Crack mě také konkrétně volá!

 Trivia Crack error

aktualizace 1: pomocí podobných technik jako níže jsem také vydal rozšíření podvádění Chrome pro Candy Crush. Dej to sem.

jak začala prázdninová sezóna před několika týdny, začal jsem si všimnout, že nová aplikace, Trivia Crack, se stala populární u mých přátel. Pro ty z vás, kteří nevědí, Trivia Crack je nová hra pro Android, iPhone a Facebook. Předpoklad hry je jednoduchý a velmi podobný jiné populární aplikaci z loňského roku, QuizUp. V podstatě odpovídáte na triviální otázky různých kategorií a soutěžíte proti svým přátelům o vychloubání práv. Navzdory jednoduchosti (nebo možná kvůli tomu) se Trivia Crack stala velmi populární až pozdě-nashromáždila 5.3 milionu lajků na Facebook a stala se nejlepší bezplatnou aplikací v obchodě Google Play (Android).

myslíte si, že vývojáři takové leštěné a úspěšné hry mohli mít čas na její implementaci způsobem, který je Bezpečný před podváděním, ale ukázalo se, že psaní programu, který podvádí Trivia Crack, je ve skutečnosti poměrně jednoduché. V průběhu víkendu, byl jsem schopen napsat a vydat rozšíření Chrome, Trivia Cracker, to mě změnilo z medicore-at-best Trivia Crack hráče na zdánlivě geniálního poloboha. Můžete vidět Trivia Cracker v akci níže:

Takže co je špatného na implementaci Trivia Crack, která mi umožnila tak snadno vytvořit nástroj, který umožňuje někomu podvádět? Stručně řečeno – když klient Trivia Crack požaduje od serveru Trivia Crack další otázku, kterou se má uživatel zeptat, server odpoví nejen otázkou a možnými odpověďmi, ale také pošle, která odpověď je správná odpověď. Podrobnosti o zranitelnosti, jak jsem ji našel a jak jsem vytvořil rozšíření Chrome, abych ji využil, jsou níže.

1-nalezení zranitelnosti

poté, co jsem příliš mnohokrát prohrál se svými přáteli v Trivia Crack, rozhodl jsem se, že chci zjistit, jestli bych mohl vyhrát svým vlastním, zvláštním způsobem. I když nejsem tak dobrý v náhodných triviích, jsem docela dobrý v reverzním inženýrství. Měl jsem podezření, že bych mohl využít zasílání vlastních požadavků na servery Trivia Crack, nebo pomocí některých dat v odpovědích ze serverů Trivia Crack, získat výhodu ve hře. Tak jsem začal tím, že zkoumá, jaké druhy dat Trivia Crack klient a server projít tam a zpět.

Chcete-li zkontrolovat tato data, hrál jsem Trivia Crack v mém prohlížeči na Facebook, zatímco nahrávání a kontrolu požadavků a odpovědí odeslaných mezi Trivia Crack je klient a server pomocí nástroje, který jsem vytvořil dříve s názvem Gargl. Ano, vím, že jsem mohl použít Fiddler nebo Vývojářské nástroje Chrome, abych udělal totéž. Rozhodl jsem se místo toho použít Gargl, protože kromě toho, že vám umožní zobrazit požadavky/odpovědi klienta/serveru, Gargl také umožňuje tyto požadavky upravovat a parametrizovat a poté automaticky generovat moduly v programovacím jazyce podle vašeho výběru, takže můžete provádět stejné požadavky bez psaní řádku kódu. Více o tom později.

každopádně, poté, co jsem řekl Gargl, aby začal nahrávat a šel do Trivia Crack na Facebook v mém prohlížeči, prvním krokem bylo zjistit, které z mnoha požadavků odeslaných na této stránce Facebook se týkaly Trivia Crack, versus Facebook sám. Kontrola HTML na stránce ukázala, že obsah Trivia Crack je vložen do Facebook prostřednictvím iframe. Prvek přímo nad tímto iframe byl formulář určený k odeslání na zvláštní adresu URL – https://preguntados.com/game.

 používání nástrojů Chrome Dev ke kontrole HTML Trivia Crack

Moje omezená znalost španělštiny mi připomněla, že „pregunta“ znamená „otázka“, která se zdá být spojena s trivia, takže jsem měl podezření, že to byla doména, kde je hostována Trivia Crack. Přechod na https://preguntados.com/game URL potvrdil toto podezření:

hraní Trivia Crack na Preguntados.com

dalším krokem bylo jen začít hrát Trivia Crack, a jak jsem hrál, podívejte se na požadavky Gargl zjistí, že stránka dělá na libovolnou adresu url obsahující „preguntados.com“:

použití Gargl k záznamu akcí v Trivia Crack

když jsem odpověděl na otázky Trivia Crack, všiml jsem si, že pro každou otázku byla vydána nová žádost. Vlastně, zdálo se, že žádost byla vydána ještě předtím, než jsem v Trivia Crack „roztočil spinner“, abych určil, do jaké kategorie bude další otázka:

 použití Gargl k záznamu akcí v Trivia Crack

to mě přimělo myslet si, že otázky byly předurčeny a „náhodný spinner“ byl ve skutečnosti předurčen k přistání na určité kategorii (a položit určitou otázku) na základě odpovědi serveru na „náhodný spinner“. api.preguntados.com/api/users / <userID> / games / <gameID> „žádost, která byla odeslána před kliknutím na tlačítko“ Spin“. Pro mě to znamenalo, že bych mohl pravděpodobně upozornit uživatele na otázku, kterou se chystají položit předem, takže by měli tolik času, kolik by o tom chtěli přemýšlet nebo si to vyhledat. To by byla výhoda, protože v Trivia Crack, dostanete pouze 30 sekund na odpověď na otázku, jakmile se zobrazí otázka, aby se zabránilo uživateli vyhledat odpovědi. Kromě toho, v některých herních režimech to není jen počet otázek, které dostanete správné, ale také množství času budete mít na odpověď, která určuje, zda vyhrajete. Kdybych mohl uživateli ukázat otázku předem, mohli by na ni samozřejmě odpovědět mnohem rychleji, jakmile Trivia Crack sama ukáže otázku.

tak jsem si myslel, že mám vodítko a kopal do detailů této žádosti. Ukázalo se, že tento požadavek skutečně poskytl mnohem větší „výhodu podvodníka“, než jsem si myslel …

2-zranitelnost v detailu

pomocí Gargl se podívat na “ api.preguntados.com/ api / users / <userID> / games / <gameID> “ žádost/odpověď podrobně jsem byl schopen potvrdit, že skutečně poskytuje otázku, která má být položena, stejně jako možné odpovědi v odpovědi. Byl jsem však překvapen, když jsem zjistil, že správná odpověď na otázku je také obsažena v odpovědi!

použití Gargl k záznamu akcí v Trivia Crack - zranitelnost odpovědi

jak vidíte výše, odpověď na tento požadavek obsahuje otázku, možné odpovědi a který index v poli možných odpovědí je správnou odpovědí. Takže pokud jsou tato data skutečně o další otázce, po kliknutí na „Spin“, „měl bych se zeptat“ která z následujících afrických zemí nemá pobřeží?“a správná odpověď by měla být odpovědi shora, což je „všichni dělají“. Kliknutím na „Spin“ se tato hypotéza ukázala jako správná:

hraní Trivia Crack, před výběrem odpovědi

hra Trivia Crack, výběr správné odpovědi

také jsem použil svůj prohlížeč, abych zjistil, že opakované žádosti o získání “ api.preguntados.com/api/users/<userID>/games / <gameID>“ vždy dávejte stejnou odpověď, dokud neodpovíte na otázku, kterou poskytuje. To znamená, že bych mohl požádat o tuto adresu URL z mého vlastního nástroje a stále dostávat stejnou otázku jako klient Trivia Crack na Facebook by obdržel.

odpověď obsahující správnou odpověď, pokud je cílem, že uživatel musí určit odpověď sám, je v přímém rozporu s praxí programování „defenzivního programování – – zejména s principem webového programování“ nikdy nedůvěřujte klientovi“. Vzhledem k tomu, že server nemá žádnou kontrolu nad tím, jak klient jedná, nemůže předpokládat, že klient nebude jednat škodlivým způsobem,a proto se musí chránit. Správný způsob implementace chování kontroly odpovědí je provést to na straně serveru. Neposílejte správnou odpověď klientovi v žádném okamžiku a místo toho nechte klienta poslat odpověď uživatele na server, kde server poté zkontroluje správnost a připíše uživateli, pokud je správný (a samozřejmě povolí pouze jednu odpověď na uživatele na otázku).

nicméně Trivia Crack to neudělala a místo toho důvěřuje klientovi. Nyní šlo jen o vytvoření škodlivého klienta, který by využil skutečnosti, že v odpovědi je odeslána správná odpověď. V ideálním případě by bylo snadné instalovat a používat netechnické uživatele. Hmm…co takhle rozšíření Chrome, které při hraní na Facebook přidá tlačítko do hry Trivia Crack, které po kliknutí automaticky odpoví na aktuální otázku správně??

3-s využitím zranitelnosti

jak jsem zmínil výše, Gargl vám umožňuje vzít požadavky, které jste si nechali zaznamenat, upravit a parametrizovat je podle potřeby, a poté automaticky generovat moduly v programovacím jazyce podle vašeho výběru, abyste provedli stejné požadavky. Nebudu se zabývat podrobnostmi tohoto procesu, protože se můžete podívat na jeden z mých blogových příspěvků Gargl a najít tyto informace, ale v podstatě jsem vygeneroval soubor šablony Gargl pro různé požadavky API Trivia Crack pomocí rozšíření Gargl Chrome a poté použil generátor Gargl k přeměně tohoto souboru šablony na knihovnu JavaScriptu Trivia Crack. Použití Gargl pro to mi umožnilo vytvořit knihovnu JavaScriptu, která mluví se servery Trivia Crack, aniž by k tomu napsal řádek kódu, a také mít Soubor Šablony pro budoucnost v případě, že chci udělat totéž později pro jiný programovací jazyk.

jakmile jsem měl tuto knihovnu JavaScriptu Trivia Crack, byla to jednoduchá záležitost budování rozšíření Chrome v JavaScriptu, které běží na doméně načtené na stránce hry Trivia Crack Facebook iframe (preguntados.com), přidá tlačítko do HTML pro hru, a po kliknutí na toto tlačítko požaduje “ api.preguntados.com/ api / users / <userID> / games / <gameID> “ URL, analyzuje odpověď pro správnou odpověď a poté klikne na tlačítko odpověď na stránce představující správnou odpověď.

 Trivia Cracker běží na Trivia Crack odpovědět na otázky pro mě

Write a Comment

Vaše e-mailová adresa nebude zveřejněna.