目次
1.CSRF
1 はじめに
1.1 正式導入
これらの点について
CSRFとは
CSRF の正式名称はクロスサイト リクエスト フォージェリ (Cross-site request forgery) で、攻撃者はリクエスト (通常、このリクエストはリンクです) を偽造し、騙します。ユーザーがこのリクエストをクリックすると、攻撃全体が完了します。ワンクリック攻撃またはセッションライディングとも呼ばれます。
CSRF攻撃原理
CSRF 攻撃は、ユーザーの Web ブラウザーに対する Web サイトの信頼を利用して、ユーザーが現在ログインしている Web アプリケーションをハイジャックし、ユーザーの意図しない操作を実行します。本質は、ユーザーの権限を使用して攻撃を完了することであるため、攻撃が成功するには、ユーザーが検証を通じて権限を取得し、攻撃者が提供するリクエストをトリガーする必要があります。
CSRFの判断
Web サイトに CSRF 脆弱性があるかどうかを判断することは、実際には、重要な情報 (パスワードやその他の機密情報など) に対する操作 (追加、削除、変更) が偽造されやすいかどうかを判断することになります。
CSRFの予防
Web サイトが CSRF 攻撃を防止したい場合は、機密情報の操作が偽造されて CSRF が発生するのを防ぐために、機密情報の操作に対応するセキュリティ対策を実装する必要があります。例:
-- 機密情報の操作に安全なトークンを追加します。 --機密情報の操作に
安全な検証コードを追加します。パスワードなど。
2、突破
1.CSRF(取得)
プロンプトを見てみましょう。ユーザー名とパスワードが表示されています。
このページにログインします
クリックして情報を変更し、性別を女の子に変更します
トップURLは変わっていないことが分かります。
bp パケット キャプチャを見てください。
パケット キャプチャから、ユーザー情報を変更する際に、予測できない認証情報がないことがわかります。まあ、ここは悪用できるはずです。
allen ログインの状態 (実際、このリンクにはユーザー名が含まれていません。誰がログインしていても問題ありません。ログインしているユーザーの情報は、ログインしているユーザーの情報が、 URL)を変更してみてください。電話番号の変更など、上記のリンクを変更してください。ブラウザのアドレス バーにペイロードを入力します。
http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=17867676677&add=nba+76&email=allen%40pikachu.com&submit=submit
URL に Payload を入力すると、変更は成功します。
この時点で被害者のログイン ステータスまたは Cookie/セッションの有効期限が切れていない場合、情報は変更されます。
短縮リンクを使用して URL を生成し、短縮リンクを生成して使用することができます。
無事男の子に性別変更され攻撃成功
2.CSRF(ポスト)
php のバージョンが高すぎるため、エラーが報告されます。php ファイルを開いて、MYSQL の後に l を追加します。
bpパケットキャプチャ
投稿タイプでは、URL に変更パラメーターが表示されなくなったため、上記の方法 (つまり、URL を介してリクエストを偽造する) を使用して変更することはできなくなりましたが、パケット キャプチャはこのページのタグと名前を知ることができます。後でフォームを作成するときに使用すると便利です。
post 型は get 型よりも使用が面倒で、攻撃者はこの脆弱性を悪用する html ファイルを作成し、自分のサーバーに配置し、その html ファイルを要求するリンクをユーザーに送信する必要があります。
変更された情報を使用して csrf.html を構築する
<html>
<script> <!-- 这个script是用来自动提交表单的 -->
window.onload = function() {
document.getElementById("submit").click();
}
</script>
<body>
<form action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="POST">
<input type="hidden" name="sex" value="girl" />
<input type="hidden" name="phonenum" value="123456789" />
<input type="hidden" name="add" value="usa" />
<input type="hidden" name="email" value="[email protected]" />
<input type="hidden" name="submit" value="submit" />
<input id="submit" type="submit" value="Submit request" style="display:none"/>
<!-- style设置为display:none起到隐藏submit按钮的作用 -->
</form>
</body>
</html>
ピカチュウディレクトリに入れてください
皮膚に展開される
新しい URL を開いて、http://127.0.0.1/pikachu/csrf.html にアクセスしてください。
404 が表示される場合、csrf_post.php ファイルはユーザーがログインしていないことを検出すると、同じフォルダー (csrfpost) 内の csrf_get_login.php にジャンプしますが、実際にはそのようなファイルはありません。ファイルが csrfpost フォルダーにあるため、404 not found が返されます。
csrfpost.php を開き、header("location:csrf_get_login.php"); を header("location:csrf_post_login.php"); に変更します。
http://127.0.0.1/pikachu/csrf.html と入力すると、攻撃は成功します。
3.CSRF---トークン
情報を変更し、bp を使用してパケットをキャプチャし、トークン値を見つけます。
リピーターに送信
トークンを削除すると、トークンが正常に変更されていないことがわかります。
1 回のキャプチャの後、トークン間に規則性はなくなります。
GoogleブラウザのBPキャプチャパケット
Google Chrome でキャプチャしたトークンを Firefox ブラウザ パッケージに入れてみましたが、依然として変更できないことがわかりました。
ただし、まだ方法はあり、bp のプラグイン CSRF Token Tracker を使用してトークン検証をバイパスできます。
CSRF トークンのプラグインを開き、「ホスト」にホスト IP、「名前」にトークン、「値」にトークンの値を入力します。
これは bp トークン プラグインがオンになる前であるため、変更は有効になりません。
プラグインがオンになると、t に対応するトークン値がランダムに生成されます。
攻撃は成功しました!!!
トークンの値は削除できず、ルールもまったくありませんが、Google ブラウザから変更されたトークンの値は Firefox ブラウザでは依然として利用できませんが、いくつかのバイパス方法を使用して攻撃することは可能です。 。
ソースコード
ユーザー情報を変更するとき、サーバーは URL のトークン フィールドとセッションのトークン フィールドを比較し、それらが同じである場合にのみユーザー情報を変更します。
ユーザー情報を変更した後、set_token() 関数を使用して新しいトークンを生成します。このトークンは HTML フォームに返されて非表示になり、次回ユーザーが情報を変更するときに URL が入力されます。
set_token() 関数を次の図に示します。新しいトークンを生成する前に、トークンの再利用を避けるために古いトークンが最初に破棄されます。