2011-07-06 45 views
4

CSRF攻撃をシミュレートして、Webサイトの脆弱性をチェックします。私はasp.net webapplicationで試しましたが、シミュレートに失敗しました。ですから、CSRFの攻撃をシミュレートするのを手伝ってください。私はtest.aspxを持っています。CSRF攻撃をシミュレートします

<form name="form1" id="form1" runat="server" method="post" action="mysite.com"> 
<script type="text/javascript"> 
     document.cookie[".ASPXAUTH"] = "someaspxauth"; 
     document.cookie["ASP.NET_SessionId"] = "somesessionid"; 
     document.form1.submit(); 
    </script> 
</form> 

他に何が欠けていますか? ありがとうございます。

+1

これはCSRFに関する一般的な記事です。OWSASP http://www.troyhunt.com/2010/11/owasp-top-10-for-net-developers-part-5.html – Nickz

答えて

6

CSRFをシミュレートするために、悪意のあるコードにCookieまたはセッション情報を含めません。 CSRFの全体のポイントは、実行するコードがセッションまたはクッキー情報を知らないということです。ブラウザはアプリケーションへの要求にそれを含めることを前提としています。

テストするには、POSTメソッドとtxtFrom、txtTo、およびtxtAmountのパラメータをボタンbtnSubmitで受け取り、アカウント1からアカウント2に転送しようとするページTransfer.aspxがあるとします。あなたの悪意のあるコードのようなものが考えられます。

<form action="http://www.mysite.com/Transfer.aspx" method="post"> 
    <input type="hidden" name="txtFrom" value="1" /> 
    <input type="hidden" name="txtTo" value="2" /> 
    <input type="hidden" name="txtAmount" value="500" /> 
    <input type="hidden" name="__VIEWSTATE" value="[PUT VIEWSTATE VALUE HERE]" /> 
    <input type="hidden" name="__EVENTVALIDATION" value="[PUT EVENTVALIDATION VALUE HERE]" /> 
    <input type="submit" name="btnSubmit" value="Go" /> 
</form> 

あなたは、ビューステートとeventvalidation値がどうなるかを事前に知る必要があるだろうので、あなたのページから、あなたが適切にログインしているときにコピーする必要があるだろう。これは、ユーザーまたはセッションに関係なく、ビューステートが一定であることを前提としています。

あなたは悪意のあるページを持っています。 1つのタブにログインしている場合は、別のタブでこれを開き、送信してください。脆弱性がある場合は、転送が行われます。その理由は、mysite.comに所属するクッキーが送信されます。つまり、別のタブで生きているセッションが使用されるためです。

これを修正するには、あなたの投稿に一意のセッションごとの値を含める必要があります。これは、ViewStateUserKeyを使用してASP.NETセッションIDまたはそのハッシュに設定することで、最も簡単に実行できます。これにより、__VIEWSTATEの値がすべてのセッションで一意になります。つまり、__VIEWSTATEの値が何であるかを誰も予測できないため、脆弱ではなくなります。

関連する問題