SQL インジェクション攻撃の原理
悪意のあるユーザーは、クエリ リクエストの送信プロセス中、およびクエリ リクエストの送信時に、リクエスト コンテンツに SQL ステートメントを挿入します。同時にプログラム自体 悪意のあるユーザーが挿入した SQL ステートメントをフィルタリングせずにユーザー入力コンテンツを過度に信頼し、その結果、SQL ステートメントがサーバーによって直接実行されます。
SQL インジェクション攻撃の分類
(1) インジェクションポイントの分類
数値型のインジェクション文字列型のインジェクション
(2) 送信方法の分類
GET インジェクション POST インジェクション COOKIE インジェクション HTTP インジェクション
(3) 情報取得方法の分類
ブールベースのブラインドインジェクションベースエラーレポートに基づくタイムブラインドインジェクション
SQL インジェクション攻撃ケース:
1. 記事のインジェクションケースを表示:
インジェクションを表示特定の記事の場合 URL パラメータが ?id=1
の場合、コマンド ?id=1 または 1=1 を挿入すると、データ テーブル全体のすべての記事を一覧表示できます。
表示ユーザーが次のような user_id を介してアクセスされている場合:? uid=1
コマンド:?id=1 または 1=1 を挿入すると、ユーザー テーブル全体のすべてのレコードを表示できます
SQL コマンドは次のとおりです:
?id=1 を渡す SQL コマンドは次のとおりです: select * from Article where id=1. このステートメントは 1 つの構造をクエリします
?id=1 および 1=1 を渡す SQL コマンドは次のとおりです: select * id=1 または 1=1 の記事より、このステートメントはテーブル全体のレコードをクエリします
2. ユーザー ログイン インジェクションのケース:
ログイン フォームには user_name フィールドがありますクエリ ステートメントは次のとおりです: select * from users where Nickname='{user_name}'
user_name テキスト ボックスに入力できます: (' または 1='1)。これにより、挿入された SQL コマンドがselect * from users where user_name='' または 1='1' を構築すると、システムに簡単に入ることができます。
3. SQL インジェクション テーブルの推測:
ログイン ページのユーザー名フィールドに入力します: (' または 1=(select count(0) from t_porg_document) または 1='1),挿入された SQL コマンドは次のように構成できます: select * from users where user_name='' or 1=(select count(0) from recharge) or 1='1'
このようにして、recharge テーブルが正しいかどうかを推測できます。存在する場合、ステートメントは通常どおり実行されますが、存在しない場合はエラーが報告されます。
テーブル名を推測した後、次のようにデータ テーブルを追加、削除、変更、確認できます。
ログイン ページのユーザー名フィールドに、('; select * from users where user_name=''; delete from users;
セミコロンを追加することで、任意の追加、削除、変更、クエリ SQL 文を構築できます。 、データベース全体が攻撃者によって自由に操作される可能性があります。
PHP 中国語 Web サイトには、無料の SQL チュートリアル が多数あり、誰でも学習することができます。
以上がSQLインジェクション攻撃の原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。