web-dev-qa-db-ja.com

Webページから動的JavaScriptを取得するにはどうすればよいですか?

Cross Site Script Inclusion(XSSI)攻撃を理解しようとしています。このため、この種の攻撃について 最近の論文 を読みました。

現在、私の主な焦点は、対象のWebページから動的なJavaScriptファイルを検出することです。

私が知りたいのは、同じスクリプトソースを2回(Cookieを使用して1回、Cookieを使用せずに1回)ヒットすることで、別のスクリプトを取得することは本当に可能ですか?それとも私は論文を誤解していますか?これまでにいくつかのWebページをテストしましたが、そのようなケースは見つかりませんでした。

認証Cookieに基づいて異なる出力を返すサンプルデータセットまたはサンプルJSがあれば、役に立ちます。

3
Tasnim Fabiha

理論

Webで提供されるすべてのJavaScriptの99.9%は静的です。 Cookieの値やその他の値に関係なく同じです。これは、通常のJPG画像と同じように、サーバーからそのまま提供される単なるファイルです。

ただし、場合によっては、JavaScriptが動的に生成され(PHPなどの言語を使用)、Cookieの有無にかかわらずリクエストが異なる結果をもたらすことがあります。これらのまれなケースでは、XSSIの脆弱性が存在する可能性があります。

動的JavaScriptの生成は恐ろしい設計手法であり、十分に訓練された開発者が行うことを期待するものではありません。したがって、このような脆弱性を簡単に見つけることを期待しないでください。しかし、確かに、それらはどこかにあります...しかし、それらを見つける場所がわかっている場合、私はあなたに言っていません-サイトの所有者に責任を持って脆弱性を開示します。

ユーザーがsecretmessage.comでホストされているシークレットメッセージを互いにやり取りできるWebページを書いているとしましょう。 Webページは、サーバーからnew_messages.jsをロードして、新しいメッセージをチェックします。そのファイルのコンテンツは、PHPのように生成されます(結果はリクエストのCookieに応じて異なることに注意してください):

<?
session_start();
$user_id = $_SESSION["user_id"];
?>
var latestMessage = "<?= $database->getLatestMessage($user_id); ?>";

このスクリプトを実行すると、リクエストを行っているユーザーへの最新のメッセージがJS変数に入れられ、どこかに出力できます。すごいですね。うーん、ダメ...

次に、悪意のある攻撃者がスクリプトタグにhttp://evil.comを含むページ(http://secretmessages.com/new_messages.js)を作成するとします。ブラウザはnew_messages.jsからのsecretmessages.comをCookieとセッションCookieを含むすべてとともに義務的に要求します。 latestMessageの内容はevil.comのコードから読み取ることができます。したがって、攻撃者が人々の秘密のメッセージを読むためにしなければならないことは、それらをだましてevil.comにアクセスさせることだけです。

3
Anders