ASP.NET में एसएमटीपी हैडर इंजेक्शन?

वोट
8

मेरे ASP.NET वेबसाइट एक वैश्विक त्रुटि हैंडलर मुझे (और एक अन्य डेवलपर) को एक ईमेल भेजता है कि वहाँ वेब एप्लिकेशन में त्रुटि के किसी भी प्रकार है जब है। हमने हाल ही में एक त्रुटि जो एक ईमेल पता है कि हम कभी नहीं सुना था करने के लिए एक प्रतिलिपि प्राप्त हुआ। डरावना बात यह है कि डेवलपर्स कि त्रुटि ईमेल को भेजा जाता है की सूची कठिन संकलित ASP.NET कोड में कोडित है है। हम नहीं दिख रहा है कि कैसे सीसी जोड़ा गया हो सकता।

हम यह भी बेईमानी की बहुत संदिग्ध है क्योंकि अनुरोध है कि त्रुटि के कारण स्पैम भेजने के लिए हमारे रूपों में से एक का उपयोग करने की कोशिश थी। IP पता अनुरोध भेजा भी पर सूचीबद्ध है http://www.projecthoneypot.org/

हमारा सर्वोत्तम अनुमान अभी उस अनुरोध को किसी तरह से है कि यह ईमेल में एक सीसी हैडर इंजेक्शन में विकृत हो गया है। समस्या यह है कि हम को समझ नहीं सकता यह कैसे किया जा सकता है। हम ईमेल भेजने के लिए System.Net.Mail का उपयोग कर रहे हैं और यह बात इस तरह की के खिलाफ की रक्षा करने लगता है। ताकि आप एक सीसी लाइन के साथ एक बहु विषय नहीं बनाते MailMessage वस्तु के विषय में केवल एक ही लाइन स्वीकार करता है। MailMessage में करने के लिए और सीसी पते सेट बहुत मजबूत लगता है। और मैं कैसे आप संदेश के मुख्य भाग में एक सीसी हेडर जोड़ सकता है नहीं देख सकता। मैं इस पर कोई जानकारी नहीं मिल रहा है और मैं अगर यह एक वास्तविक समस्या है पता करने के लिए अच्छा लगेगा।

संपादित करें: किसी कोड का अनुरोध किया। यह थोड़ा लंबा है, लेकिन यहाँ यह है:

public class Global : System.Web.HttpApplication
{
    protected void Application_Error(Object sender, EventArgs e)
    {
        // Get the last exception.
        Exception objException = Server.GetLastError();

        // Work out the error details based on the exception.
        string ErrorType = ;
        string ErrorDescription = ;
        string ErrorHtml = ;

        if (objException == null)
        {
            // This should never occur.
            ErrorType = Unknown Error;
            ErrorDescription = Unknown Error;
        }
        else if (objException.GetType() == typeof(HttpException))
        {
            // This will occur when the ASP.NET engine throws a HttpException.
            HttpException objHttpException = objException as HttpException;
            if (objHttpException.GetHttpCode() == 404)
            {
                string Resource = Globals.GetFullUrl(this.Context);
                Server.ClearError();
                Response.Redirect(/ResourceNotFound.aspx?BadUrl= + Server.UrlEncode(Resource));
                return;
            }
            else
            {
                ErrorType = objHttpException.GetHttpCode().ToString();
                ErrorDescription = objHttpException.Message;
            }
        }
        else if (objException.GetType() == typeof(HttpUnhandledException) && objException.InnerException != null && objException.InnerException.GetType() == typeof(HttpException))
        {
            // This will occur when the code throws a HttpException (e.g. a fake 404).
            HttpException objHttpException = objException.InnerException as HttpException;
            if (objHttpException.GetHttpCode() == 404)
            {
                string Resource = Globals.GetFullUrl(this.Context);
                Server.ClearError();
                Response.Redirect(/ResourceNotFound.aspx?BadUrl= + Server.UrlEncode(Resource));
                return;
            }
            else
            {
                ErrorType = objHttpException.GetHttpCode().ToString();
                ErrorDescription = objHttpException.Message;
            }
        }
        else if (objException.GetType() == typeof(HttpUnhandledException))
        {
            // This will occur when a page throws an error.
            HttpUnhandledException objHttpUnhandledException = (HttpUnhandledException) objException;
            ErrorType = objHttpUnhandledException.GetHttpCode().ToString();
            if (objHttpUnhandledException.InnerException != null)
                ErrorDescription = objHttpUnhandledException.InnerException.Message;
            else
                ErrorDescription = objHttpUnhandledException.Message;
            if (objHttpUnhandledException.GetHtmlErrorMessage() != null)
            {
                ErrorHtml = objHttpUnhandledException.GetHtmlErrorMessage();
            }
        }
        else if (objException.GetType() == typeof(HttpRequestValidationException) && !Globals.IsTtiUser(this.Context))
        {
            // Do nothing.  This is mostly just spider junk and we don't want to know about it.
        }
        else
        {
            // This will occur when the ASP.NET engine throws any error other than a HttpException.
            ErrorType = objException.GetType().Name;
            ErrorDescription = objException.Message;
        }

        // Send an email if there's an error to report.
        if (ErrorType !=  || ErrorDescription != )
        {
            Globals.SendErrorEmail(this.Context, ErrorType, ErrorDescription, ErrorHtml);
        }
    }

