私は、SQL インジェクション攻撃の犠牲となった職場の Web サイトを管理しています。ログを調べると、攻撃者がファイル読み取りオプションを使用して、サーバーから多数の構成ファイルを取得したようです。これは、Web 開発者がずさんで、root mysql アカウントを使用して接続したためです (FILE 権限がありました)。sqlmap
これが私が理解しようとしている地獄のような奇妙な部分です。ファイルが読み取られたのは知っていますが、攻撃者がこれらのファイルの 1 つのパスワードを使用してシステムに侵入したためです。ログを見て、彼は最初にconfig.php と他のいくつかを参照する index.php をつかみました。それらはすべて標的にされました。
セキュリティを強化するために、sqlmap を取得してサーバーにアクセスし、その仕組みを理解した後、ファイルを取得することができました。
私たちの SQL サーバーは外部に面していないため、攻撃者はこれを試みることができませんでした。ここに奇妙な部分があります:
私は自分のデスクトップから私たちに接続し、選択と同様にMySQL server
試しましたLOAD_FILE
LOAD 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 は読み取り可能でした。
どんな手掛かり?