web-dev-qa-db-ja.com

SQLインジェクション-ページコンテンツからのデータベースデータの抽出

私は誰かが助けてくれることを望んでいる質問があります。

私はSQLインジェクションツールを最初から作成しているところです(SQLマップなどの優れたツールがすでに世に出ていることは承知していますが、これは最初から作成する必要があります)。

私が抱えている問題:

手動の場合、SQLインジェクションを実行して、次のような文字列を使用してテーブル名や列名などを決定します。

www.vulnerable site.net/articles.php?id =-1 union select 1,2,group_concat(column_name),4 from information_schema.columns --

または

www.vulnarable site.net/articles.php?id =-1 union select 1,2,table_name,4 from information_schema.tables --

ページを見て、ページコンテンツで返される列名を読み取るだけなので、テーブル名/列名を簡単に特定できます。

しかし、これはどのように自動化された方法で行うことができますか?

自動化の方法でこれを行うのは、SQLインジェクションが実行されたときに返されるページの何がテーブル名/列名であるかをツールがどのように認識するので、はるかに困難です。

ツールがページ名のどの部分をテーブル名/列名として抽出するのかをツールが認識できるようにするには、これを行う最も信頼できる方法は何でしょうか?

たとえば...カンマで区切られた文字列のページコンテンツを解析/検索して、インジェクションによって出力されたテーブルと列の名前を取得できますか?それを行うためのより信頼できる方法はありますか?

これに対するあなたの助けは大いに感謝されます、ありがとう

5
yonetpkbji

最も簡単な方法は、ブラインドSQLインジェクションを使用することです。クエリの実行にかかる時間に応じて、質問の正誤がわかります。ブラインドSQLインジェクションのエクスプロイトは、悪用されるSQLインジェクションのタイプ(ブラインド、非ブラインド、選択、挿入、更新、削除など)に関係なく機能するため、これも最も柔軟なアプローチです。

別のアプローチは、列の数をブルートフォースにした状態で、ページ上の可視フィールドを特定することです。ページ上のこの場所が見つかったら、この時点からデータを取得できます(非ブラインドインジェクションの場合、sqlmapは次のように実行します)。

www.vulnerable site.net/articles.php?id =-1 union select 'dsjhfsjhfdf'
www.vulnerable site.net/articles.php?id =-1 union select 'dsjhfsjhfdf','sfjufewjfef'
...

これはMySQLでうまく機能しますが、postgresqlのような一部のデータベースタイプでは、union selectの列は同じタイプでなければなりません。したがって、データベースもブルートフォースにする必要があります。

3
rook

最も簡単な方法は、正当な入力とインジェクションを使用してページにアクセスし、違いを確認することです。結果ではないコンテンツがわかっていて、期待される結果の形式がわかっている場合は、正規表現やその他の解析エンジンなどで詳細を見つけるのはそれほど難しくありません。

確かに、ページの読み込みごとに異なる可能性のある他の動的要素(広告など)は、より複雑な計画を必要とする問題を引き起こす可能性があります。

0
AJ Henderson