    public static void SendErrorEmail (HttpContext context, string errorType, string errorDescription, string errorHtml)
    {
        // Build the email subject.
        string Subject = EM:  + errorType + :  + context.Request.ServerVariables[SCRIPT_NAME];

        // Build the email body.
        string Body;

        StringBuilder sb = new StringBuilder();
        sb.Append(Server:\r\n);
        sb.Append(Globals.Server.ToString() + \r\n);
        sb.Append(\r\n);
        sb.Append(URL:\r\n);
        sb.Append(Globals.GetFullUrl(context) + \r\n);
        sb.Append(\r\n);
        sb.Append(Error Type + :\r\n);
        sb.Append(errorType + \r\n);
        sb.Append(\r\n);
        sb.Append(Error Description + :\r\n);
        sb.Append(errorDescription + \r\n);
        sb.Append(\r\n);
        sb.Append(Referring Page:\r\n);
        sb.Append(context.Request.ServerVariables[HTTP_REFERER] + \r\n);
        sb.Append(\r\n);
        sb.Append(Date/Time:\r\n);
        sb.Append(DateTime.Now.ToString() + \r\n);
        sb.Append(\r\n);
        sb.Append(Remote IP:\r\n);
        sb.Append(context.Request.ServerVariables[REMOTE_ADDR] + \r\n);
        sb.Append(\r\n);
        sb.Append(User Agent:\r\n);
        sb.Append(context.Request.ServerVariables[HTTP_USER_AGENT] + \r\n);
        sb.Append(\r\n);
        sb.Append(Crawler:\r\n);
        sb.Append(context.Request.Browser.Crawler.ToString() + \r\n);
        sb.Append(\r\n);
        sb.Append(Admin User:\r\n);
        sb.Append(context.User.Identity.Name + \r\n);
        sb.Append(\r\n);
        sb.Append(\r\n);
        Body = sb.ToString();

        // If there's HTML to represent the error (usually from HttpUnhandledException),
        // then stuff the body text into the HTML (if possible).
        bool HtmlMessage = false;

        if (errorHtml != )
        {
            Regex r = new Regex((?<thebodytext><body.*?>), RegexOptions.IgnoreCase);
            if (r.IsMatch(errorHtml))
            {
                Body = Body.Replace(\r\n, <br>);
                Body = r.Replace(errorHtml, ${thebodytext} + Body, 1);
                HtmlMessage = true;
            }
        }

        // Send an email to the TTI developers.
        MailMessage objMail;
        objMail = new MailMessage();
        objMail.From = new MailAddress(from-address);
        objMail.To.Add(new MailAddress(to-address));
        objMail.CC.Add(new MailAddress(cc-address));
        objMail.CC.Add(new MailAddress(another-cc-address));
        if (HtmlMessage)
            objMail.IsBodyHtml = true;
        else
            objMail.IsBodyHtml = false;
        if (errorType == 404)
            objMail.Priority = MailPriority.Low;
        else
            objMail.Priority = MailPriority.High;
        objMail.Subject = Subject;
        objMail.Body = Body;

        try
        {
            SmtpClient objSmtpClient = new SmtpClient();
            objSmtpClient.Send(objMail);
        }
        finally
        {
            // Do nothing.
        }
    }
}
12/03/2009 को 16:36
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
4

