Zenn
🍇

【セキュリティ】SQLインジェクションとは(備忘録)

2023/02/19に公開

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

ログインするとコメントできます