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

推薦する

CentOS 8が利用可能になりました

CentOS 8 が利用可能になりました! CentOS 8 と RedHat Enterprise...

JDBC を使用して Mysql データベースに接続する際に発生する可能性のある問題の概要

まず、いくつかの概念を明確にします。 JDBC: Javaデータベース接続、Oricalによって規定...

nginx と Tencent Cloud の無料証明書を使用して https を作成する方法

httpsを取得する方法を勉強しています。最近、Tencent Cloud が提供する無料の SSL...

Elasticsearch を使用する際の一般的な問題の解決策

1. redis で使用すると Netty の起動競合が発生するため、***Application ...

CSS 円形ホローイングの実装(クーポン背景画像)

この記事では主に、クーポンの背景画像などでよく使われる CSS 円形ホローイングについて紹介し、皆さ...

Reactは、読み込み、読み込み完了、読み込み失敗の3つの段階の原則分析を実装します。

最近ブログに書いたのですが、プロジェクトリストの中に写真がたくさんあり、最初は読み込みが遅いので、ス...

ハイパーリンクに関するいくつかの質問

ポテトチップスパーティーのこのエピソードに参加して、何人かの友人に会えてとても嬉しいです。思いがけず...

MySQL 5.7.15 バージョンのインストールと設定方法のグラフィックチュートリアル

この記事では、MySQLバージョン5.7のインストール方法と使用方法、およびデータベースデータの保存...

div の高さをブラウザの高さに合わせて調整する方法

この古くからある疑問は、数え切れないほどのフロントエンド開発者やバックエンドプログラマーを悩ませてき...

ハイパーリンクAタグを学ぶ

聞く: CSS を使用してハイパーリンクのスタイルを設定しましたが、ホバーしても機能しません。なぜこ...

DockerはMariaDBのサブライブラリとサブテーブル、および読み書き分離機能を実装します

目次1. はじめに2. 環境整備1. 基本環境3.Mysqlマスタースレーブ構成をインストールする1...

JS ES6における構造化分解についてお話しましょう

概要es6 では、配列またはオブジェクトから指定された要素を取得する新しい方法が追加されました。これ...

MySQL で MHA アーキテクチャのデプロイメントを構築する手順

目次マハ1. MAHアーキテクチャの概要2. 適用可能なシナリオ3. MHAの動作原理4. MHAの...

Linux 環境での Oracle 導入チュートリアル

1. 環境と関連ソフトウェア仮想マシン: VMwore Workstation Linuxシステム:...

React プロジェクトで eslint の Baidu スタイルを使用する詳細な説明

1. Baidu Eslint Ruleプラグインをインストールする npm i -D eslint...