私は自由な時間があるので、さまざまなローカルの脆弱なマシンをテストしています。特定のラボマシンでは、最初に管理パネルを表示し、次に利用可能な「挿入」コマンドを使用して、テキストファイルをディレクトリに書き込む必要があります。バックグラウンドのサービスはファイル書き込みをチェックしています。
管理パネルのパスワードを見つけましたが、SELECTステートメントでSQLインジェクションを使用するのではなく、ユーザー名とパスワードを解決するポートを使用してネットワークに接続しました。今、私の知る限り、SELECTにSQLインジェクションの脆弱性があった場合、データファイルの特定の列を簡単にINTO OUTFILEにできましたが、今回は、入力が管理パネルからに送信されるため、INSERTを使用する必要があります。 mysqlクエリ。興味深いのは、INSERTまたはその他の方法を使用してINTO OUTFILEと同等のコマンドまたはペイロードがあることです。 MySQL LOAD DATA を使用することを考えていますが、頭を抱えることはできません。
呼び出しは次のように行われます。
LOAD DATA INFILE 'foo.txt' INTO TABLE t FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES (name, address, city, @skip, state, @skip, ...) [ SET col = <expr>, ... ]
さらに、load_file( 'filename')を使用してファイルシステムからファイルを正常にロードしたので、少なくとも読み取り用にユーザーアカウントを許可しました。
その他の情報:
マシン:Linux RS x11 CERT UTIC(テストラボ)
データベース:MySQL 5.x
アプリケーション言語:PHP
よろしくお願いいたします。
MySQL選択構文 を見ると、クエリの最後でinto outfile
がサポートされていることがわかります。 MySQL Insert Syntax を見ると、into outfile
への参照がないことがわかります。これには十分な理由があります。挿入によってデータベースが変更され、選択によってデータが取得されます。into outfile
はそのデータの送信先の修飾子です。開発者の観点からは、理由なしで、ファイルに書き込む機能を挿入できます。
ただし、すべてが失われるわけではありません。データを挿入する機能は、 二次コードインジェクション の扉を開きます。