web-dev-qa-db-ja.com

メールを送信するphpスクリプトを見つける

メールを送信しているphpスクリプトを見つける方法はありますか?.

「標準」インストールにApache + php(mod_suphpもsuexecもない)があり、witch phpスクリプトがメールを送信していることを確認したいのですが、ログを確認すると、メールを送信しているユーザーのuidが表示されます(私の場合はApache)ですが、電子メールを発信したスクリプトを見つけたいと思います。

それの追跡を維持するために可能ですか、それともsuexecまたはmod_suphpをインストールする必要がありますか?

助けてくれてありがとう。

9
adam

php 5.3は、より良いメールトレースを取得するためにスロットされましたが、それが起こったかどうかはわかりません。 (編集:はい、php 5.3にはロギングが組み込まれています-php.iniには、phpコードからのメールの使用を記録する設定変数mail.logがあります。)

Sendmailをラッパーシェルスクリプトにすることで問題を解決しました。

Php.iniに新しいメーラーを設定します。例えば。:

sendmail_path = /usr/local/bin/sendmail-php -t -i

Sendmail-phpスクリプトは、ロガーを使用して情報を取得し、システムのsendmailを呼び出します。

#!/bin/bash

logger -p mail.info -t sendmail-php "site=${HTTP_Host}, client=${REMOTE_ADDR}, script=${SCRIPT_NAME}, filename=${SCRIPT_FILENAME}, docroot=${DOCUMENT_ROOT}, pwd=${PWD}, uid=${UID}, user=$(whoami)"

/usr/sbin/sendmail -t -i $*

これにより、syslog.confファイルでmail.infoが設定されているすべてのものがログに記録されます。

もう1つの提案は、suhosin php拡張機能をインストールして、PHPの抜け穴を厳しくすることです。ただし、これがすでにデフォルトになっているDebianまたはUbuntuを実行している場合を除きます。

9
labradort

これを解決するには、実際にはいくつかの手順が必要です。ロガースクリプトはphpではなくbashスクリプトであり、bashスクリプトはphpの変数にアクセスできないため、ログが空白になるため、上記のラブラドールのソリューションは実際には機能しません。基本的に、記録したいものはすべて、ロガーがデータにアクセスできるように、メールを送信する前にphpの環境変数に保存する必要があります。他のユーザーのスクリプト(必ずしも自分のものではない)を検出しようとしているため、phpコードを制御できないため、PHPのauto_prepend_file機能を使用して、実行されたすべてのphpが他のすべてのスクリプトよりも前に初期化コードを実行するようにする必要があります。ロガーに必要なデータがあることを確認するために、php.iniを介して次のコードを追加しました。

<?php
/**
 * This passes all SERVER variables to environment variables, 
 * so they can be used by called bash scripts later
 */
foreach ( $_SERVER as $k=>$v ) putenv("$k=$v");
?>

これを機能させる方法に関する完全なチュートリアルをここにまとめました: http://mcquarrie.com.au/wordpress/2012/10/tracking-down-malicious-php-spam-scripts/

4
Tom McQuarrie

パッチ for PHPは、送信されるメールにヘッダーを追加することにより、どのスクリプトがメールを生成しているかを示します。私はそれをテストしていないので、 mコアPHPへのパッチの適用には熱心ではありませんが、良いことは聞いています。

2
WheresAlice

メッセージがスプールに追加されたときのタイムフレームに適合するものについて、アクセスログをgrepする必要があります。

0
Richard Salts

"mail("サブストリングのソースファイルを検索するだけかもしれません。

0

Php.iniでこれらを有効にするだけです

mail.add_x_header = On
mail.log = /var/log/phpmail.log

次にそのファイルを作成し、書き込み権限を付与します。その後、それを見てください。

0
Kevin Nguyen