おさらいnote ~第4回 SQLインジェクション(2)~
こんばんは。インターンの合間を縫って記事を書いております。宮下です。
SQLインジェクションの二回目です。今回はブラインドSQLインジェクションをおさらいしていきたいと思います。
*この手法はインターネット上で実行できてしまう可能性があります。場合によっては犯罪となってしまうのでローカルな環境で実施するようにしてください…!
それでは、Goooo!
ブラインドSQLインジェクションって
SQLインジェクションについては前回記事をまとめているのでそちらをご覧ください、!
それを踏まえて進めますが、ブラインドSQLインジェクションとは、LIKE文を使って情報を推測したり、検索したりすることです。
LIKE文て何
LIKE文とは、SQLで使用するコマンドの一種です。使用すると、対象の列について文字列検索を行うことができます。
構文→SELECT 列名 FROM テーブル名 WHERE 列名 LIKE '検索文字';
検索文字はさらに条件を指定する事ができ、これをワイルドカードといいます。
%→0文字以上の任意の文字列(例:’b%’→bで始まる文字列、'p%d'→pで始まりdで終わる文字列)
_→任意の文字列('d_')
このLIKE文を使い、前回も行った認証回避を再度行ったり、パスワードの全部の文字列を割り出すことができます。
どうやって攻撃してる、?
Aさんのuser名がapple,passが123456だとします。
1回目:where user = 'apple' and pass = '' or pass like '1%' →認証回避
2回目:where user = 'apple' and pass = '' or pass like '12%' →認証回避
:
6回目:where user = 'apple' and pass = '' or pass like '123456%' →認証回避
7回目:全入力パターンで失敗 →ということはパスワードは123456
where user = 'apple' and pass = '123456' →認証回避
以上のように一文字成功したら次の一文字に進む…という仕組みになっています。手でやろうとするとかなりの時間がかかりそうですね…
終わりに
最後まで読んでいただきありがとうございました!
私も習いたてなので間違っている箇所があれば訂正していただければ幸いです!
次はメールに関するインジェクションの手法をピックアップしたいと思います!よろしくお願いします~~
追記
パスワードの文字数が知りたいときは
' or (SELECT length(pass) FROM user WHERE id = 'admin') > 文字数 --
とUser名のところに入れてみてください!
この記事が気に入ったらサポートをしてみませんか?