CSRF(クロスサイト リクエスト フォージェリ)

安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推進機構
P.30「CSRF(クロスサイト・リクエスト・フォージェリ)」参照

Metasploitable2 の DVWA にログインする

  • security Level : low を確認する
  • 左欄から CSRF を選択。

"Change your admin password" と表示されるので、変更する。
ここでは "abc123" とする。

f:id:hirose-test:20190916003840j:plain

"Password Changed" と表示される。またこのとき、アドレスバーにパスワードが表示されてしまっている。
そこで、そのアドレスをコピーする。

f:id:hirose-test:20190916014033j:plain

次に、端末を立ち上げ、# vim csrf.txtなどとしてテキストエディターを起動し、そこに張り付ける。
Windows のメモ帳でもいい)

f:id:hirose-test:20190916004440j:plain

これを元にして「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>" とする

f:id:hirose-test:20190916011452j:plain

しかしながら、途中までしか張り付けられない。
そこで、Message 欄を右クリックし "Inspect Element" を選び「開発ツール」を開く。
最大文字数「50」となっていることが分かる。

f:id:hirose-test:20190916011851j:plain

maxlength="50" から maxlength="200" に書き換える。
再度、メッセージ欄にコピペする。

f:id:hirose-test:20190916012257j:plain

f:id:hirose-test:20190916012400j:plain

今度はすべて貼り付けできたので "Sign Guestbook" をクリックして投稿する。
投稿されたメッセージの "Click Here" をクリックする。

f:id:hirose-test:20190916012706j:plain

すると "Password Changed" と表示される。かつ、ブラウザのアドレスバーに罠で仕掛けた新しいパスワードが表示されている。

f:id:hirose-test:20190916013205j:plain

一度ログアウトし、再度変更されたパスワード(User : admin, Password : password)でログインできるか確かめる。

ログインできたら、罠として仕掛けた CSRF が実行できたことが分かる。

/* -----codeの行番号----- */