Posta gönderen php betiğini bul


9

Bana e-posta gönderen php komut dosyası bulmak için herhangi bir yolu var mı.

Ben bir "standart" kurulumda apache + php (hiçbir mod_suphp ne suexec) var ve ben günlükleri kontrol ederken ben sadece e-postaları gönderen kullanıcının uid görmek (cadı php komut dosyası e-postalar göndermek olduğunu bulmak istiyorum benim durumum apache) ama e-posta kaynaklı komut dosyası bulmak istiyorum.

Mümkün mü yoksa bunun izini sürmek için suexec veya mod_suphp yüklemeliyim?

Yardım için teşekkürler.

Yanıtlar:


9

php 5.3 daha iyi posta izleme almak için oluklu, ama bunun olup olmadığından emin değilim. (değiştir: evet php 5.3 artık yerleşik olarak günlüğe sahiptir - php.ini, php kodundan posta kullanımını günlüğe kaydedecek mail.log yapılandırma değişkenine sahiptir.)

Sendmail'i bir sarıcı kabuk betiği yaparak sorunu çözdük.

Php.ini'de yeni bir posta gönderir. Örneğin:

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

Sendmail-php betiği bilgi almak için logger'ı kullanır ve ardından sistemin sendmail'ini çağırır:

#!/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 $*

Bu, syslog.conf dosyasında mail.info ayarınız ne olursa olsun oturum açar.

Başka bir öneri, Debian veya Ubuntu'yu zaten varsayılan olarak çalıştırmıyorsanız, PHP'deki boşlukları sıkmak için suhosin php uzantısını yüklemektir.


php 4.x burada (php 5.x için geçerli olmayan bazı eski uygulamalar var)
adam

Sorun değil, bu sarıcı hile yapacak. Php harici. Ben php 5.3 bahsetmiştim sadece bir günlükleme özelliği eksikliği o zamana kadar düzeltilmesi planlanmıştır. Sarıcı çok iyi çalışıyor ve hataya izin veren bir kullanıcı tarafından kusurlu bir komut dosyasını saptayabildik.
labradort

thks, sanırım senin yaklaşımını alacağım. teşekkür ederim
adam

1
Merhaba, neden olmasın "script = $ {SCRIPT_NAME}, dosya adı = $ {SCRIPT_FILENAME}" hiçbir şey döndürmüyor bkz: 7 20:24:08 ağ geçidi kaydedicisi: sendmail-php: client =, dosyaadı =, pwd = / var / www / html / mail, uid = 48, kullanıcı = apache
adam

Doğru ayarlandığından emin misiniz? PHP ortamınızda önceden tanımlanmış bir değişken olarak bilinmiyorsa, günlük çıktısında "script =," ifadesini de görüyor olmalısınız. Neyi ayarladığınızı tekrar dikkatlice kontrol edin. Bunu deneyebilirsiniz: $ _SERVER ['SCRIPT_FILENAME'] Ön tanımlı değişkenler üzerindeki PHP belgelerinden günlüğe kaydetmek için daha fazla değişken arayabilirsiniz
labradort

4

Bunun çözümü aslında birkaç adım gerektirir. labradort'un yukarıdaki çözümü, logger betiği php değil, bir bash betiği olduğundan ve bash betiğinin php değişkenlerine erişimi olmadığından, günlükler boş olduğu için gerçekte çalışmaz. Temel olarak, günlüğe kaydetmek istediğiniz her şeyin, e-postayı göndermeden önce günlükçünün verilere erişebilmesi için php'deki ortam değişkenlerine kaydedilmesi gerekir. Diğer kullanıcıların komut dosyalarını bulmaya çalıştığınız için, mutlaka kendi kodunuz değil, php kodu üzerinde hiçbir kontrole sahip değilsiniz, bu nedenle tüm çalıştırılan php'nin başlatma kodunuzu her şeyden önce çalıştırmasını sağlamak için PHP'nin auto_prepend_file özelliğini kullanmanız gerekir. Ben logger gereken veri var sağlamak için php.ini aracılığıyla aşağıdaki kodu ekledi:

<?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");
?>

Bu çalışmanın burada nasıl yapılacağına dair tam bir eğitim hazırladım: http://mcquarrie.com.au/wordpress/2012/10/tracking-down-malicious-php-spam-scripts/


Sarıcı komut dosyası, Redhat ve Debian Linux'un php varsayılanlarını php 5.2 ve daha önceki sürümlerinde uygulamasında işe yaradı. Bu günlerde mail.log = /var/log/apache-mail.log kullanıyorum ve ihtiyacım olanı yapıyor.
labradort

1
Kabuk böceklerinden tam olarak bu şekilde faydalanılabilir. Ciddi şeyleri bu şekilde yapmanızı önermiyorum.
Ben Hitchcock

Haklısın. Değişkenleri, "() {:;};" gibi zararlı herhangi bir şeyi çıkarmak için sterilize etme işleviyle çalıştırabilirsiniz. Aslında, değişken değişken adlarının önüne "PHP_" gibi bir şey önek eklemek için iyi bir fikir, bir ortam değişkeni ad çakışması olması durumunda.
Tom McQuarrie

2

PHP için, gönderilen e-postaya bir başlık ekleyerek hangi komut dosyasının e-posta oluşturduğunu gösteren bir düzeltme eki vardır . Çekirdek PHP'yi yamalamak istemediğim için test etmedim, ama iyi şeyler duydum.


1
Bu mükemmel bir yol gibi görünüyor. +1. Ancak, birden çok istemciyle paylaşılan bir ana bilgisayarı yönetiyorsanız, bu istemcileri başlık hakkında bilgilendirmek veya çıktıyı bir günlük dosyasına yeniden yönlendirmek isteyebilirsiniz.
Pekka

Evet belki de gitmenin bir yolu ama belli bir noktada bu bir güvenlik meselesi. Bir günlüğe yönlendirme belki daha iyi
adam

Kötü hazırlanmış komut dosyaları ilk etapta sunucuda olmamalı, insanlar eğer oradalarsa (özellikle popüler bir cms sisteminin parçasıysa) onları bulacaklardır. Ama bu çözüme karşı belki de bir dava olduğu fikrini anlıyorum.
WheresAlice

0

İletilerin makaraya ne zaman eklendiğine ilişkin zaman dilimine uyan bir şey için erişim günlüklerini doldurmanız gerekir.


tekrar için teşekkürler, sorun paylaşılan bir barındırma ve her etki alanı için özel bir erişim günlüğü olmasıdır.
adam

Evet, ne yazık ki hepsini gözden kaçırmanız gerekecek.
Richard Salts

0

Kaynak dosyalar arasında yalnızca "mail (" alt dizesi) aranabilir mi?


Bu bazen spam göndericilerin kullanacağı güvenlik açıkları için etrafındaki kaynak koduna bakmaya değer. Ancak, paylaşılan bir ana bilgisayarda birçok kişinin sahip olduğu birçok karmaşık php komut dosyasıyla, bu sorunun çözümü değildir.
WheresAlice

Paylaşılan bir barındırma ortamında bu, komut dosyasının tam yerini
saptamayabilir

0

Sadece php.ini dosyasında etkinleştirin

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

daha sonra bu dosyayı oluşturun ve yazma izni verin. Bundan sonra bir göz atın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.