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

推薦する

VueとElementUIを組み合わせたスキン変更ソリューション

目次前面に書かれた解決策 1: グローバル スタイル オーバーライドを使用する (フロントエンドに共...

Zabbixを使用してMySQLを監視する方法

Zabbix 導入ドキュメントzabbix導入後zabbixエージェントの操作1. MySQLを監視...

Nginx で複数のドメイン名がドメインをまたいでアクセスできるようにマップを使用する方法

一般的なNginx構成ではクロスドメインが可能 サーバー{ 11111 を聞いてください。 serv...

Windows 10 システムで nginx ファイル サーバーを構成するためのグラフィック チュートリアル

Nginx の公式 Web サイトから Windows バージョンの Nginx をダウンロードしま...

Oracle Rownum 書き込みに似た MySQL の詳細な例

Rownum は、Oracle での独自の書き込み方法です。Oracle では、rownum を使用...

React プロジェクトにおける TypeScript の使用の概要

序文この記事では、TS の基本的な概念ではなく、プロジェクトで TypeScript (以下、TS ...

Mysqlサーバーのインストール、構成、起動、シャットダウン方法の詳細な説明

1. 公式サイトからダウンロード: https://dev.mysql.com/downloads/...

nginx が動的と静的の分離を実装する方法の例

目次server1にnginxをデプロイするサーバーにlnmpを展開するノード3にhttpdをデプロ...

MySQL でデータをクエリし、条件に基づいて別のテーブルに更新する方法の例

この記事では、MySQL が条件に基づいてデータをクエリし、別のテーブルに更新する方法を例を使用して...

MySQL 構成マスタースレーブサーバー (マスター 1 台とスレーブ複数台)

目次アイデアホスト構成confを変更する再起動テストスレーブ 1 の構成スレーブ2の構成マスターとス...

TypeScript インターフェース定義ケースチュートリアル

インターフェースの役割:インターフェース (英語: interface) の機能は、簡単に言えば、コ...

MySQL パーティションテーブルの制限と制約の詳細な説明

ビルドを無効にするパーティション式では、次の構成はサポートされません。ストアドプロシージャ、ストアド...

MySQL トリガー構文とアプリケーション例

この記事では、例を使用して MySQL トリガーの構文とアプリケーションを説明します。ご参考までに、...

CSS コンテナ背景 10 色グラデーション デモ (linear-gradient())

文法 背景: linear-gradient(direction,color-stop1,color...

MySQL データベースのマスター スレーブ分離のサンプル コード

導入MySQL データベースの読み取りと書き込みの分離を設定すると、データベースに対する書き込み操作...