1. ホーム
  2. データベース
  3. その他のデータベース

データベースのSQLインジェクションの原理と簡単な紹介

2022-01-22 17:04:26

1、SQLインジェクションが発生する理由

SQLインジェクションのプロセスは非常に目的意識が高く、主なターゲットはWebアプリケーションのバックエンドデータベースで、データベースから情報を取得し、より高い権限を付与するために、まずデータベースを破壊し、次にデータベースサーバーを破壊するのだそうです。

2. SQLインジェクションの原理

まず、Webサイトのアーキテクチャを理解することが大切です。

ウェブ ウェブアーキテクチャ のウェブサイト・アーキテクチャは 全体の構成は ウェブ サーバー側、クライアント端末、通信プロトコルの3つが主な構成要素です。

表現層は、ユーザーが対話するためのインターフェースです。ユーザーは利用時に表現層に要件を入力し、その情報はサーバーに送信され、サーバーはデータベースに送信し、サーバーはバックエンドのフィードバック結果をユーザーに返します。

論理層は、表現層への要求に対する答えと、データ層へのパラメータ要件を提供します。

データ層は、主にユーザーから送信されたデータを含むクエリに応答します。

をベースにしています。 ASP 説明のための例としてのウェブサイト SQL インジェクションの攻撃原理 . ウェブ このページはユーザー名の入力を受け付けます。 (ユーザー名) とパスワード ( pwd ) を生成し、動的に SQL ステートメントを使用して、ユーザー名 ( 使用名 ) とパスワード ( pwd ) をデータベースに問い合わせる。 ユーザー テーブルにアクセスし、クエリに成功すると、ユーザーレコードが返され、そのユーザーは正常にログインされます。

で、以下のようなSQL文が生成されます。

    sql="select*from users where name ="'&username&"' and pwd="'&userpwd&" "'(ユーザー名とユーザーIDを入力してください。

    攻撃者がログインページで以下のようなデータを入力した場合。

    ユーザー名:'or'1'='1 or'1'='2'(英語) 

    パスワード:000(任意)

    すると、SQLクエリ文は次のようになります。

    select*from users where name ="or' 1'=' 1' or '1'='2' and pwd='00'

    whereの後の文は、name ="or'1'='1' or'1'='2' and pwd='0'です。

false or true or false and false という形式の論理文に変換され、最終結果はtrueになります。

最終結果が真であれば、SQL文のクエリ結果も真になる、つまり

そこで 上記のクエリ文は、テーブル内のすべてのユーザーレコードを返すので、攻撃者は最初の 1 ユーザーでログインしてください。

攻撃者がログインページで以下のような入力データを指定した場合。

    ユーザー名:';drop table users a

    パスワード: 000(任意)

データを送信した後、ログインに失敗しましたが、結果はそれだけでなく、データベーステーブルの ユーザー が削除されると、その どのユーザーもログインできなくなります。

3. SQLインジェクション攻撃プロセス

プロセス

チェック ウェブ に存在するページ。 SQL インジェクト 特殊なビルドを行うための脆弱性 SQL インジェクト ポイント ;

次に これらの特殊なインジェクションポイントを ウェブ ページに動的にパラメータを渡すことができるようになりました。 SQL 構文の組み合わせは、データベースに動的に渡されます。 ;

では データベースの種類によって、異なる処理が適用されます ;

最後に 実行 SQL ステートメント 攻撃者の望むゴールを達成するために。

インジェクションポイントの決定 .

パラメータを渡された動的なWebページにインジェクションの脆弱性が存在するかどうかを判断します。通常の判定方法は、パラメータが渡されたところに "and 1=1" "and 1=2" と入力することです。

結果 別々のページが返され、インジェクションの脆弱性が存在することがわかります。

データベースの種類を決定します。

関数によるデータベースタイプの決定:組み込み関数の違い。

例えば、len と length using と len('a')=1 は、mssql や mysql では通常のページを返しますが、その逆は oracle や informix かもしれません。 .

-- そして # この2つのコメント シンボル

MSSQSLは--、MYSQLは#、ACCESSはコメントをサポートしていません。

HTTP://xxx.xxx.xxx/abc.asp?p=YY--.

HTTP://xxx.xxx.xxx/abc.asp?p=YY#

SQL Server SA ユーザー権限

xp_cmdshell拡張プロシージャは、コマンド文字列をオペレーティングシステムのコマンドとして実行し、すべての出力をテキスト行として返します。xp_cmdshell は任意のオペレーティングシステムコマンドを実行できるため、SQL Server の管理者アカウント (例: sa) が侵害されると、攻撃者は xp_cmdshell を使用して SQL Server でオペレーティングシステムコマンド (例: create system administrator) を実行できるようになります。

データベースにおけるSQLインジェクションの原理と処理についての説明は以上となります。SQLインジェクションの原理とプロセスの詳細については、スクリプトハウスの過去の記事を検索するか、次の記事を引き続き参照してください。