1

i have a problem with metasploit because i need send an email when the sessions will be opening, i'm trying to create an smtp server in kali but it does not work, my unique alternative is send the emails with this plugin for metasploit, but i need modify this plugin to send the emails with the gmail SMTP.

module Msf

require 'net/smtp'

class Plugin::NotifyMail < Msf::Plugin

    if not defined?(Notify_mail_yaml)
        Notify_mail_yaml = "#{Msf::Config.get_config_root}/notify_mail.yaml"
    end

    class NotifyMailCommandDispatcher < Plugin::NotifyMail
        include Msf::Ui::Console::CommandDispatcher

        @sess_subscribed = false

        # The dispatcher's name.
        def name
            "Notify Mail"
        end

        # Returns the hash of commands supported by this dispatcher.
        def commands
            {
                "notify_mail_show" => "Show current settings",
                "notify_mail_load" => "Load settings from configuration file",
                "notify_mail_save" => "Save settings to configuration file",
                "notify_mail_mailfrom" => "Set sender e-mail address",
                "notify_mail_mailto" => "Set recipient e-mail address",
                "notify_mail_smtpsrv" => "Set SMTP server hostname/IP",
                "notify_mail_smtpport" => "Set SMTP server port"
            }
        end

        def manage_session_subscriber
                        # Don't send SMTP messages until all parameters are set
            if !@sess_subscribed
                if @mailfrom and @mailto and @smtpsrv and @smtpport
                    self.framework.events.add_session_subscriber(self)
                    @sess_subscribed = true
                end
            end
        end

        # Method for reading the YAML File
                # Widely inspired from 'growl.rb' (Carlos Perez)
        def cmd_notify_mail_load
            read = nil
            if File.exist?(Notify_mail_yaml)
                ldconfig = YAML.load_file("#{Notify_mail_yaml}")
                @mailfrom  = ldconfig['mailfrom']
                @mailto    = ldconfig['mailto']
                @smtpsrv   = ldconfig['smtpsrv']
                @smtpport  = ldconfig['smtpport']
                print_good("Parameters loaded from #{Notify_mail_yaml}")

                # add session subscriber
                manage_session_subscriber
                read = true
            else
                print_error("No such YAML File was found")
                print_error("as: #{Notify_mail_yaml}")
                return read
            end
            return read
        end

        # Save Parameters to text file
                # Widely inspired from 'growl.rb' (Carlos Perez)
        def cmd_notify_mail_save
            print_status("Saving paramters to config file")
            if @mailfrom and @mailto and @smtpsrv and @smtpport
                config = {'mailfrom' => @mailfrom, 'mailto' => @mailto,
                    'smtpsrv' => @smtpsrv, 'smtpport' => @smtpport
                }
                File.open(Notify_mail_yaml, 'w') do |out|
                    YAML.dump(config, out)
                end
                print_good("All parameters saved to #{Notify_mail_yaml}")
            else
                print_error("You have not provided all the parameters!")
            end
        end

                # show current parameters values
        def cmd_notify_mail_show
            print_line("MAILFROM : #{@mailfrom}")
            print_line("MAILTO   : #{@mailto}")
            print_line("SMTPSRV  : #{@smtpsrv}")
            print_line("SMTPPORT : #{@smtpport}")
        end

                # set MAILFROM
                def cmd_notify_mail_mailfrom(*args)
                        if args[0].nil?
                print_error("Usage: notify_mail_mailfrom user@domain.com")
                                return
                        end
                        @mailfrom = args[0]
                        print_line("MAILFROM => #{@mailfrom}")
                        manage_session_subscriber
                end

                # set MAILTO
                def cmd_notify_mail_mailto(*args)
                        if args[0].nil?
                                print_error("Usage: notify_mail_mailto user@domain.com")
                                return
                        end
                        @mailto = args[0]
                        print_line("MAILTO => #{@mailto}")
                        manage_session_subscriber
                end

                # set SMTPSRV
                def cmd_notify_mail_smtpsrv(*args)
                        if args[0].nil?
                                print_error("Usage: notify_mail_smtpsrv mail.hostname.com")
                                return
                        end
                        @smtpsrv = args[0]
                        print_line("SMTPSRV => #{@smtpsrv}")
                        manage_session_subscriber
                end

                # set SMTPPORT
                def cmd_notify_mail_smtpport(*args)
                        if args[0].nil?
                                print_error("Usage: notify_mail_smtpport 25")
                                return
                        end
                        @smtpport = args[0]
                        print_line("SMTPPORT => #{@smtpport}")
                        manage_session_subscriber
                end

                # Handle event (send an E-mail)
        def on_session_open(session)

            #
            # Mail content
            #
                    mailstr =  "From: Metasploit Hanlder <#{@mailfrom}>\n"
            mailstr << "To: #{@mailto} <#{@mailto}>\n"
            mailstr << "Subject: #{session.type} session #{session.sid} opened (#{session.tunnel_to_s})\n"
            mailstr << "\n"
            if session.info?
                mailstr << "#{session.info.to_s} \n"
            end

            #
            # SMTP send
            #
                        begin
                                Net::SMTP.start(@smtpsrv, @smtpport) do |smtp|
                                        smtp.set_debug_output $stderr
                                        smtp.send_mail mailstr, @mailfrom, @mailto
                                end
                        rescue Exception => e
                                print "Exception occured: " + e
                        end
                        print_status("Notification sent to #{@mailto}")
        end
    end

    def initialize(framework, opts)
        super
        add_console_dispatcher(NotifyMailCommandDispatcher)
    end

    def cleanup
        remove_console_dispatcher('Notify Mail')
    end

    def name
        "Notify Mail"
    end

    def desc
        "Send E-mail notification on new sessions"
    end 
end
end

0 Answers0