Как да проникна Trivia Crack с Trivia Cracker

Как да проникна Trivia Crack с Trivia Cracker

BY ДЖО ЛЕВИ


optad_b

По време на празничния сезон започнах да забелязвам, че ново приложение, Trivia Crack , ставаше популярен сред приятелите ми. За тези от вас, които не знаят, Trivia Crack е нова игра за Android, iPhone и Facebook . Предпоставката на играта е проста и много подобна на друго популярно приложение от миналата година, QuizUp. По същество отговаряте на любопитни въпроси от различни категории, състезавайки се срещу приятелите си за правата на хваленето. Въпреки простотата (или може би благодарение на нея), Trivia Crack стана много популярен в последно време - събра 5,3 милиона харесва във Facebook и да станете най-доброто безплатно приложение в магазина на Google Play (Android).

Бихте си помислили, че разработчиците на такава полирана и успешна игра може да са отделили време, за да я внедрят по начин, който е сигурен от измама, но се оказва, че писането на програма за измама в Trivia Crack всъщност е доста просто. В рамките на един уикенд успях да напиша и пусна разширение за Chrome, Trivia Cracker , Което ме превърна от посредствен в най-добрия случай Trivia Crack играч в привидно гениален полубог. Можете да видите Trivia Cracker в действие по-долу:



И така, какво не е наред с изпълнението на Trivia Crack, което ми позволи толкова лесно да създам инструмент, който позволява на всеки да изневерява? Накратко - когато клиентът Trivia Crack поиска от сървъра Trivia Crack следващия въпрос, който да зададе на потребителя, сървърът отговаря не само с въпроса и възможните отговори, но също така изпраща кой отговор е верният отговор. Подробностите за уязвимостта, как я намерих и как изградих разширение за Chrome, за да се възползвам от него, са по-долу.

1) Намиране на уязвимостта

След като загубих от моите приятели в Trivia Crack твърде много пъти, реших, че искам да видя дали мога да спечеля по мой собствен, специален начин. Въпреки че не съм толкова добър в случайните любопитни факти, аз съм доста добър в обратното инженерство. Подозирах, че може да се възползвам от изпращането на моите собствени заявки до сървърите на Trivia Crack или използването на някои данни в отговорите от сървърите на Trivia Crack, за да спечеля предимство в играта. Така че започнах с проучване какви видове данни клиентът и сървърът на Trivia Crack предават напред-назад.

За да проверя тези данни, пуснах Trivia Crack в браузъра си във Фейсбук , докато записва и проверява заявките и отговорите, изпратени между клиента и сървъра на Trivia Crack с помощта на инструмент, който бях създал преди това Гаргъл . Да, знам, че бих могъл да използвам Fiddler или инструментите за разработчици на Chrome, за да направя същото. Реших вместо това да използвам Gargl, защото освен че ви позволява да преглеждате заявки / отговори на клиент / сървър, Gargl ви позволява да модифицирате и параметризирате тези заявки и след това автоматично генерира модули на избран от вас език за програмиране, за да можете да правите същите тези заявки без да пишете ред код. Повече за това по-късно.



Както и да е, след като разказа Гаргъл за да започнете да записвате и да отидете в Trivia Crack във Фейсбук в моя браузър първата стъпка беше да разбера коя от многото заявки, изпратени на тази страница във Facebook, са свързани с Trivia Crack, срещу самия Facebook. Проверката на HTML на страницата показа, че съдържанието на Trivia Crack е вградено във Facebook чрез iframe. Елементът точно над тази вградена рамка беше форма, предназначена за публикуване на специфичен URL адрес: https://preguntados.com/game .

Trivia Crack

Ограничените ми познания по испански ми напомниха, че „pregunta“ означава „въпрос“, който изглежда е свързан с любопитни факти, затова подозирах, че това е домейнът, в който се хоства Trivia Crack. Отивам до https://preguntados.com/game URL потвърди това подозрение:

Trivia Crack



Следващата стъпка беше просто да започнете да играете Trivia Crack и докато играх, разгледайте заявките, които Gargl установява, че страницата прави към всеки URL адрес, съдържащ „preguntados.com“:

Trivia Crack

Докато отговарях на въпросите на Trivia Crack, забелязах, че сякаш се издава нова молба за всеки въпрос. Всъщност искането изглеждаше издадено, преди дори да „завъртя въртящото устройство“ в Trivia Crack, за да определя коя категория ще бъде следващият въпрос:

Trivia Crack

