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 透明ボーダー背景クリップマジック

この記事では、CSSの透明な境界線の背景クリップの素晴らしい使い方を主に紹介し、みんなと共有し、自分...

ページを更新せずにフォームを送信するには iframe を使用します

そこで、この問題を解決するために埋め込みフレームワークを導入します。具体的な原則は、フォームがデータ...

mysql-joinsの具体的な使用方法

目次結合構文: 1. InnerJOIN: (内部結合) 2. LeftJOIN: (左結合) 3....

MySQL で不明なフィールド名を回避する方法

序文この記事では、DDCTF の 5 番目の質問、つまり不明なフィールド名をバイパスする手法を紹介し...

露滴アニメーション効果を実装するための Three.js サンプル コード

序文みなさんこんにちは。CSS ウィザードの alphardex です。この記事では、three.j...

Linux 7.6 バイナリに MySQL 8.0.27 をインストールする詳細な手順

目次1. 環境整備1.1 オペレーティング システムのバージョン1.2 ディスク容量1.3 ファイア...

MySQLデータのグループ化の詳細な説明

グループを作成グループ化は、SELECT ステートメントの GROUP BY 句で設定されます。例:...

Raspberry Pi msmtp と mutt のインストールと設定のチュートリアル

1. muttをインストールするsudo apt-get install mutt 2. msmtp...

MySQL クエリ キャッシュとバッファ プール

1. キャッシュ - クエリキャッシュ次の図は、MySQL 公式サイトから提供されています: MyS...

カルーセル効果を実現するための純粋なjs

この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体...

CSS 線形グラデーション凹型長方形遷移効果の実装

この記事では、線形グラデーションの凹四角形の遷移効果の難しさやアイデアについて説明します。主に、凹四...

HTML リンク アンカー タグと SEO におけるその役割の概要

<a> タグは主に、ハイパーリンクまたはアンカー リンクとも呼ばれるリンクとブックマーク...

W3C チュートリアル (7): W3C XSL アクティビティ

スタイル シートは、ドキュメントの表示方法、発音方法、または入力方法を記述します。XSL 言語は、X...

Linux での rpm、yum、ソースコードの 3 つのインストール方法の詳細な紹介

第1章 ソースコードのインストールRPM パッケージは特定のシステムとプラットフォームに応じて指定さ...

React を使って小さなプログラムを書くための Remax フレームワークのコンパイル プロセス分析 (推奨)

Remax は、実行時に構文制限のないソリューションを採用した React を使用して小規模なプロ...