ここのところ、いくつかのSQL Injectionツールについて調べていました。今日はその結果を日記に書いてみようと思います。
はじめに
SQL Injectionツールとは
SQL Injection脆弱性の発見と、発見した脆弱性を突いてのDB内情報の取得を行なうためのツールです。
ただし、多くのツールでは「脆弱性の発見」はおまけで、後者のDB内情報の取得に主眼を置いています。一般的には、汎用のWeb脆弱性スキャナなどで脆弱性を見つけて、その脆弱性に対してこの日記に書いているようなツールを使って情報を取得するという使い方をすることが多いでしょう。
SQL Injectionツールは、いわゆるHackingツールです。脆弱性検査を行なう者か、さもなければCrackingを行なう犯罪者が使うくらいで、一般のWeb開発者やユーザの人が使う必要に迫られることは無いでしょう。
ツールの使用に際しては、ツールがツールを使用する側にとって安全なものであるか(例えば悪意のあるコードが含まれていないか)を自らの目で確認する必要があります。同時に、使用される側にとって安全であるか(例えばツールが危険なSQL文を発行したりしないか)も見極める必要があります。
またいうまでもありませんが、ツール作者の定める使用条件と、法律に従って使用する必要があります。
調査対象
以下の15種類です。
1. sqlmap
2. SQLBrute
3. Absinthe
4. ISR-sqlget
5. NGSS SQL Injector
6. SQL Injection Brute-forcer
7. SQL Power Injector
8. OWASP SQLiX
9. sqlninja
10. BobCat
11. SQLIer
12. Sqlbftools
13. Automagic SQL Injector
14. Blind SQL Injection Perl Tool
15. SQL Injection Pen-testing Tool
少し前に出たsecurity-hacks.comと数は同じですが、少しだけ顔ぶれは違います。
基本的にOracleに対して使用できるものについては、詳細を調べています。Oracleで使えるものは、上記の1〜8です。
調査結果のまとめ
一覧表にまとめたものが以下です。
- Oracle対応のツール(1-8)
↑割と詳細まで調べています。 - Oracle非対応のツール(9-15)
↑ツールが対応するDBMSくらいしか調べていません。 - 上記表の見方
↑上記の2つの表の説明です。
Oracle対応の8ツールについては、擬似的な環境(Java+Oracleのやられ役のアプリケーション)で実際に使って試してみました。
その感想を以下に書きます(あくまでもOracle向けの機能だけを使って評価をしていることにご注意下さい)。
sqlmap(個人的な評価=B)
SQLBrute(個人的な評価=C)
- サイト上に割と判り易い説明がある。
- DBMSのFingerprint機能は無い。
- 基本的にはMSSQL用のツール。MSSQLではTiming手法も利用できるらしい。
- AND ... -- みたいな文字列を挿入する。挿入箇所が括弧の中の場合などは、ツールの使用者が閉じ括弧を足すなどの面倒をみなければならない。
- 最初に OR 1=1 -- みたいな文字列を挿入するので、更新系のクエリだと危険。
- Blindの手法が独特。結果、7bitの1文字を特定するのに数十回リクエストしていて、極めて効率が悪い。また一部の記号が含まれている文字列は取得できない問題がある。
- 現状では、実用レベルに達していないと思う。
Absinthe(個人的な評価=A)
- GUIが判りやすく、また非常に簡単な操作でスキーマやDBデータが取得できる。
- ただし、ツールが想定しないGUI操作をすると変なエラーが発生することもある。
- DBMSのFingerprint機能は無い。
- ASCII関数の返り値が16bitだと仮定している。UTF16環境を想定しているのだろうが、ASCII以外のデータではうまくいかず。
- 16bit=一文字特定するのに常に16回アクセスする。他の多くのツールは7bitか8bitに決め打って7〜8回のリクエストで1文字特定するので、それと比べると非効率。
- Injection Options>Compared Toleranceを調整しないとうまく動かない場合がある。
ISR-sqlget(個人的な評価=C)
- 使い方が判りにくい。
- UNIONだけしか機能が無いが、UNIONのカラム数や閉じ括弧の調整などはツールの使用者がしなければならない。
- また、UNIONしたデータがレスポンス中に出力される場所などを、ツールの使用者が細かく指定しなければならない(そのやり方もわかりにくい)。
- 色々とツールの使用者がお膳立てをしてやって、やっと動かせるようになる(DBMSのFingerprint機能も無い)。しかしバグがあるのか結局うまく動かせなかった。
- 現状では、実用レベルに達していないと思う。
NGSS SQL Injector(個人的な評価=B)
SQL Injection Brute-forcer(個人的な評価=B)
SQL Power Injector(個人的な評価=B)
- PDFの数十ページのマニュアルがあるが、肝心な部分の記述が少なかったりする。動かせるようになるまで時間が掛かる。
- マニュアルにUNIONなど色々と書いてあるが、Blindの機能だけあると考えてよい。
- MSSQLではTiming手法が使えるらしい。
- ISR-Sqlgetに似ていて、ツールの利用者がお膳立てをする範囲が大きい(DBMSのFingerprint機能も無い)。
- やり方を理解してお膳立てをしてやれば、大体何でもできる。例えばINSERT VALUES句内の脆弱性からBlindでデータを引き出すなど。
- NGSS SQL Injectorと同じく、DBデータを引き出すための機能が少ない(1行1カラムを返すクエリを指定すると、そのクエリの実行結果を取得してくれる機能はある)。
OWASP SQLiX(個人的な評価=C)
- まあまあ判りやすい説明がWeb上にある。
- Blind、ErrorMsg、UNIONが使えるが、UNIONとErrorMsgはMSSQLだけ。
- 等価なSQLを挿入すると同じレスポンスが返ってくることを前提にしている。例えば、param1=xxx と param1=xxx' AND '1'='1 では全く同じレスポンスが返ってくることが前提となっている。
- 他のツールとは違い、この前提を変える方法がないため、脆弱性がありながらも攻略できないケースが出てくる。やや自由度が低いツール。
- NGSS SQL Injectorと同じく、DBデータを引き出すための機能が少ない(1行1カラムを返すクエリを指定すると、そのクエリの実行結果を取得してくれる機能はある)。