मेल भेजने वाले php स्क्रिप्ट thats का पता लगाएं


9

क्या मेरे पास php स्क्रिप्ट ढूंढने का कोई तरीका है जो ईमेल भेज रहा है।

मेरे पास "मानक" इंस्टॉल में अपाचे + php (कोई mod_suphp न तो suexec) है, और मैं यह पता लगाना चाहता हूं कि डायन php स्क्रिप्ट ईमेल भेज रही है, जब मैं लॉग की जांच करता हूं तो मैं देखता हूं कि उपयोगकर्ता केवल ईमेल भेजने के लिए यूआईडी देख रहा है (में) मेरा मामला अपाचे) लेकिन मैं उस स्क्रिप्ट का पता लगाना चाहता हूं जो ईमेल से उत्पन्न हुई है।

क्या यह संभव है या मुझे इसका पता लगाने के लिए suexec या mod_suphp स्थापित करना चाहिए?

मदद के लिए सोचते हैं।

जवाबों:


9

बेहतर मेल ट्रेसिंग पाने के लिए php 5.3 को स्लॉट किया गया था, लेकिन मुझे यकीन नहीं है कि ऐसा हुआ। (संपादित करें: हाँ php 5.3 ने अब लॉग-इन किया है - php.ini में config वैरिएबल mail.log है जो php कोड से मेल का उपयोग करेगा।)

हमने सेंपल को रैपर खोल स्क्रिप्ट बनाकर समस्या हल की।

Php.ini में एक नया मेलर सेट करें। उदाहरण के लिए:

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

Sendmail-php स्क्रिप्ट बस जानकारी प्राप्त करने के लिए लकड़हारे का उपयोग करता है, और फिर सिस्टम के प्रेषक को कॉल करता है:

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

यह जो कुछ भी आपके mail.info syslog.conf फ़ाइल में सेट किया गया है, उसे लॉग करेगा।

एक अन्य सुझाव यह है कि जब तक आप डेबियन या उबंटू नहीं चला रहे हैं तब तक PHP में लूपहोल्स को कसने के लिए suhosin php एक्सटेंशन स्थापित करना है, जहां यह पहले से ही डिफ़ॉल्ट है।


यहाँ php 4.x (कुछ पुराने ऐप मिले जो व्यवहार्य नहीं थे php 5.x)
adam

कोई बात नहीं, यह रैपर ट्रिक करेगा। यह php के लिए बाहरी है। मैंने php 5.3 का उल्लेख किया है, जब तक कि एक लॉगिंग सुविधा की यह कमी तब तक तय नहीं की गई थी। रैपर बहुत अच्छी तरह से काम करता है और हम एक उपयोगकर्ता द्वारा एक त्रुटिपूर्ण स्क्रिप्ट को इंगित करने में सक्षम थे जो स्पैम की अनुमति दे रहा था।
लैब्राडॉर्ट

thks, मुझे लगता है कि मैं अपना दृष्टिकोण लेने जा रहा हूं। धन्यवाद
एडम

1
नमस्ते, अभी क्यों नहीं, लेकिन "स्क्रिप्ट = $ {SCRIPT_NAME}, फ़ाइल नाम = $ {SCRIPT_FILENAME}" कुछ भी नहीं लौट रहा है: 7 20:24:08 गेटवे लकड़हारा: sendmail-php: client =, filename =, pwd = / / var / www / html / मेल, uid = 48, उपयोगकर्ता = अपाचे
adam

क्या आप सुनिश्चित हैं कि इसे सही तरीके से सेट किया गया था? यदि यह आपके PHP वातावरण में पूर्वनिर्धारित चर के रूप में अज्ञात था, तो आपको लॉग आउटपुट में "स्क्रिप्ट =" भी देखा जाना चाहिए। जांचें कि आपने क्या सेट किया है फिर बहुत सावधानी से। आप कोशिश कर सकते हैं: $ _SERVER ['SCRIPT_FILENAME'] आप पूर्वनिर्धारित चर पर PHP प्रलेखन से लॉगिंग के लिए और अधिक चर देखने में सक्षम हो सकते हैं: php.net/manual/en/reserved.variables.server.php
labradort

4

इसके समाधान के लिए वास्तव में कुछ चरणों की आवश्यकता होती है। ऊपर लैब्राडोर का समाधान वास्तव में काम नहीं करता है क्योंकि लकड़हारा स्क्रिप्ट एक bash स्क्रिप्ट है, न कि php, और 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/


