metasploit-framework/plugins/db_sqlite3.rb

132 lines
2.5 KiB
Ruby
Raw Normal View History

require 'fileutils'
module Msf
###
#
# This class intializes the database db with a shiny new
# SQLite3 database instance.
#
###
class Plugin::DBSQLite3 < Msf::Plugin
###
#
# This class implements an event handler for db events
#
###
class DBEventHandler
def on_db_host(context, host)
puts "New host event: #{host.address}"
end
end
###
#
# This class implements a sample console command dispatcher.
#
###
class ConsoleCommandDispatcher
include Msf::Ui::Console::CommandDispatcher
#
# The dispatcher's name.
#
def name
"DBDispatcher"
end
#
# Returns the hash of commands supported by this dispatcher.
#
def commands
{
"db_hosts" => "List all hosts in the database db",
"db_services" => "List all services in the database db",
"db_insert" => "Insert a new host into the db",
"db_test" => "Test",
}
end
def cmd_db_hosts(*args)
framework.db.each_host do |host|
print_status("Host: #{host.address}")
end
end
def cmd_db_services(*args)
framework.db.each_service do |host, service|
print_status("Service: host=#{host.address} port=#{service.port} port=#{service.proto}")
end
end
def cmd_db_insert(*args)
print_status("Inserting #{args.length.to_s} hosts...")
args.each do |address|
framework.db.get_host(nil, address)
end
end
def cmd_db_test(*args)
framework.db.get_host(nil, "1.2.3.4")
framework.db.get_host(nil, "1.2.3.5")
framework.db.get_host(nil, "1.2.3.6")
framework.db.each_host do |host|
print_status("Host: #{host.address}")
end
end
end
def initialize(framework, opts)
super
odb = File.join(Msf::Config.install_root, "data", "sql", "sqlite3.db")
ndb = File.join(Msf::Config.install_root, "current.db")
if (File.exists?(ndb))
File.unlink(ndb)
end
FileUtils.copy(odb, ndb)
if (not framework.db.connect("adapter" => "sqlite3", "dbfile" => ndb))
print_status("Failed to connect to the database :(")
return
end
@dbh = DBEventHandler.new
add_console_dispatcher(ConsoleCommandDispatcher)
framework.events.add_db_subscriber(@dbh)
end
def cleanup
framework.events.remove_db_subscriber(@dbh)
remove_console_dispatcher('DBDispatcher')
end
#
# This method returns a short, friendly name for the plugin.
#
def name
"db_sqlite3"
end
#
# This method returns a brief description of the plugin. It should be no
# more than 60 characters, but there are no hard limits.
#
def desc
"Loads a new SQLite3 db and intializes it"
end
protected
end
end