私は、SQL インジェクション攻撃の犠牲となった職場の Web サイトを管理しています。ログを調べると、攻撃者がファイル読み取りオプションを使用して、サーバーから多数の構成ファイルを取得したようです。これは、Web 開発者がずさんで、root mysql アカウントを使用して接続したためです (FILE 権限がありました)。sqlmap
これが私が理解しようとしている地獄のような奇妙な部分です。ファイルが読み取られたのは知っていますが、攻撃者がこれらのファイルの 1 つのパスワードを使用してシステムに侵入したためです。ログを見て、彼は最初にconfig.php と他のいくつかを参照する index.php をつかみました。それらはすべて標的にされました。
セキュリティを強化するために、sqlmap を取得してサーバーにアクセスし、その仕組みを理解した後、ファイルを取得することができました。
私たちの SQL サーバーは外部に面していないため、攻撃者はこれを試みることができませんでした。ここに奇妙な部分があります:
私は自分のデスクトップから私たちに接続し、選択と同様にMySQL server試しましたLOAD_FILELOAD DATA INFILE into TABLE.
それらのいくつかは機能しました。たとえばselect LOAD_FILE('/etc/passwd')、/etc/passwd.
しかし、それらのすべてが機能したわけではありません。
select LOAD_FILE('/var/www/site_name/index.php') 返され NULLました。
LOAD DATA INFILE '/var/www/site_name/index.php' INTO temp; 戻ってきた:
エラー 29 (HY000): ファイル '/var/www/site_name/index.php' が見つかりません (エラーコード: 13)
何?ファイルが見つかりません?は?
そのため、同じファイルに対して sqlmap を実行し、ダウンロードしました。
私はすべてを見ることができるように実行sqlmapしまし-v 6た-ファイルを取得するためにLOAD_FILEを使用していました。
インジェクション攻撃で LOAD_FILE が機能するのに、mysql クライアント コマンド ラインからファイルをロードすると NULL またはファイルが見つからないのはなぜですか? しかし、一部のファイルのみですか?/etc/passwd と /etc/hosts は読み取り可能でした。
どんな手掛かり?