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はフロントエンドプロジェクトの自動構築とデプロイを実現します

推薦する

CSS ハック \9 と \0 は IE11\IE9\IE8 のハッキングには機能しない可能性があります

Web ページやフォームを設計するたびに、さまざまなブラウザ、特に IE ファミリの互換性の問題に悩...

Win10 64 ビットで圧縮パッケージを使用して最新の MySQL 8.0.18 をインストールするチュートリアル (画像とテキスト付き)

WIN10 64ビットに最新のMySQL8.0.18をインストールダウンロード公式サイトから最新バ...

MySQL 8.0.15 バージョンのインストールチュートリアル Navicat.list への接続

落とし穴1. ネット上の多くのチュートリアルでは環境変数を設定するファイル名はmy.iniと書いてあ...

Vueのキャッシュ方法の例の詳細な説明

最近、「フロントエンドキャッシュ」という新しい要件が作成されました要件背景: フォームへの高頻度の繰...

Bootstrap Webページレイアウトグリッドの実装

目次1. Bootstrapグリッドシステムの仕組み1.1 12グリッドシステム1.2 Bootst...

最新の高品質な英語無料フォント36個を公開

01. 無限フォントのダウンロード02. バンダフォントのダウンロード03. ロールアップフォントの...

Mysql でよく使用される時間、日付、変換関数の概要

この記事では、主に実際のアプリケーションでよく使用されるMySQLの時刻と日付、および変換関数につい...

docker pruneコマンドは、あまり使用されないデータを定期的にクリーンアップするために使用できます。

目次docker システム df docker システム プルーンNoneオブジェクトをクリーンアッ...

JavaScript を使用して userAgent を通じていくつかの一般的なブラウザを判別する方法

序文通常、h5 ページを作成するときは、WeChat、QQ、Weibo などのエコシステム内でトラフ...

Dockerコンテナに入る方法と出る方法

1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...

MySQL (8 および 5.7) の Docker インストール

この記事では、Dockerを使用してMySQLデータベースとリモートアクセス構成をデプロイする方法を...

JavaScript ウェブページ入門開発詳細説明

パート3: ❤バックエンドデータ受信を見落とす3つの方法❤ (おすすめ集)パート 2: Web フォ...

MySQL 8.0 バージョンで getTables がすべてのデータベース テーブルを返す問題の簡単な分析

序文この記事では、主にライブラリ内のすべてのテーブルを返すMysql8.0ドライバgetTables...

Windows10のマウスを模倣して境界線を光らせる効果を実現するCSSの詳細解説

最新の Windows 10 アップデートをインストールした後、システム UI の詳細な効果が顕著に...

Docker で LNMP 環境を素早く構築する方法 (最新)

序文ヒント: ここで、この記事に記録するおおよその内容を追加できます。例えば、人工知能の継続的な発展...