Fixes issue 253 , persistant command options.
git-svn-id: https://beef.googlecode.com/svn/trunk@851 b87d56ec-f9c0-11de-8c8a-61c5e9addfc9
This commit is contained in:
@@ -40,6 +40,7 @@ require 'lib/model/distributedenginerules'
|
||||
require 'lib/model/dynamiccommandinfo'
|
||||
require 'lib/model/dynamicpayloadinfo.rb'
|
||||
require 'lib/model/dynamicpayloads.rb'
|
||||
require 'lib/model/optioncache.rb'
|
||||
|
||||
|
||||
require 'lib/crypto'
|
||||
|
||||
@@ -284,7 +284,19 @@ module BeEF
|
||||
def map_file_to_url(file, path=nil, extension=nil, count=1)
|
||||
return BeEF::AssetHandler.instance.bind(file, path, extension, count)
|
||||
end
|
||||
|
||||
|
||||
def oc_value(name)
|
||||
option = BeEF::Models::OptionCache.first(:name => name)
|
||||
return nil if not option
|
||||
return option.value
|
||||
end
|
||||
|
||||
def apply_defaults()
|
||||
@datastore.each { |opt|
|
||||
opt["value"] = oc_value(opt["name"]) || opt["value"]
|
||||
}
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@use_template
|
||||
|
||||
@@ -87,7 +87,7 @@ class Msf < BeEF::Command
|
||||
case msfoptions[k]['type']
|
||||
when "string","address","port"
|
||||
msfoptions[k]['default'] = rand(32**20).to_s(32) if k == "URIPATH"
|
||||
@info['Data'] << {'name' => k , 'ui_label' => k, 'value' => msfoptions[k]['default']}
|
||||
@info['Data'] << {'name' => k , 'ui_label' => k, 'value' => (oc_value(k) || msfoptions[k]['default'])}
|
||||
when "bool"
|
||||
@info['Data'] << {'name' => k, 'type' => 'checkbox', 'ui_label' => k }
|
||||
when "enum"
|
||||
@@ -95,7 +95,7 @@ class Msf < BeEF::Command
|
||||
msfoptions[k]['enums'].each { |e|
|
||||
enumdata << [e]
|
||||
}
|
||||
@info['Data'] << { 'name' => k, 'type' => 'combobox', 'ui_label' => k, 'store_type' => 'arraystore', 'store_fields' => ['enum'], 'store_data' => enumdata, 'valueField' => 'enum', 'displayField' => 'enum' , 'autoWidth' => true, 'mode' => 'local', 'value' => msfoptions[k]['default']}
|
||||
@info['Data'] << { 'name' => k, 'type' => 'combobox', 'ui_label' => k, 'store_type' => 'arraystore', 'store_fields' => ['enum'], 'store_data' => enumdata, 'valueField' => 'enum', 'displayField' => 'enum' , 'autoWidth' => true, 'mode' => 'local', 'value' => (oc_value(k) || msfoptions[k]['default'])}
|
||||
else
|
||||
print "K => #{k}\n"
|
||||
print "Status => #{msfoptions[k]['advanced']}\n"
|
||||
@@ -107,6 +107,7 @@ class Msf < BeEF::Command
|
||||
|
||||
payloads = msfpayloads['payloads']
|
||||
pl = []
|
||||
pl << [(oc_value('PAYLOAD') || 'generic/shell_bind_tcp')]
|
||||
payloads.each { |p|
|
||||
pl << [p]
|
||||
}
|
||||
@@ -145,11 +146,11 @@ class Msf < BeEF::Command
|
||||
case payload_options[k]['type']
|
||||
when "string","address","port","raw","path", "integer"
|
||||
payload_options[k]['default'] = "127.0.0.1" if k == "RHOST"
|
||||
info['Data'] << {'name' => k , 'ui_label' => k, 'value' => payload_options[k]['default']}
|
||||
info['Data'] << {'name' => k , 'ui_label' => k, 'value' => (oc_value(k) || payload_options[k]['default'])}
|
||||
when "bool"
|
||||
info['Data'] << {'name' => k, 'type' => 'checkbox', 'ui_label' => k }
|
||||
when "enum"
|
||||
info['Data'] << { 'name' => k, 'type' => 'combobox', 'ui_label' => k, 'store_type' => 'arraystore', 'store_fields' => ['enum'], 'store_data' => payload_options[k]['enums'], 'valueField' => 'enum', 'displayField' => 'enum' , 'autoWidth' => true, 'mode' => 'local', 'value' => payload_options[k]['default']}
|
||||
info['Data'] << { 'name' => k, 'type' => 'combobox', 'ui_label' => k, 'store_type' => 'arraystore', 'store_fields' => ['enum'], 'store_data' => payload_options[k]['enums'], 'valueField' => 'enum', 'displayField' => 'enum' , 'autoWidth' => true, 'mode' => 'local', 'value' => (oc_value(k) || payload_options[k]['default'])}
|
||||
else
|
||||
# Debug output if the payload option type isn't found
|
||||
puts "K => #{k}\n"
|
||||
|
||||
@@ -363,6 +363,9 @@ class Modules < BeEF::HttpController
|
||||
raise WEBrick::HTTPStatus::BadRequest, "invalid key param string" if not Filter.has_valid_param_chars?(param)
|
||||
raise WEBrick::HTTPStatus::BadRequest, "first char is num" if Filter.first_char_is_num?(param)
|
||||
definition[param[4..-1]] = params[param]
|
||||
oc = BeEF::Models::OptionCache.first_or_create(:name => param[4..-1])
|
||||
oc.value = params[param]
|
||||
oc.save
|
||||
}
|
||||
|
||||
zombie = Z.first(:session => zombie_session)
|
||||
@@ -416,6 +419,9 @@ class Modules < BeEF::HttpController
|
||||
raise WEBrick::HTTPStatus::BadRequest, "invalid key param string" if not Filter.has_valid_param_chars?(param)
|
||||
raise WEBrick::HTTPStatus::BadRequest, "first char is num" if Filter.first_char_is_num?(param)
|
||||
definition[param[4..-1]] = params[param]
|
||||
oc = BeEF::Models::OptionCache.first_or_create(:name => param[4..-1])
|
||||
oc.value = params[param]
|
||||
oc.save
|
||||
}
|
||||
|
||||
zombie = Z.first(:session => zombie_session)
|
||||
@@ -518,7 +524,7 @@ class Modules < BeEF::HttpController
|
||||
command_modules_json[i] = JSON.parse(e.to_json)
|
||||
i += 1
|
||||
end
|
||||
|
||||
|
||||
if not command_modules_json.empty?
|
||||
return {'success' => 'true', 'command_modules' => command_modules_json}.to_json
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user