技術共有

SQLインジェクションの二次インジェクション

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

二次噴射

セカンダリ インジェクション脆弱性は、Web アプリケーションに広く普及しているセキュリティ脆弱性の一種です。プライマリ インジェクション脆弱性と比較すると、セカンダリ インジェクション脆弱性は検出が困難ですが、攻撃力はプライマリ インジェクション脆弱性と同等です。

ハッカーは、ブラウザまたはその他のソフトウェアで処理するために、HTTP データ パケット リクエストをサーバーに送信する形式でデータを構築します。送信されたデータ パケット リクエストには、ハッカーが構築した SQL ステートメントまたはコマンドが含まれる場合があります。
サーバー側アプリケーションは、ハッカーによって送信されたデータ情報を通常はデータベースに保存します。保存されたデータ情報の主な機能は、アプリケーションが他の機能を実行し、クライアントの要求に応答するために元の入力データを提供することです。
ハッカーは、最初とは異なる 2 番目の要求データ メッセージをサーバーに送信します。
サーバーがハッカーによって送信された 2 番目のリクエスト情報を受信した後、リクエストを処理するために、サーバーはデータベースにすでに保存されているデータ情報を照会して処理し、最初のリクエストでハッカーによって作成された SQL ステートメントまたはコマンドを実行します。ターミナル環境で実行されるサービスになります。
サーバーは実行結果データ情報を返します。ハッカーは、返された結果データ情報を使用して、セカンダリ インジェクションの脆弱性が悪用されたかどうかを判断できます。

要約すると、2 番目の挿入は、データベースにデータを保存するときにデータをフィルタリングできなかったことに起因します。まず、作成された特殊文字リクエストがデータベースに保存されるように送信され、次に 2 番目のリクエストが送信されるときに、その文字が送信されます。関数が初めてデータベースに送信され、実行される新しい SQL ステートメントが形成されます。sqli-labs レベル 24 を例に挙げます

sqli-labs 少ない-24

1. 以下をクリックしてユーザー登録を行ってください


ここでの登録ユーザー名は admin'# です

         

この時点でデータベースを確認すると、登録ユーザーが保存されており、管理者のパスワードは DDD です。

2. 登録したアカウントでログインし、パスワードをcccccに変更します。

このとき、パスワードが正常に変更されたことを示すメッセージが表示されます。

この時点で、admin のパスワードは ccccc に変更されていますが、登録ユーザー admin'# のパスワードは変更されていないことがわかりました。

脆弱性の原因

1. ユーザー登録時に「'」や「#」などの特殊文字を使用できます。

2. パスワード変更ページのソースコードに明らかなインジェクションの脆弱性があることが判明しました。

$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

アカウント admin' にログインして # パスワードを変更すると、SQL ステートメントは次のようになります。 # 次のコードをコメントアウトすると、ユーザー admin のパスワードが ccccc に変更されます。

$sql = "UPDATE users SET PASSWORD='$pass' where username='admin'#' and password='$curr_pass' ";

元のリンク: https://blog.csdn.net/qq_44159028/article/details/114325805