1

セッションが開かれるときにメールを送信する必要があるため、metasploit に問題があります。kali で smtp サーバーを作成しようとしていますが、機能しません。私のユニークな代替手段は、metasploit 用のこのプラグインを使用してメールを送信することですが、 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
4

0 に答える 0