web-dev-qa-db-ja.com

PHP 777権限のあるファイル内に挿入されたコード

目が覚めたとき、777権限を持つ共有ウェブホストのすべてのフォルダーに2つの新しいphpファイルがあることがわかりました。ファイル内のコードを読み取ることができませんでした-デコードされたバージョンは次のとおりです: http://pastie.org/779226 (what ...?)そのコードはいくつかのPHPファイル。

私は誰かがこれをどのように行うのか途方に暮れていますか? 777権限を持つことは賢明なことではないことは知っていますが、そもそもどのようにしてそれらが私のフォルダシステムに入ったのでしょうか。

私はただのクライアントサイドプログラマーです。将来これが起こらないようにする方法についてアドバイスがあれば素晴らしいと思います。

乾杯。

4
coder_

スクリプトの難読化解除バージョンは次のとおりです。 http://pastie.org/private/iobgt7aetg8mezoepucsg

このコードには、別のWebサイトからの外部PHPコードが含まれているようで、その間に訪問者に関する情報を収集します。

これが発生する可能性のある1つの方法は、外部からアクセス可能なディレクトリへのファイルのアップロードを許可していることです。悪意のあるユーザーが悪意のあるコードを含むPHPファイル(画像のアップロードを使用)をアップロードする可能性があるため、適切な検証を行わずにこれを行うと危険です。リクエストされました。

このような問題を回避するには、次のことを確認してください。

  • PHPプロセスは、限られたユーザーによって実行されます。
  • 編集の必要がないファイルは、所有者のみが書き込み可能に設定されています(実行ビットが必要かどうかに応じて、0644または0744)。
  • アップロードディレクトリのみを書き込み可能に設定します。
  • Webルートの外部にあるアップロードディレクトリを使用してみてください。次に、 readfile() を使用してファイルを提供します。
  • ファイルを検証します。フォームで画像のみを許可する場合は、マジックビットを検証し、画像が有効であることを確認してください。これは非常に見過ごされているステップです。同じことが他のフォーマットにも当てはまります。クライアントから送信されたファイル拡張子やmimetypeに依存しないでください。実際のファイルの内容を確認してください。
8
Andrew Moore

私が考えることができる少なくとも2つの可能性があります:

  1. 彼らはあなたのFTPパスワードを見つけました
  2. 彼らはあなたのPHPソフトウェアに欠陥を見つけました

それらが発生するのを防ぐには:

  1. 複雑なパスワードを使用します(最低9文字、大文字と小文字、数字、特殊文字が混在)
  2. それが獣の数であるかのように777から実行します。 Webサーバーにこれ以上スクリプトの読み取りアクセス許可を与え、書き込みが必要な(まれな)フォルダー/ファイルに特別なアクセス許可を与えるようにしてください。

一部のログ(ApacheからのアクセスログとWebサイトが実行しているFTPサーバーからのFTPログ)にアクセスできる場合は、何が起こったかを確認するのに役立ちます。

それが本当に広く開かれた欠陥でない限り(ユーザーが好きなものの上にfopen()をラップするだけの保護されていないスクリプトがあるように)、彼らがスクリプトの単純な欠陥でこれほど多くの変更を行うことができたのは疑わしいので、私はチェックしますFTPログインの優先順位。

2
zneak