Това ме накара да си помисля, че може би въпросите са предварително определени и всъщност „случайното завъртане“ е предварително определено да кацне в определена категория (и да зададе определен въпрос) въз основа на отговора от сървъра на „api.preguntados.com/api / потребител // игри / “, изпратена преди да щракнете върху бутона„ завъртане “. За мен това означаваше, че вероятно бих могъл да предупредя потребителя за въпроса, който ще им бъде зададен преди време, така че ще разполагат с толкова време, колкото искат да помислят или да го търсят. Това би било предимство, защото в Trivia Crack получавате само 30 секунди, за да отговорите на въпрос, след като въпросът бъде показан, за да попречите на потребителя да търси отговори. В допълнение, в някои режими на игра не само броят на въпросите, които получавате правилно, но и времето, необходимо за отговор, определя дали ще спечелите. Ако можех да покажа на потребителя въпроса преди време, те очевидно биха могли да отговорят много по-бързо, след като Trivia Crack сам покаже въпроса.

Затова прецених, че имам преднина и се задълбочих в детайлите на това искане. Оказва се, че тази молба всъщност предоставя много по-голямо „предимство на измамника“, отколкото си мислех ...

2) Уязвимостта в детайли

Използвайки Гаргъл за да разгледам подробно заявката / отговора „api.preguntados.com/api/users//games/“, успях да потвърдя, че наистина предоставя въпроса, който трябва да бъде зададен, както и възможните отговори в отговор. Въпреки това бях изненадан да установя, чеверният отговор на въпроса също е вграден в отговора!

Trivia Crack

Както можете да видите по-горе, отговорът на тази заявка съдържа въпроса, възможните отговори и кой индекс в масива от възможни отговори е верният отговор. Така че, ако тези данни наистина са за следващия въпрос, след като щракна върху „Спин“, трябва да бъда попитан „Коя от следните африкански държави няма крайбрежие?“ и верният отговор трябва да бъде отговорите [3] отгоре, което е „Всички те го правят“. Кликването върху „Спин“ доказа, че тази хипотеза е вярна:

Trivia Crack

Trivia Crack

Също така използвах браузъра си, за да открия, че многократните GET заявки към „api.preguntados.com/api/users//games/“ винаги дават един и същ отговор, докато не отговорите на въпроса, който той предоставя. Това означава, че мога да поискам този URL от собствения си инструмент и все пак да получа същия въпрос, който ще получи клиентът на Trivia Crack във Facebook.

Отговорът, съдържащ верния отговор, когато целта е потребителят сам да определи отговора, е в пряк конфликт с „ Защитно програмиране 'Практика на програмиране - особено' никога не се доверявайте на клиента ”Принцип на уеб програмиране. Тъй като сървърът няма контрол върху това как действа клиентът, той не може да предположи, че клиентът няма да действа по злонамерен начин и затова трябва да се защити. Правилният начин за прилагане на поведението за проверка на отговорите е да го направите от страна на сървъра. Не изпращайте верния отговор на клиента по всяко време и вместо това накарайте клиента да изпрати отговора на потребителя до сървъра, където сървърът ще го провери за коректност и ще кредитира потребителя, ако е верен (и разбира се, разрешава само отговор да се изпраща на всеки потребител на въпрос).

Trivia Crack обаче не направи това и вместо това се доверява на клиента. Сега беше просто въпрос на създаване на злонамерен клиент, който да се възползва от факта, че в отговора се изпраща верният отговор. В идеалния случай такъв, който би бил лесен за инсталиране и използване от нетехнически потребители. Хм ... какво ще кажете за разширение за Chrome, което просто добавя бутон към играта Trivia Crack, когато се играе във Фейсбук , че при щракване автоматично отговаря правилно на текущия въпрос ??

3) Възползване от уязвимостта

Както споменах по-горе, Гаргъл ви позволява да приемате заявките, които сте имали, да ги записва, модифицира и параметризира при необходимост и след това автоматично да генерира модули на избран от вас език за програмиране, за да направи същите тези заявки. Няма да навлизам в подробностите на този процес, тъй като можете да разгледате един от моите Постове в блога на Gargl за да намеря тази информация, но по същество генерирах Файл с шаблон на Gargl за Trivia Crack Различни заявки за API, използвайки Разширение за Gargl Chrome и след това използва Gargl генератор, за да превърне този файл с шаблон в Trivia Crack JavaScript библиотека . Използването на Gargl за това ми позволи да създам JavaScript библиотека, която разговаря със сървърите на Trivia Crack, без да пиша ред код, за да го направя, както и да имам шаблонния файл за в бъдеще, в случай че искам да направя същото нещо по-късно за друг програмен език.

След като имах тази библиотека на Trivia Crack JavaScript, беше просто да се създаде разширение за Chrome в JavaScript, което работи на домейна, зареден в страницата на играта Trivia Crack iframe (preguntados.com), добавя бутон към HTML за играта , и когато този бутон е щракнат, иска URL адресът „api.preguntados.com/api/users//games/“, анализира отговора за правилния отговор и след това щраква върху бутона за отговор на страницата, представяща верния отговор.

Trivia Crack

И точно така, Trivia Cracker е роден! Любопитни сте за точните подробности как работи Trivia Cracker? Вижте изходния код на GitHub .

Това парче първоначално беше представено на Блогът на Джо Леви , И публикувано отново с разрешение.

Изображение чрез Trivia Crack