0

私は、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 は読み取り可能でした。

どんな手掛かり?

4

1 に答える 1

0

これに対して何日も頭を悩ませた後、別の管理者が物事を動かし、私が攻撃していると思っていた外部に面したサーバーが実際にはポート80を別の新しいサーバーに転送していることに気付きました. 両方のサーバーにデータベースのコピーがありました。そのため、SQL インジェクションが実行されると、内部/新しいデータベースにヒットし、そのサーバー上のファイルを読み取ることができました。mysql クライアントで同じ IP アドレスにアクセスしたとき、別のサーバーと同じファイルを持たない、別のファイルシステムにあるデータベースの古いコピーを読み取っていました。

それ以来、頭は転がっています。努力に感謝し、これに誰かの時間を無駄にして申し訳ありません。

于 2015-05-10T15:49:17.583 に答える