मैं देख सकता है कि यह एक का लक्ष्य किया जा रहा है बहुत रचनात्मक हमले .... आप अपने संदेश के मुख्य भाग में उपयोगकर्ता नियंत्रित डेटा भरने कर रहे हैं ... जो बिंदु पर, बाइनरी डेटा की चालाक उपयोग सकता है एक शरीर के दौरान उचित डेटा भेजता है कि में परिणाम एसएमटीपी सत्र यह स्वरूपित पाने के लिए सिर्फ सही , ... अगर मैं, मैं या तो सभी ASCII पाठ करने के लिए शरीर में परिवर्तित करने, या अपने स्ट्रिंग निर्माण के दौरान, एक स्ट्रिंग लिखने प्रक्षालक है कि केवल में आरएफसी वर्ण की अनुमति देता है सुझाव देंगे हो सकता है। (यूआरएल फ़िल्टर REFERRER, दूरस्थ पता, और UserAgent)। उन का दौरा पड़ने का अधिक होने की संभावना अंक हैं।

एक दूसरे सोचा कोड में एक बुनियादी ईमेल बनाने, और शरीर है कि आप एक पाठ, या HTML, या पीडीएफ फाइल के रूप में निर्माण किया है संलग्न करने के लिए हो सकता है।

ध्यान रखें, SMTP लिफ़ाफ़ा डेटा है नहीं .... संदेश डेटा के रूप में ही अगर कोई पर्याप्त चालाक सही शरीर है कि वजह से एक CRLFCRLF.CRLFCRLF शरीर के अंग के दौरान भेजे जाने के लिए भेजने के लिए किया गया था, कि भेजने को समाप्त होगा, और फिर अगर वे डेटा भेजने रखा, वे से पूरे मेल भेज सकता है: डेटा, आदि ... प्रति :, RCPT (दी, यह एक संभावना नहीं परिदृश्य है ...) ...

मैं देख रहा हूँ में खुशी होगी रॉ ईमेल आपको मिला ... (वास्तविक एसएमटीपी लेन-देन, क्या नहीं आउटलुक आप देखना चाहता है, या जो कुछ भी की हेक्स डंप में के रूप में) का स्रोत।

आप यह भी संदेश भेजने से पहले अपने शरीर QP, या B64 का उपयोग कर एन्कोडिंग कोशिश कर सकते हैं .... यही कारण है कि आपकी समस्या का समाधान हो सकता है ...

यह एक दिलचस्प एक है, और मैं आगे यह के परिणाम के लिए देख रहा हूँ।

18/03/2009 को 01:26
का स्रोत उपयोगकर्ता

वोट
1

आपका कोड, बहुत सुरक्षित लग रहा है तो मुझे नहीं लगता कि समस्या तुम्हारी तरफ है।

IMO, या तो किसी एसएमटीपी संदेश, जबकि यह mailserver के लिए भेजा जा रहा था और अतिरिक्त सीसी इंजेक्शन रोक: लाइन; या mailserver समझौता किया गया है।

आप एक जवाब नहीं मिलता है तो मैं सीधे माइक्रोसॉफ्ट संपर्क करने का सुझाव - आप एक .NET फ्रेमवर्क में शोषण का पर्दाफाश हो सकता है।

18/03/2009 को 12:05
का स्रोत उपयोगकर्ता

वोट
0

समाधान के लिए, तुम क्यों asymeterical encription (उदाहरण सार्वजनिक कुंजी encription के लिए) का उपयोग कर ई-मेल संदेश Encript नहीं है? इस तरह केवल इरादा recepient इसे पढ़ने के लिए सक्षम हो जाएगा।

इस तरह से बुरे लोगों को अपने संदेश की एक प्रति प्राप्त भले ही में (जो भी माध्यम से) यह अब की होगी उन्हें का उपयोग करें।

चलो यह सामना करते हैं, अगर आप एफबीआई या गूगल की तरह एक उच्च प्रोफ़ाइल वेबसाइट है, बहुत ही रचनात्मक बहुत से लोग बहुत समय खर्च करते हैं और यह comprimise को हद तक जाना होगा। यह विस्तृत त्रुटि संदेशों की रक्षा के लिए अत्यंत महत्वपूर्ण है।

19/07/2009 को 19:35
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more