SQL インジェクションを使用/活用するにはどうすればよいですか? 家族全員のバケツがここにあります~

SQL インジェクションは、 OWASPが発行する脆弱性ランキングのトップ 10 で非常に上位にランクされている脆弱性の 1 つです攻撃者はSQL インジェクションの脆弱性を悪用して、不正な操作を実行し、被害者のデータベースに悪意のあるデータを追加する可能性があります。

攻撃者は、SQL インジェクションの脆弱性を利用して、認証をバイパスし、機密データにアクセスし、さらには Web サイトのデータを改ざんする可能性がありますたとえば、ハッカーが SQL インジェクション攻撃を使用して電子商取引 Web サイトの注文記録を改ざんし、顧客が受け取るべきではない商品を受け取ったとします。

1. SQL インジェクションとは何ですか?

SQL インジェクションは、ユーザー入力を適切にフィルタリングまたは検証しない Web アプリケーションの脆弱性を悪用して、悪意のある SQL ステートメントをアプリケーションのバックエンド データベースに送信し、それによって認証を回避し、機密データへのアクセス、データの改ざん、およびその他の悪意のある目的を達成する攻撃です。
SQL インジェクション攻撃は、Web アプリケーションのフォーム送信、URL パラメーター、Cookie、HTTP ヘッダーなどを介して悪意のある SQL ステートメントをアプリケーションに送信するなど、さまざまな手段を通じて実装できます。

デモをしてみましょう: usernamepassword
の 2 つのフィールドを含むログイン フォームがありますユーザーのパスワードが正しいかどうかを確認するために使用されます。

SELECT * FROM users WHERE admin = 'admin' AND userpwd = 'pwd123'

このSQLをバックエンドに送信し、 「 OR 1=1 - 」のようなSQL文を追加すると、全体の構成はこうなります!

SELECT * FROM users WHERE admin= '' OR 1=1 -- ' AND userpwd= 'pwd123'

このうち – は SQL コメント記号を表し、ステートメントの残りの部分をコメントアウトできます。したがって、この例では、クエリ ステートメントは実際には空のユーザー名または 1=1 を含むユーザー レコードのみをクエリし、パスワード検証部分を無視するため、攻撃者は認証を回避して管理者としてシステムにログインできます。

: これは単純な SQL インジェクションの例です。SQL インジェクションの原理と害を説明するためにのみ使用されています。実際の攻撃には使用しないでください。

2. SQL インジェクションの種類

(1)文字ベースの SQL インジェクション: 攻撃者は悪意のある文字を入力ボックスに挿入し、アプリケーションに悪意のある SQL ステートメントを生成させて機密情報を取得させます。

SELECT * FROM users WHERE username = 'admin' OR '1'='1';

(2)数値 SQL インジェクション: 攻撃者は悪意のある数値を入力ボックスに注入し、アプリケーションに悪意のある SQL ステートメントを生成させて機密情報を取得させます。

SELECT * FROM products WHERE product_id = 1 OR 1=1;

(3)間違った SQL インジェクション: 攻撃者は、機密情報を取得するために意図的に作成された悪意のある SQL ステートメントを送信することにより、アプリケーションでエラーを引き起こします。

SELECT * FROM users WHERE username = 'admin' AND 1=1';

(4)ユニオンクエリの SQL インジェクション: 攻撃者は、悪意のある SQL ステートメント内で UNION 演算子を使用して、あるクエリと別のクエリを接続してデータを取得します。

SELECT * FROM users WHERE username = 'admin' UNION SELECT cc_number, cc_expiry_date FROM credit_cards;

(5)ブール ブラインド SQL インジェクション: 攻撃者は、ブール値 (True または False) のみを返す悪意のある SQL ステートメントを構築することにより、機密情報を取得します。

SELECT * FROM users WHERE username = 'admin' AND substring((SELECT @@version), 1, 1) = '5';

(6)タイムブラインド SQL インジェクション: 攻撃者は、実行中に遅延するように悪意のある SQL ステートメントを構築することにより、機密情報を取得します。

SELECT * FROM users WHERE username = 'admin' AND if(SLEEP(5), 1, 0);

(7)スタック SQL インジェクション: 攻撃者は、悪意のある SQL ステートメント内の複数のクエリ ステートメントを使用してデータベース内で複数のクエリを実行し、機密情報を取得します。

SELECT * FROM users WHERE username = 'admin'; INSERT INTO users (username, password) VALUES ('hacker', 'password');

(8)エラー報告 SQL インジェクション: 攻撃者は、実行中にエラーを引き起こす悪意のある SQL ステートメントを構築することで機密情報を取得します。

SELECT * FROM users WHERE username = 'admin' AND extractvalue(1, concat(0x5c, (SELECT @@version)));

これらの例は、さまざまな種類の SQL インジェクションを示すためにのみ使用されており、実際のアプリケーションは特定の状況に応じて変更およびカスタマイズする必要があることに注意してください。同時に、これらのコードはデモンストレーションのみを目的としており、違法な攻撃やテストには使用しないでください。

3. SQL インジェクションの一般的なバイパス方法

SQL インジェクション攻撃者は、アプリケーションのセキュリティ保護をバイパスするためにさまざまな方法を試みます。一般的なSQL インジェクション バイパス方法をいくつか示します。

1. スペースとコメント文字を使用してバイパスします (キーワードとパラメータの間にスペースを追加する、コメント記号を使用するなど)。 2. 文字
エンコーディングを使用してバイパスします (Unicode エンコード、HTML エンコードなどを使用します。)
3. 特殊なコードを使用します。バイパスする文字(特殊文字の組み合わせ、URL エンコーディングなどの使用)
4. ブラインド インジェクション バイパスの使用(ブール ロジックに基づくブラインド インジェクション、時間遅延など)
5. 高度な SQL インジェクション バイパスの使用(次のような使用)マルチステートメントインジェクション、セカンダリインジェクション、スタックインジェクションなどの技術

以下の内容には著作権および知的財産権が含まれるため、関連する法規制を遵守するため、記事内容を引用する場合には出典および著者情報を明記してください。

この記事は学習とコミュニケーションのみを目的としており、商業目的で使用することはできません。記事内の見解、意見、提案は著者単独のものであり、このサイトの立場を表すものではありません。著者およびこのサイトは、この記事で言及されているテクノロジー、方法、プロセス、ツールの使用から生じるいかなる結果についても責任を負いません。これらのテクノロジー、方法、プロセス、ツールを使用する前に、法的責任とリスクを理解し、適切なセキュリティ対策を講じてください。

おすすめ

転載: blog.csdn.net/qq309000281/article/details/130295602