web-dev-qa-db-ja.com

SQLインジェクション-UNION SELECTと「キーワード」を返し、悪用可能な列を見つける

悪用可能な列を見つけるためのスクリプト化された/自動化された方法でUNION SELECTの使用に関して誰かが助けてくれると期待している問題があります(ORDER BYを使用して列の数をすでに見つけています)

これを手動で行う

http://www.site.com/index.php?id=-2 UNION SELECT 1,2,3,4,5,6,7,8--の使用ページに表示される列番号を手動で表示して悪用可能な列を見つけることができることは承知していますが、スクリプトを使用して応答コンテンツまたはページソースからこれらを解析することは非常に困難です自動化された方法で、明らかにされた悪用可能な列を見つける(誰かがこれを行うことができる信頼できる方法を知っていない限り)。

スキャナー/ファザーを使用してこれを自動化する

いくつかのスキャナー/ファザーとsqlインジェクションツールで、UNION SELECTを取得して、特定の 'keyword'を返すリファレンスをいくつか見つけました。この 'keyword'がresponse-content ....で見つかった場合、この特定の列が悪用可能であることを示すページ.

例:

http://www.site.com/index.php?id=-2 UNION SELECT "EXPLOITABLE",2,3,4,5,6,7,8--   <-- The Word EXPLOITABLE did not appear on the page content so this column is not exploitable
http://www.site.com/index.php?id=-2 UNION SELECT 1,"EXPLOITABLE",3,4,5,6,7,8--   <-- The Word EXPLOITABLE did not appear on the page content so this column is not exploitable
http://www.site.com/index.php?id=-2 UNION SELECT 1,2,"EXPLOITABLE",4,5,6,7,8--   <-- The Word EXPLOITABLE **DID** appear on the page content so this column **IS** exploitable
http://www.site.com/index.php?id=-2 UNION SELECT 1,2,3,"EXPLOITABLE",5,6,7,8--   <-- The Word EXPLOITABLE did not appear on the page content so this column is not exploitable
http://www.site.com/index.php?id=-2 UNION SELECT 1,2,3,4,"EXPLOITABLE",6,7,8--   <-- The Word EXPLOITABLE did not appear on the page content so this column is not exploitable

それが最後の列番号8に到達するまで続きます。

「キーワード」は、通常はウェブページでは見られない単語であるため、EXPLOITABLE、InJeCtAbLE、AASSDDFFGG(または任意の変数)などの偽のポジティブが防止されます。

私が抱えている問題:

私はSQLインジェクションツール/ファザーを書いているので、これらの悪用可能な列を自動化/スクリプト可能な方法で見つけるための最良の方法を探しています。最も論理的な方法は、「キーワード」を使用して上記で説明した方法のようです(誰でもできる場合を除く)より良い方法を提案する)

これは、UNION SELECTと 'キーワード'を使用して各URLをGETし、応答コンテンツを格納して、使用した変数 'keyword'が応答コンテンツに表示されるかどうかを確認できるためです。そうである場合、それが悪用可能であることがわかり、そうでない場合は、スクリプトがすべての列番号でこれを試行するまで、次のURLに移動します。

これは、UNION SELECTを使用して悪用可能な列を特定するための最良/最も信頼できる方法でしょうか、それとも使用できるより良い方法を提案できますか?

6
yonetpkbji

これはisを行うための最良の方法の1つですが、エラーベースの注入の問題に注意してください。各列は整数の結果にバインドされており、文字列はキャストエラーを引き起こすため、すべての結果がランダムなトークンを出力に表示することがあります。そのような場合、それを検出する唯一の方法は、出力で典型的なSQLサーバー/ MySQL/PostgreSQLエラーメッセージを探し、ページ内のトークンの別のcountを探すことです。

2
Polynomial