誰かがSQLインジェクションを使用したDBMSのフィンガープリントに関して、スクリプト化された/自動化された方法で正確かつ再割り当てしてDBMSを決定するのを手伝ってくれると期待している問題があります。
私はSQLインジェクションツールを最初から作成しているところですが、DBMSを確実にフィンガープリントする方法/方法を見つけるのに問題があります。 (私はすでに多くの優れたツールが存在することを認識していますが、このプロジェクトではゼロから作成する必要があります).
これを手動で行う:
DBMSを手動でフィンガープリントすることは、ページの変更と動作を簡単に観察できるため、はるかに簡単ですが、スクリプト/プログラムを使用してこれを自動化しようとすると、ページの動作を監視することがはるかに難しくなります。
スキャナー/ファザーを使用してこれを自動化する:
返されるエラーメッセージを分析して、特定のDBMSに関連する特定のエラーメッセージが含まれているかどうかを確認する方法が1つ考えられることは承知していますが、これが不可能な場合は、これを行う別の方法。
私が抱えている問題:
文字列連結メソッド、例えば...
これは、異なるDBMSが異なる演算子で文字列連結を処理するという事実を利用しています。連結は、次のような異なるDBMSで実行されます。
MS SQL : 'string1' + 'string2'
MYSQL : CONCAT('string1','string2')
Oracle : 'string1' || 'string2' or CONCAT('string1','string2')
http://example/index.php?id=1+UNION+SELECT+NULL, CONCAT('sql',+'injection'),NULL,NULL <-- MYSQL
http://www.example.com/abc.php?id=1 AND 'str1str2' ='str1'+'str2' <-- MSSQL
http://www.example.com/abc.php?=1 AND 'str1str2'=CONCAT('str1','str2') <-- MYSQL
http://www.example.com/abc.php?=1 AND 'str1str2'=CONCAT('str1','str2') <-- Oracle
http://www.example.com/abc.php?=1 AND 'str1str2'='str1'||'str2' <-- Oracle
このメソッドを使用して、ページに文字列が出力されているか、ページが変更されているか、エラーが生成されているかなどを確認できます。
しかし、いくつかのテストから、これらの連結メソッドをいくつか実行しましたが、いくつかのDBMSで機能するようです(たとえば、+
記号はMSSQLとMYSQLの両方で機能します。これは、どのDBMSであるかを明確に判断しようとする場合には役に立ちません。
別のSQL方言を使用することは、もう1つの可能な方法のようです。参照 http://digitizor.com/2009/03/27/sql-injection-2-fingerprinting/ ですが、この方法に関する情報はほとんど見つかりませんか?
自動化/スクリプト化された方法でDBMSのフィンガープリントを作成する最良/最も信頼できる方法を知っていますか?
あなたの助けは大いに感謝されます、ありがとう
フィンガープリンティングを自動化したい場合は、複数のインジケーターを使用することをお勧めします。
私はそれらのタイミング攻撃が嫌いでも、それらは時々非常に便利です...ここで別のSQL方言に関する別のヒント...
(MSSQL) http://www.example.com/abc.php?id=1 ; waitfor delay '0:0:10'-
(MySQL) http://www.example.com/abc.php?id=1 ; if 1 = 1 BENCHMARK(1000000000、MD5(1))
(Postgre) http://www.example.com/abc.php?id=1 ; pg_sleep(10)を選択します。
SQLMap のフィンガープリントをどのように検討しましたか?それはそれを使用すると言います:
エラーメッセージ、バナー解析、関数出力の比較、MySQLコメントインジェクションなどの特定の機能。