रैपर स्क्रिप्ट ने Redhat और डेबियन लिनक्स के php डिफॉल्ट्स के कार्यान्वयन पर काम किया जब वह php 5.2 और उससे पहले का था। मैं इन दिनों mail.log = /var/log/apache-mail.log का उपयोग कर रहा हूं और यह वही करता है जो मुझे चाहिए।
लैब्राडोर

1
यह ठीक है कि कैसे शेलशॉक बग का शोषण किया जाता है। मैं गंभीरता से इस तरह से काम करने की सलाह नहीं देता।
बेन हिचकॉक

तुम्हारी बात तथ्य पूर्ण है। आप निश्चित रूप से किसी भी हानिकारक चीज़ को हटाने के लिए एक सैनिटाइज़ फ़ंक्शन के माध्यम से चर चला सकते हैं, जैसे "() {:};}"। वास्तव में "PHP_" जैसी किसी चीज़ के साथ, चर नामों को उपसर्ग करने का शायद एक अच्छा विचार है, बस एक पर्यावरण चर नाम टकराव है।
टॉम मैकक्वेरी

2

नहीं है एक पैच PHP के लिए दिखाई देगा कि जो स्क्रिप्ट ईमेल से किया जा रहा भेजा कोई ऐसा शीर्ष जोड़कर ईमेल पैदा कर रहा है। मैंने इसका परीक्षण नहीं किया है क्योंकि मैं कोर PHP को पैच करने का इच्छुक नहीं हूं, लेकिन मैंने अच्छी बातें सुनी हैं।


1
यह जाने के लिए एक शानदार तरीका लगता है। +1। हालाँकि, यदि आप एक से अधिक क्लाइंट के साथ साझा होस्ट प्रबंधित कर रहे हैं, तो आप उन क्लाइंट को हेडर के बारे में सूचित करना चाहते हैं, या आउटपुट को लॉग फ़ाइल में बदल सकते हैं।
पेक्का P

हाँ शायद यह जाने का रास्ता है, लेकिन एक निश्चित बिंदु पर यह मेरी सुरक्षा का मुद्दा है, अब सभी लोग जाने क्या स्क्रिप्ट भेज रहे हैं, खराब तरीके से बनाई गई स्क्रिप्ट सिर्फ हैक होने का निमंत्रण दे रही है। एक लॉग पर पुनर्निर्देशित हो सकता है कि यह बेहतर है
adam

खराब तरीके से बनाई गई स्क्रिप्ट पहली जगह पर सर्वर पर नहीं होनी चाहिए, लोग उन्हें वहां मिलेंगे यदि वे वहां हैं (खासकर यदि वे एक लोकप्रिय सेमी सिस्टम का हिस्सा हैं)। लेकिन मुझे आपकी बात समझ में आ गई कि इस समाधान के खिलाफ एक मामला है।
WheresAlice

0

जब आप संदेशों को स्पूल में जोड़ते हैं, तो उस समय के एक्सेस लॉग को प्राप्त करने की आवश्यकता होती है, जो समय-समय पर फिट बैठता है।


रीप्ले के लिए thks, समस्या यह है कि एक साझा होस्टिंग है और प्रत्येक डोमेन के लिए एक समर्पित एक्सेस लॉग है।
एडम

हां, दुर्भाग्यवश आपको उन सभी के माध्यम से जीरो करना होगा।
रिचर्ड साल्ट्स

0

"मेल" ("विकल्प" के लिए स्रोत फ़ाइलों के माध्यम से खोज की जा सकती है?


यह कभी-कभी देखने लायक होता है, और विशेष रूप से स्पैमर का उपयोग करने के लिए किसी भी भेद्यता के लिए इसके आसपास के स्रोत कोड को देखने पर। लेकिन एक साझा होस्ट पर कई लोगों के स्वामित्व वाली जटिल php स्क्रिप्ट के साथ, यह इस समस्या का समाधान नहीं है।
WheresAlice

एक साझा होस्टिंग परिवेश में यह सटीक स्क्रिप्ट को इंगित नहीं कर सकता है या इसके परिणामस्वरूप कई झूठी सकारात्मकताएं हो सकती हैं
एरिक किगाथी

0

बस अपने php.ini पर इन्हें सक्षम करें

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

फिर उस फ़ाइल को बनाएं और लिखित अनुमति दें। इसके बाद उस पर नजर रखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.