データベースのSQLインジェクションの原理と簡単な紹介
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インジェクションの原理とプロセスの詳細については、スクリプトハウスの過去の記事を検索するか、次の記事を引き続き参照してください。
関連
-
SQL修正構文文の概要
-
Navicat 15アクティベーションチュートリアル
-
データベースシステムの構造詳細説明 3レベルのスキーマ構造
-
Navicat for SQLite インストールチュートリアル(インストールキット付き
-
ナビカット15のインストールチュートリアルを超詳しく解説(一番信頼できるのはこれ)
-
JMeterデータベースクエリ操作手順詳細説明
-
データベースキャッシュの最終的な整合性に関する4つのオプション
-
データベース管理ツール「Navicat」と「DBeaver」を一挙に読む
-
NavicatでMySqlデータベースへの接続が遅い問題
-
Navicat Premium 12でOracleに接続する際にoracle library is not loadedと表示される問題の解決
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JetBrains DataGripのインストールと使用に関する詳細なチュートリアル
-
MySQLとRedisがデータの一貫性を確保する方法について説明します。
-
DeepinV20 Mariadbのクイックインストールを詳しくご紹介します。
-
Dbeaverを使ったHiveへのリモート接続の詳細方法
-
Navicat Premium 15データベース接続フラッシュバックの問題を解決する
-
外部キーの関連付けを行う SQL 文の完全な例
-
Navicat Premiumを使用して、データベースのテーブル構造情報をExcelにエクスポートする方法
-
SQLリレーショナルモデルの知識まとめ
-
タイプインジェクションとコミットインジェクションのSQLインジェクションチュートリアル
-
ユニークSQLの原理と応用を解説