WebGoatの紹介
事業推進部のイトウです。
Webセキュリティを学習する場合、書籍などで脆弱性について学ぶだけでなく、実際に手を動かして脆弱性を試すことも重要になります。しかしながら、インターネット上のWebサイトに対して攻撃することはできないため、実践するには自分で環境を用意する必要があります。そこで今回は、簡単にWebアプリケーションの脆弱性に対する攻撃を実践できる方法を紹介します。
WebGoatについて
WebGoatとは、OWASPプロジェクトの一つであり、Webアプリケーションの脆弱性を学習・実践するためのWebアプリケーションです。
↓OWASP WebGoat
https://owasp.org/www-project-webgoat/
環境構築
Docker Desktop for Windowsを利用して、ローカル上に環境を構築します。
[手順①]Docker Desktop for Windowsをインストールします。
Docker Desktop for Windowsは以下のサイトからダウンロードできます。
https://www.docker.com/products/docker-desktop
詳細なインストール方法については記載を割愛しますので、公式または他サイトなどの情報を参考になさってください。
[手順②]Dockerのインストールが完了したら、WebGoatのイメージをダウンロードします。
docker pull webgoat/webgoat-8.0
[手順③]ダウンロードしたイメージからコンテナを起動します。
docker run -p 8080:8080 -t webgoat/webgoat-8.0
[手順④]コンテナが起動したら、以下のURLからWebGoatにアクセスします。
http://localhost:8080/WebGoat/login
[手順⑤]初回利用時のユーザ登録を行い、ログインすることでWebGoatが利用可能になります。
WebGoatは全て英語で記載されていますので、英語の自信がない場合は、翻訳ツールなどを活用しながら学習を進めるとよいでしょう。
(ちなみに私も英語が苦手なので、DeepL翻訳が必須でした。)
それでは実際にどんな脆弱性があるのか実践してみましょう。
今回取り上げるのはSQLインジェクションの項目です。
SQLインジェクション
SQLインジェクションでは、以下の3つのセクションが用意されています。
- SQL Injection (intro)
- SQL Injection (advanced)
- SQL Injection (mitigation)
今回は、SQL Injection (intro)のセクションについて見てみます。このセクションでは、前半部分にSQL構文の基本的な解説があり、後半部分にSQLインジェクションについての解説があります。
それでは、SQL Injection (intro)のセクションのP10の問題にチャレンジしてみます。
この問題では、あらかじめ下記のSQL文が与えられており、「Login_Count」と「User_Id」の入力項目に値を入力し、user_dataテーブルから全てのデータを取得できれば正解となります。
"SELECT * FROM user_data WHERE login_count = " + Login_Count + " AND userid = " + User_ID;
user_dataテーブルから全てのデータを取得するには、WHERE句をうまく無効化できればよいので、WHERE句の条件文が常に真になるように値を入力します。
SELECT * From user_data WHERE Login_Count = 1 and userid= 1 or 1=1
user_dataテーブルのデータを取得することができました。
このようにWebGoatでは実際に手を動かしながら脆弱性を試すことができます。
まとめ
今回はDockerを利用したため、作業時間10分程度で環境を構築することができました。
(時間があれば、一から全部構築してみるのもよい勉強にはなると思います。)
また、SQLインジェクションについて少し紹介しましたが、WebGoatにはSQLインジェクション以外にも、XSS(クロスサイトスクリプティング)やディレクトリトラバーサルなど、OWASP TOP10のほとんどの脆弱性を試すことができますので、Webセキュリティを学ぶ際に活用してみてはいかがでしょうか。