Update2:この記事を書いた後、私はまた、ユーザーに無制限のライフ/スピンを与えることを可能にするTrivia Crackの別の脆弱性を発見しました。 その時、私はトリビアクラッカーに別の機能としてこれを追加しました。 昨日(1/29/2016)、Trivia Crackerはこの機能を防止し始めました(この記事で説明したように、自動質問応答は引き続き機能します)。 しかし、面白いのは、それを防止することに加えて、トリビアクラックサーバーはまた、具体的に私を呼び出します!
更新1:以下と同様の技術を使用して、私はまた、キャンディクラッシュのための不正行為のChrome拡張機能をリリースしました。 ここでそれを取得します。
数週間前にホリデーシーズンが始まったとき、私は新しいアプリ、トリビアクラックが私の友人に人気が高まっていることに気づき始めました。 知らない人のために、トリビアクラックは、Android、iPhone、およびFacebookのための新しいゲームです。 ゲームの前提はシンプルで、昨年から別の人気アプリ、QuizUpに非常によく似ています。 基本的に、あなたは自慢の権利のためにあなたの友人と競合し、様々なカテゴリのトリビアの質問に答えます。 シンプルさ(または多分それによる)にもかかわらず、トリビアクラックは、facebook上で5.3万人の同類を遅くラッキングし、Google Play(Android)ストアでトップ無料アプリ
このような洗練された成功したゲームの開発者は、不正行為から安全な方法でそれを実装するために時間を取っているかもしれないと思うだろうが、トリビアクラックで不正行為をするプログラムを書くことは実際にはかなり簡単であることが判明した。 週末の過程で、私はChromeの拡張機能、トリビアクラッカーを書いてリリースすることができました。 あなたは以下のアクションでトリビアクラッカーを見ることができます:
だから、私はそう簡単に誰もがカンニングすることができますツールを構築す 要するに、トリビアクラッククライアントがトリビアクラックサーバーから次の質問を要求してユーザーに尋ねると、サーバーは質問と可能な答えだけでなく、 脆弱性の詳細、それを見つけた方法、およびそれを利用するためのChrome拡張機能の構築方法は以下のとおりです。
1-脆弱性を見つける
トリビアクラックで友人に何度も負けた後、私は自分自身の、特別な方法で勝つことができるかどうかを見たいと決めました。 私はランダムなトリビアがあまり得意ではありませんが、私はリバースエンジニアリングがかなり得意です。 私は自分の要求をTrivia Crackのサーバーに送信するか、Trivia Crackのサーバーからの応答でいくつかのデータを使用して、ゲームで優位に立つことができるかもしれないと思 そこで私は、トリビアクラッククライアントとサーバーが前後に渡すデータの種類を研究することから始めました。
このデータを検査するために、私はFacebookのブラウザでTrivia Crackを演奏し、以前に作成したGarglというツールを使用してTrivia Crackのクライアントとサーバーの間で送信された要求と応答を記録して検査しました。 はい、私は同じことをするためにFiddlerまたはChromeの開発者ツールを使うことができたことを知っています。 なぜなら、クライアント/サーバーの要求/応答を表示できるだけでなく、Garglではこれらの要求を変更してパラメータ化し、選択したプログラミング言語でモジュー それについては後で詳しく説明します。
とにかく、私のブラウザでGarglに記録を開始し、FacebookのTrivia Crackに行くように言った後、最初のステップは、このFacebookページで送信されている多くの要求のうち、Facebook facebook自体と対す…………Facebookに関連しているかどうかを把握することでした。 ページ上のHTMLを調べると、Trivia Crackコンテンツがiframeを介してFacebookに埋め込まれていることが示されました。 このiframeのすぐ上の要素は、特有のURL-https://preguntados.com/gameに投稿するためのフォームでした。Chrome Dev Toolsを使用してTrivia CrackのHTMLを検査する
スペイン語の私の限られた知識は、「pregunta」がtriviaに関連しているように見える「質問」を意味することを私に思い出させたので、私はこれがTrivia Crackがホストされているドメインであると疑った。 https://preguntados.com/gameのURLに行くと、その疑いが確認されました:
次のステップは、トリビアクラックの再生を開始するだけで、私がプレイしたときに要求を見ると、ガーグルはページが”を含む任意のurlに作成しているこpreguntados.com”:
のアクションを記録するトリビアクラックの質問に答えたとき、質問ごとに新しい要求が発行されているように 実際には、次の質問がどのカテゴリになるかを決定するために、トリビアクラックで”スピナーをスピン”する前に、要求が発行されたようでした:
これにより、質問が事前に行われたのではないかと思い、実際には”random spinner”はサーバーから”Random spinner”への応答に基づいて、特定のカテゴリに着陸する(そして特定の質問をする)ことがあらかじめ決められていたと考えられた。api.preguntados.com/api/users/<userID>/games/<gameID>”スピン”ボタンをクリックする前に送信されたリクエスト。 私にとっては、これはおそらくユーザーに事前に質問されようとしている質問を警告できることを意味していたので、彼らはそれについて考えたり調べた トリビアクラックでは、質問が表示されると、ユーザーが回答を検索するのを防ぐために、質問に答えるのに30秒しかかからないため、これは利点になります。 また、いくつかのゲームモードでは、あなたが正しい取得する質問の数だけでなく、あなたが勝つかどうかを決定する答えにかかる時間の量だけでなく、。 ユーザーに事前に質問を表示することができれば、Trivia Crack自体が質問を表示すると、明らかにはるかに迅速に答えることができます。
だから私は手掛かりを持っていると思って、この要求の詳細を掘り下げました。 このリクエストは、実際に私が思っていたよりもはるかに大きな”詐欺師の利点”を提供していたことが判明しました…
2–詳細な脆弱性
Garglを使用して”api。プレグンタドスcom/api/users/<userID>/games/<gameID>”request/response詳細に、私はそれが実際に要求される質問と可能な答えを応答で提供していることを確認することができました。 しかし、私は質問に対する正しい答えも応答に埋め込まれていることを見つけて驚きました!
上記のように、この要求への応答には、質問、可能な回答、および可能な回答の配列内のどのインデックスが正解であるかが含まれています。 したがって、このデータが実際に次の質問に関するものである場合、「スピン」をクリックした後、「次のアフリカ諸国のうち、海岸がないのはどれですか?”そして、正しい答えは、”それらのすべてが行う”である上からの答えでなければなりません。 “スピン”をクリックすると、この仮説が正しいことが証明されました:
私はまた、”apiへのGET要求を繰り返すことを見つけるために私のブラウザを使用しました。プレグンタドスcom/api/users/<userID>/games/<gameID>”あなたが提供する質問に答えるまで、常に同じ応答を与えます。 これは、私が自分のツールからこのURLを要求し、Facebook上のトリビアクラッククライアントが受け取るのと同じ質問を受け取ることができることを意
正しい答えを含む応答は、ユーザーが答えを自分で決定しなければならないという目標がある場合、プログラミングの”防御的なプログラミング”の実践、特に”ク サーバーはクライアントがどのように動作するかを制御できないため、クライアントが悪意のある方法で動作しないと仮定することはできないため、自 回答チェック動作を実装する正しい方法は、サーバー側でそれを行うことです。 サーバーは正しいかどうかをチェックし、正しい場合はユーザーに信用を与えます(もちろん、質問ごとにユーザーごとに1つの回答のみを送信できます)。
しかし、Trivia Crackはこれを行わず、代わりにクライアントを信頼しました。 今では、正しい答えが応答で送信されるという事実を利用するために悪意のあるクライアントを作成するだけの問題でした。 理想的には、非技術的なユーザーが簡単にインストールして使用できるものです。 うーん…どのようにちょうどトリビアクラックゲームにボタンを追加するChromeの拡張機能について,Facebook上で再生したとき,クリックしたときに正しく自動的?
3–脆弱性を利用して
上記のように、Garglは、あなたが記録した要求を取得し、必要に応じて変更し、パラメータ化し、お好みのプログラミング言語でモジュールを自動生成して、これらの同じ要求を行うことができます。 私はその情報を見つけるために私のGarglのブログ記事のいずれかを見ることができるので、そのプロセスの詳細に入るつもりはありませんが、本質的に私はGargl Chrome拡張機能を使用して、Trivia CrackのさまざまなAPIリクエストのためのGarglテンプレートファイルを生成し、そのテンプレートファイルをTrivia crack JavaScriptライブラリに変換するためにGarglジェネレータを使用しました。 このためにGarglを使用すると、Trivia Crackのサーバーと通信するJavaScriptライブラリを作成することができ、そのためのコード行を記述することなく、後で別のプログラミング言語で同じことをしたい場合に備えて、将来のためにテンプレートファイルを作成することができました。
私はこのトリビアクラックJavaScriptライブラリを持っていたら、それはトリビアクラックFacebookのゲームページiframe(にロードされたドメイン上で実行されるJavaScriptでChrome拡張preguntados.com)、ゲームのHTMLにボタンを追加し、そのボタンがクリックされると”api”を要求します。プレグンタドスcom/api/users/<userID>/games/<gameID>”URLを使用して、正しい回答の応答を解析し、正しい回答を表すページの回答ボタンをクリックします。