MySQL インジェクションにおける outfile、dumpfile、load_file 関数の詳細な説明

MySQL インジェクションにおける outfile、dumpfile、load_file 関数の詳細な説明

SQL インジェクション脆弱性を悪用する後期段階では、MySQL のファイル シリーズ関数を使用して機密ファイルを読み取ったり、Web シェルを書き込んだりするのが最も一般的な方法です。一般的に使用される関数は次の 3 つです。

  • ダンプファイル()に
  • 出力ファイル()に
  • ファイルの読み込み()

今回のテストデータは以下のとおりです

ファイルの読み取りと書き込みのための関数の呼び出しに関する制限

サーバー上にファイルを書き込むため、上記の関数が正常に実行できるかどうかは、パラメータsecure_file_privによって影響を受けます。公式文書での記述は以下の通り

翻訳:

  • パラメータsecure_file_privが空の場合、インポートとエクスポートに制限はありません。
  • 値が指定されたディレクトリの場合、指定されたディレクトリへのインポートとエクスポートのみが可能です。
  • 値が NULL に設定されている場合、インポート機能とエクスポート機能は無効になります。

この値は、コマンドselect @@secure_file_privを使用して照会できます。このパラメータは動的に変更できないため、MySQL 構成ファイルで変更し、再起動してのみ有効になります。

ダンプファイルと出力ファイルの違い

データベースのエクスポートシナリオの違い

... を出力ファイルに選択する

まず、MySQLの公式ドキュメントでこれら2つの関数の説明を見てみましょう。

注目すべき落とし穴が 2 つあります。

outfile 関数は複数行をエクスポートできますが、dumpfile は 1 行のデータのみをエクスポートできます。
outfile 関数は、データをファイルに書き込むときに特別な形式変換を行いますが、dumpfile は元のデータ形式を保持します。

次に、テストをエクスポートして詳細を確認します。

まず、outfileエクスポートselect * from test into outfile '/tmp/test.txt'を使用します。

すべてのデータがファイル/tmp/test.txtに保存され、行がデータ行の末尾で自動的に折り返されていることがわかります。

公式ドキュメントを見ると、次のパラメータを使用してフォーマットを調整できることがわかります。

FIELDS ESCAPED BY指定された文字をエスケープするために使用でき、 FIELDS [OPTIONALLY] ENCLOSED BYフィールド値をラップするために使用され、 FIELDS TERMINATED BYフィールド値を区切るために使用されます。

たとえば、次のコマンドを使用しますselect * from test into outfile '/tmp/test.txt FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ' " 'LINES TERMINATED BY '\n'

結果のエクスポートファイルは次のようになります。

ダンプファイルに...を選択します

次に、コマンドselect * from test into dumpfile '/tmp/test.txt'を使用して、ダンプファイルを使用してエクスポートします。

このコマンドを実行すると、複数行の出力が要求されることがわかります。

ファイルの内容を表示

ダンプファイルによってエクスポートされたデータ行の間には改行がなく、データの一部のみがエクスポートされていることがわかります。

Webshel​​lとudfの違いを書いてください

... を出力ファイルに選択する

一般的なファイル書き込みシナリオの結果を確認するには、コマンドselect 'a\naa\raaaa' into outfile '/tmp/test.txt'使用します。

outfile はエクスポートされたコンテンツ内の \n などの特殊文字をエスケープし、ファイル コンテンツの最後に新しい行を追加していることがわかります。

コマンドselect 'a\naa\raaaa' into dumpfile '/tmp/test.txt'を使って確認してみましょう。

dumpfile は、転送や追加を行わずに、ファイルの内容をそのまま書き込むことがわかります。このため我們在平常的UDF提權中使用dumpfile進行dll文件

注意が必要なもう 1 つの点は、outfile の後に 0x で始まるパスや文字変換後のパスを続けることはできず、一重引用符で囲まれたパスのみを続けることができることです。この問題はPHPインジェクションではさらに厄介です。なぜなら、シングルクォートは自動的に\'にエスケープされ、基本的にはGGになりますが、load_fileでは、パスの後ろはシングルクォート、0x、文字変換文字になる可能性があるものの、パス内のスラッシュは\ではなく/になるからです。

要約する

上記は、編集者が紹介したMysqlインジェクションのoutfile、dumpfile、load_file関数の詳細な説明です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQL LOAD_FILE() 関数メソッドの概要

<<:  WeChatアプレットは写真の撮影とアルバムからの写真の選択を実現します

>>:  Docker+daocloudはフロントエンドプロジェクトの自動構築とデプロイを実現します

推薦する

jquery+springbootでファイルアップロード機能を実現

この記事の例では、ファイルアップロード機能を実現するためのjquery+springbootの具体的...

MySQL で遅いファジークエリを最適化する方法

目次1. はじめに: 2. 最初のアイデアはインデックスを構築することです3. 命令P.S. Lik...

リモートDockerを使用した統合テスト環境の構築手順

需要背景チームには統合テストが必要であり、そのためには、mysql や rabbitmq などのミド...

史上最もシンプルな MySQL データのバックアップと復元のチュートリアル (パート 2) (パート 36)

データのバックアップと復元パート2は次のとおりです基本的な概念:バックアップ、現在のデータまたはレコ...

MySql 最適化のための my.ini 中国語構成スキームの詳細な説明: InnoDB、4GB メモリ、および複数のクエリ

この記事は、4G メモリ システム用の MySQL 構成ファイル ソリューションです (主に Inn...

docker と docker-compose による eureka の高可用性の実現の詳細な説明

最近、新しいプロジェクトでは springcloud と docker が使用されています。この 2...

計算機機能を実現するjsバージョン

この記事の例では、計算機機能を実装するためのjsの具体的なコードを参考までに共有しています。具体的な...

CSS は Apple のスムーズなスイッチ ボタン効果を模倣します

目次1. コード分析2. ソースコードソースコード1. コード分析1.1 HTMLコード分析 <...

MySQL トリガー: トリガーの作成と使用

この記事では、例を使用して MySQL トリガーの作成と使用について説明します。ご参考までに、詳細は...

タブバーの切り替え効果を実現するJavaScript

タブバー: 異なるタブをクリックすると異なるコンテンツが表示され、クリックしたタブのスタイルが変更さ...

モバイルデバイス上の 1px 境界線を解決する最善の方法 (推奨)

モバイル デバイス向けに開発する場合、Retina 画面上で要素の境界線が太くなるという問題に遭遇す...

JavaScript の onblur および onfocus イベントの詳細な説明

HTML ページでは、ボタンやテキスト ボックスなどの視覚要素にフォーカスを設定したり、フォーカスを...

VirtualBox は CentOS7 仮想マシンと拡張ツールをインストールします (画像とテキスト)

コンピュータシステム: win7この記事は主に写真に基づいており、多くの写真が含まれていますCent...

IIS web.config でクロスドメイン アクセスを設定する方法

要件: ページに画像を表示する必要がありますが、さまざまな理由により、画像はサーバー 2 にあります...