Adding the new msfweb tree, using rails 2.2.3 and newer prototype

git-svn-id: file:///home/svn/framework3/trunk@6651 4d416f70-5f16-0410-b530-b9f4589650da
This commit is contained in:
HD Moore
2009-06-14 15:17:53 +00:00
parent ae1d18c88e
commit d69a1f6ff0
1693 changed files with 202931 additions and 0 deletions
+243
View File
@@ -0,0 +1,243 @@
== Welcome to Rails
Rails is a web-application framework that includes everything needed to create
database-backed web applications according to the Model-View-Control pattern.
This pattern splits the view (also called the presentation) into "dumb" templates
that are primarily responsible for inserting pre-built data in between HTML tags.
The model contains the "smart" domain objects (such as Account, Product, Person,
Post) that holds all the business logic and knows how to persist themselves to
a database. The controller handles the incoming requests (such as Save New Account,
Update Product, Show Post) by manipulating the model and directing data to the view.
In Rails, the model is handled by what's called an object-relational mapping
layer entitled Active Record. This layer allows you to present the data from
database rows as objects and embellish these data objects with business logic
methods. You can read more about Active Record in
link:files/vendor/rails/activerecord/README.html.
The controller and view are handled by the Action Pack, which handles both
layers by its two parts: Action View and Action Controller. These two layers
are bundled in a single package due to their heavy interdependence. This is
unlike the relationship between the Active Record and Action Pack that is much
more separate. Each of these packages can be used independently outside of
Rails. You can read more about Action Pack in
link:files/vendor/rails/actionpack/README.html.
== Getting Started
1. At the command prompt, start a new Rails application using the <tt>rails</tt> command
and your application name. Ex: rails myapp
2. Change directory into myapp and start the web server: <tt>script/server</tt> (run with --help for options)
3. Go to http://localhost:3000/ and get "Welcome aboard: You're riding the Rails!"
4. Follow the guidelines to start developing your application
== Web Servers
By default, Rails will try to use Mongrel if it's are installed when started with script/server, otherwise Rails will use WEBrick, the webserver that ships with Ruby. But you can also use Rails
with a variety of other web servers.
Mongrel is a Ruby-based webserver with a C component (which requires compilation) that is
suitable for development and deployment of Rails applications. If you have Ruby Gems installed,
getting up and running with mongrel is as easy as: <tt>gem install mongrel</tt>.
More info at: http://mongrel.rubyforge.org
Say other Ruby web servers like Thin and Ebb or regular web servers like Apache or LiteSpeed or
Lighttpd or IIS. The Ruby web servers are run through Rack and the latter can either be setup to use
FCGI or proxy to a pack of Mongrels/Thin/Ebb servers.
== Apache .htaccess example for FCGI/CGI
# General Apache options
AddHandler fastcgi-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI
# If you don't want Rails to look in certain directories,
# use the following rewrite rules so that Apache won't rewrite certain requests
#
# Example:
# RewriteCond %{REQUEST_URI} ^/notrails.*
# RewriteRule .* - [L]
# Redirect all requests not available on the filesystem to Rails
# By default the cgi dispatcher is used which is very slow
#
# For better performance replace the dispatcher with the fastcgi one
#
# Example:
# RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
RewriteEngine On
# If your Rails application is accessed via an Alias directive,
# then you MUST also set the RewriteBase in this htaccess file.
#
# Example:
# Alias /myrailsapp /path/to/myrailsapp/public
# RewriteBase /myrailsapp
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
# In case Rails experiences terminal errors
# Instead of displaying this message you can supply a file here which will be rendered instead
#
# Example:
# ErrorDocument 500 /500.html
ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
== Debugging Rails
Sometimes your application goes wrong. Fortunately there are a lot of tools that
will help you debug it and get it back on the rails.
First area to check is the application log files. Have "tail -f" commands running
on the server.log and development.log. Rails will automatically display debugging
and runtime information to these files. Debugging info will also be shown in the
browser on requests from 127.0.0.1.
You can also log your own messages directly into the log file from your code using
the Ruby logger class from inside your controllers. Example:
class WeblogController < ActionController::Base
def destroy
@weblog = Weblog.find(params[:id])
@weblog.destroy
logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!")
end
end
The result will be a message in your log file along the lines of:
Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1
More information on how to use the logger is at http://www.ruby-doc.org/core/
Also, Ruby documentation can be found at http://www.ruby-lang.org/ including:
* The Learning Ruby (Pickaxe) Book: http://www.ruby-doc.org/docs/ProgrammingRuby/
* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide)
These two online (and free) books will bring you up to speed on the Ruby language
and also on programming in general.
== Debugger
Debugger support is available through the debugger command when you start your Mongrel or
Webrick server with --debugger. This means that you can break out of execution at any point
in the code, investigate and change the model, AND then resume execution!
You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug'
Example:
class WeblogController < ActionController::Base
def index
@posts = Post.find(:all)
debugger
end
end
So the controller will accept the action, run the first line, then present you
with a IRB prompt in the server window. Here you can do things like:
>> @posts.inspect
=> "[#<Post:0x14a6be8 @attributes={\"title\"=>nil, \"body\"=>nil, \"id\"=>\"1\"}>,
#<Post:0x14a6620 @attributes={\"title\"=>\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]"
>> @posts.first.title = "hello from a debugger"
=> "hello from a debugger"
...and even better is that you can examine how your runtime objects actually work:
>> f = @posts.first
=> #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
>> f.
Display all 152 possibilities? (y or n)
Finally, when you're ready to resume execution, you enter "cont"
== Console
You can interact with the domain model by starting the console through <tt>script/console</tt>.
Here you'll have all parts of the application configured, just like it is when the
application is running. You can inspect domain models, change values, and save to the
database. Starting the script without arguments will launch it in the development environment.
Passing an argument will specify a different environment, like <tt>script/console production</tt>.
To reload your controllers and models after launching the console run <tt>reload!</tt>
== dbconsole
You can go to the command line of your database directly through <tt>script/dbconsole</tt>.
You would be connected to the database with the credentials defined in database.yml.
Starting the script without arguments will connect you to the development database. Passing an
argument will connect you to a different database, like <tt>script/dbconsole production</tt>.
Currently works for mysql, postgresql and sqlite.
== Description of Contents
app
Holds all the code that's specific to this particular application.
app/controllers
Holds controllers that should be named like weblogs_controller.rb for
automated URL mapping. All controllers should descend from ApplicationController
which itself descends from ActionController::Base.
app/models
Holds models that should be named like post.rb.
Most models will descend from ActiveRecord::Base.
app/views
Holds the template files for the view that should be named like
weblogs/index.html.erb for the WeblogsController#index action. All views use eRuby
syntax.
app/views/layouts
Holds the template files for layouts to be used with views. This models the common
header/footer method of wrapping views. In your views, define a layout using the
<tt>layout :default</tt> and create a file named default.html.erb. Inside default.html.erb,
call <% yield %> to render the view using this layout.
app/helpers
Holds view helpers that should be named like weblogs_helper.rb. These are generated
for you automatically when using script/generate for controllers. Helpers can be used to
wrap functionality for your views into methods.
config
Configuration files for the Rails environment, the routing map, the database, and other dependencies.
db
Contains the database schema in schema.rb. db/migrate contains all
the sequence of Migrations for your schema.
doc
This directory is where your application documentation will be stored when generated
using <tt>rake doc:app</tt>
lib
Application specific libraries. Basically, any kind of custom code that doesn't
belong under controllers, models, or helpers. This directory is in the load path.
public
The directory available for the web server. Contains subdirectories for images, stylesheets,
and javascripts. Also contains the dispatchers and the default HTML files. This should be
set as the DOCUMENT_ROOT of your web server.
script
Helper scripts for automation and generation.
test
Unit and functional tests along with fixtures. When using the script/generate scripts, template
test files will be generated for you and placed in this directory.
vendor
External libraries that the application depends on. Also includes the plugins subdirectory.
If the app has frozen rails, those gems also go here, under vendor/rails/.
This directory is in the load path.
+10
View File
@@ -0,0 +1,10 @@
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require(File.join(File.dirname(__FILE__), 'config', 'boot'))
require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'tasks/rails'
@@ -0,0 +1,90 @@
# Author: HDM <hdm@metasploit.com> and LMH <lmh@info-pull.com>
# Description: Helper methods for the controllers, including search and other
# functionality.
# Filters added to this controller will be run for all controllers in the application.
# Likewise, all the methods added will be available for all controllers.
class ApplicationController < ActionController::Base
# Search functionality for modules
def search_modules(mlist, terms)
res = {}
unless terms
return nil
end
terms.strip!
# Match search terms
mlist.each do |m|
if (terms.length == 0)
res[m.refname]=m
next
end
terms.split(/,/).each do |term|
if (m.name.downcase.index(term.downcase))
res[m.refname]=m
break
end
if (m.refname.downcase.index(term.downcase))
res[m.refname]=m
break
end
if (m.description.downcase.index(term.downcase))
res[m.refname]=m
break
end
end
end
# Sort the modules by name
list = []
res.keys.sort{|a,b| res[a].name <=> res[b].name }.each do |n|
list << res[n]
end
list
end
# Returns the module by id of specified type.
def get_view_for_module(module_type, module_refname)
@tmod = nil
# Get available moduls of specified type
case module_type
when "exploit"
@mod_list = Exploit.find_all()
when "auxiliary"
@mod_list = Auxiliary.find_all()
when "payload"
@mod_list = Payload.find_all()
when "nop"
@mod_list = Nop.find_all()
when "encoder"
@mod_list = Encoder.find_all()
else
return @tmod
end
# Return the module if found
if module_refname
@mod_list.each do |m|
if m.refname.gsub('/', ':') == module_refname
@tmod = m
break
end
end
end
return @tmod
end
end
@@ -0,0 +1,85 @@
#
# Original version is Copyright (c) 2006 LMH <lmh[at]info-pull.com>
# Added to Metasploit under the terms of the Metasploit Framework License v1.2
#
# Description: The auxiliary controller of msfweb v.3. Handles views, listing
# and other actions related to auxiliary modules. Code and processing goes here.
# Instance variables, final values, etc, go into views.
class AuxiliariesController < ApplicationController
layout 'windows'
def list
end
def view
@tmod = get_view_for_module("auxiliary", params[:refname])
unless @tmod
render_text "Unknown module specified."
end
end
def config
# Retrieve object to module with the given refname
@tmod = get_view_for_module("auxiliary", params[:refname])
unless @tmod
render_text "Unknown module specified."
end
if (@tmod.actions.length > 0)
@act = @tmod.actions[params[:act].to_i]
unless @act
render_text "Unknown action specified."
end
end
@cur_step = nil
if params[:step]
@cur_step = params[:step]
end
if @cur_step == "run"
# Always show the option page after an exploit is launched
@cur_step = "config"
# Create a new console driver instance
@cid = $msfweb.create_console()
@con = $msfweb.consoles[@cid]
# Use the selected module
@con.execute("use auxiliary/#{@tmod.refname}")
@aux = @con.active_module
if (@act)
@aux.datastore['ACTION'] = @act.name
end
# Configure the selected options
params.each_key do |k|
aopt = k.to_s.match(/^aopt_/) ? true : false
name = k.to_s.gsub(/^.opt_/, '')
if (aopt)
if (params[k] and params[k].to_s.length > 0)
@aux.datastore[name] = params[k].to_s
end
end
end
begin
@aux.options.validate(@aux.datastore)
@con.write("run\n")
@aux_console = @cid
rescue ::Exception => e
$msfweb.destroy_console(@cid)
@aux_error = e.to_s
end
end
end
end
@@ -0,0 +1,109 @@
#
# Author: Metasploit LLC
# Description: The AJAX console controller of msfweb
#
class ConsoleController < ApplicationController
#
# Show the working shell and related facilities.
#
def index
cid = params[:id]
if (not (cid and $msfweb.consoles[cid]))
cid = $msfweb.create_console
if (params[:sid])
$msfweb.consoles[cid].write("sessions -i #{params[:sid]}\n")
$msfweb.consoles[cid].write("\n\n")
end
redirect_to :id => cid
return
end
script = "// Metasploit Web Console Data\n"
out = ""
@cid = params[:id]
@console = $msfweb.consoles[@cid]
if(params[:cmd])
@console.write(params[:cmd] + "\n")
end
if(params[:read])
out = @console.read() || ''
end
if(params[:special])
case params[:special]
when 'kill'
@console.session_kill
when 'detach'
@console.session_detach
end
end
if(params[:tab])
opts = []
cmdl = params[:tab]
out = ""
if (not @console.busy and params[:tab].strip.length > 0)
opts = @console.tab_complete(params[:tab]) || []
end
if (opts.length == 1)
cmdl = opts[0]
else
if (opts.length == 0)
# aint got nothin
else
cmd_top = opts[0]
depth = 0
while (depth < cmd_top.length)
match = true
opts.each do |line|
next if line[depth] == cmd_top[depth]
match = false
break
end
break if not match
depth += 1
end
if (depth > 0)
cmdl = cmd_top[0, depth]
end
out << "\n" + opts.map{ |c| ">> " + c }.join("\n")
end
end
tln = cmdl.unpack('C*').map{|c| sprintf("%%%.2x", c)}.join
script += "var con_tabbed = unescape('#{tln}');\n"
end
if(params[:read])
out = out.unpack('C*').map{|c| sprintf("%%%.2x", c)}.join
pro = @console.prompt.unpack('C*').map{|c| sprintf("%%%.2x", c)}.join
if (@console.busy)
pro = '(running)'.unpack('C*').map{|c| sprintf("%%%.2x", c)}.join
end
script += "var con_prompt = unescape('#{pro}');\n"
script += "var con_update = unescape('#{out}');\n"
send_data(script, :type => "text/javascript")
end
end
end
@@ -0,0 +1,22 @@
# Author: LMH <lmh@info-pull.com>
# Description: The encoder controller of msfweb v.3. Handles views, listing
# and other actions related to encoder modules. Code and processing goes here.
# Instance variables, final values, etc, go into views.
class EncodersController < ApplicationController
layout 'windows'
def list
end
def view
@tmod = get_view_for_module("encoder", params[:refname])
unless @tmod
render_text "Unknown module specified."
end
end
def encode
end
end
@@ -0,0 +1,124 @@
# Author: LMH <lmh@info-pull.com>
# Description: The exploit controller of msfweb v.3. Handles views, listing
# and other actions related to exploit modules. Code and processing goes here.
# Instance variables, final values, etc, go into views.
class ExploitsController < ApplicationController
layout 'windows'
def list
end
def view
@tmod = get_view_for_module("exploit", params[:refname])
unless @tmod
render_text "Unknown module specified."
end
end
def config
# Retrieve object to module with the given refname
@tmod = get_view_for_module("exploit", params[:refname])
unless @tmod
render_text "Unknown module specified."
end
# Get target, using index given in 'target' parameter
@target = @tmod.targets[params[:target].to_i]
unless @target
render_text "Unknown target specified."
end
@tmod.datastore['TARGET'] = params[:target].to_i
@cur_step = nil
if params[:step]
@cur_step = params[:step]
end
if (params[:payload])
if (params[:payload] =~ /^\d+$/ )
@payload_ref = @tmod.compatible_payloads[params[:payload].to_i]
else
@tmod.compatible_payloads.each_with_index do |ref, i|
if(ref[0] == params[:payload])
@payload_ref = ref
end
end
end
end
if @cur_step == "exploit"
# Always show the option page after an exploit is launched
@cur_step = "config"
unless @payload_ref
render_text "Unknown payload specified or not supported."
end
@payload_name, @payload_class = @payload_ref
@payload_inst = @payload_class.new
# Create a new console driver instance
@cid = $msfweb.create_console()
@con = $msfweb.consoles[@cid]
# Use the selected module
@con.execute("use exploit/#{@tmod.refname}")
# Configure the target and payload
@exploit = @con.active_module
@exploit.datastore['PAYLOAD'] = @payload_name
@exploit.datastore['TARGET'] = params[:target].to_i
# Configure the selected options
params.each_key do |k|
eopt = k.to_s.match(/^eopt_/) ? true : false
popt = k.to_s.match(/^popt_/) ? true : false
name = k.to_s.gsub(/^.opt_/, '')
if (eopt or popt)
if (params[k] and params[k].to_s.length > 0)
@exploit.datastore[name] = params[k].to_s
end
end
end
# Validate the exploit and payload options
@payload_inst.share_datastore(@exploit.datastore)
begin
@exploit.options.validate(@exploit.datastore)
@payload_inst.options.validate(@payload_inst.datastore)
@con.write("exploit\n")
@exploit_console = @cid
rescue ::Exception => e
$msfweb.destroy_console(@cid)
@exploit_error = e.to_s
end
end
if @cur_step == "config"
unless @payload_ref
render_text "Unknown payload specified or not supported."
end
@payload_name, @payload_class = @payload_ref
@payload_inst = @payload_class.new
else
@payloads = @tmod.compatible_payloads
end
end
end
@@ -0,0 +1,49 @@
# Author: LMH <lmh@info-pull.com>
# Description: The IDE controller of msfweb v.3. Handles views, processing,
# help and all actions related to the msfweb IDE for exploit development.
# Now Metasploit has a multi-platform IDE. Find bug. Click. Profit. (tm)
class IdeController < ApplicationController
layout 'msfide'
def index
redirect_to :action => "start"
end
def start
end
def advanced
end
def wizard
if params[:exploit]
@the_exploit = session[:exploit] = params[:exploit]
@step = @the_exploit["step"].to_i
elsif @step.nil?
redirect_to :action => start
end
flash[:error] = ""
end
def dump_current()
unless params[:format]
render_text "Missing format parameter."
return false
end
unless session[:exploit]
render_text "Missing exploit data."
return false
end
case params[:format]
when "yaml"
send_data YAML.dump(session[:exploit]), :type => "text/plain"
else
render_text "Missing format parameter."
return false
end
end
end
@@ -0,0 +1,10 @@
class JobsController < ApplicationController
layout 'windows'
def list
@jobs = Job.find_all()
end
def stop
end
end
@@ -0,0 +1,47 @@
#
# Original version is Copyright (c) 2006 LMH <lmh[at]info-pull.com>
# Added to Metasploit under the terms of the Metasploit Framework License v1.2
# Additions Copyright (C) 2006-2007 Metasploit LLC
#
# Description: The main controller of msfweb v.3
#
class MsfController < ApplicationController
layout 'msfweb', :except => 'search'
def index
end
# Generic search function as suggested by HDM
def search
if params[:module_type]
@module_type = params[:module_type]
if params[:clean_list] and params[:clean_list].to_i == 1
@clean_list = true
else
@clean_list = false
end
if params[:terms]
case @module_type
when 'exploits'
@results = search_modules(Exploit.find_all(), params[:terms])
when 'auxiliaries'
@results = search_modules(Auxiliary.find_all(), params[:terms])
when 'payloads'
@results = search_modules(Payload.find_all(), params[:terms])
when 'nops'
@results = search_modules(Nop.find_all(), params[:terms])
when 'encoders'
@results = search_modules(Encoder.find_all(), params[:terms])
else
render_text "Module type unknown."
end
else
render_text "No search terms provided."
end
else
render_text "Module type not specified."
end
end
end
@@ -0,0 +1,22 @@
# Author: LMH <lmh@info-pull.com>
# Description: The nop controller of msfweb v.3. Handles views, listing
# and other actions related to nop modules. Code and processing goes here.
# Instance variables, final values, etc, go into views.
class NopsController < ApplicationController
layout 'windows'
def list
end
def view
@tmod = get_view_for_module("nop", params[:refname])
unless @tmod
render_text "Unknown module specified."
end
end
def generate
end
end
@@ -0,0 +1,23 @@
#
# Original version is Copyright (c) 2007 Mike Whitehead <mwhite22[at]caledonian.ac.uk>
# Added to Metasploit under the terms of the Metasploit Framework License v1.2
#
# Description: MSFWeb Options controller (Skinning, etc)
#
class OptionsController < ApplicationController
layout 'windows'
def index
@force_reload = false
p params
p cookies
if (params[:style])
cookies[:style] = params[:style]
@force_reload = true
end
end
end
@@ -0,0 +1,72 @@
# Author: LMH <lmh@info-pull.com>
# Description: The payload controller of msfweb v.3. Handles views, listing
# and other actions related to payload modules. Code and processing goes here.
# Instance variables, final values, etc, go into views.
class PayloadsController < ApplicationController
layout 'windows'
def list
end
def view
@tmod = get_view_for_module("payload", params[:refname])
unless @tmod
render_text "Unknown module specified."
end
# Catch non-standard payloads
begin
@tmod.generate
rescue => e
render_text "This interface does not support generic payloads."
end
@module_step = (params[:step] || 0).to_i
if @module_step == 1
modinst = Payload.create(@tmod.refname)
badchars = params[:badchars]
pencoder = params[:encoder]
pformat = params[:format]
max_size = (params[:max_size] || 0).to_i
payload_opts = ''
params.each_pair { |k, v|
next if (v == nil or v.length == 0)
if (k =~ /^opt_(.*)$/)
payload_opts += "#{$1}=#{v} "
end
}
badchars_buff = ""
badchars.split(/,|\s+/).each do |c|
c.strip!
next if c.length == 0
if(c =~ /^0x/)
badchars_buff << c.hex.chr
else
badchars_buff << c.to_i.chr
end
end
begin
@generation = modinst.generate_simple(
'Encoder' => (pencoder == '__default') ? nil : pencoder,
'BadChars' => badchars_buff,
'Format' => pformat || 'c',
'OptionStr' => payload_opts,
'MaxSize' => (max_size == 0) ? nil : max_size)
rescue
@generation = $!
end
end
# end of view method
end
def generate
end
end
@@ -0,0 +1,13 @@
#
# Author: Metasploit LLC
# Description: The AJAX console controller of msfweb
#
class SessionsController < ApplicationController
layout 'windows'
def list
@sessions = Session.find_all()
end
end
@@ -0,0 +1,80 @@
# Copyright (c) 2006 L.M.H <lmh@info-pull.com>
# All Rights Reserved.
# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
# Returns a hash with ruby version, platform and Metasploit version.
def return_env_info()
ret = {}
ret[:platform] = RUBY_PLATFORM
ret[:rubyver] = RUBY_VERSION
ret[:msfver] = Msf::Framework::Version
return ret
end
# Return the JavaScript code necessary for "supporting" :hover pseudo-class
# in MSIE (ex. used in the top menu bar).
def msie_hover_fix(css_class_name)
return "onmouseover=\"this.className='#{css_class_name}'\" onmouseout=\"this.className=''\""
end
# Adapted from old msfweb code, returns HTML necessary for displaying icons
# associated with a specific module.
# Added missing platform icons (HPUX, Irix, etc).
def module_platform_icons(platform)
return "" if (platform.nil?)
# If this module has no platforms, then we don't show any icons...
return "" if (platform.empty?)
# Otherwise, get the platform specific information...
html = ""
[
[ Msf::Module::Platform::Windows, "windows.png", "win32" ],
[ Msf::Module::Platform::Linux, "linux.png", "linux" ],
[ Msf::Module::Platform::Solaris, "sun.png", "solaris" ],
[ Msf::Module::Platform::OSX, "apple.png", "osx" ],
[ Msf::Module::Platform::BSD, "bsd.gif", "bsd" ],
[ Msf::Module::Platform::BSDi, "bsd.gif", "bsdi" ],
[ Msf::Module::Platform::HPUX, "hp.png", "hpux" ],
[ Msf::Module::Platform::Irix, "sgi.png", "irix" ],
[ Msf::Module::Platform::Unix, "unix.png", "unix" ]
].each do |plat|
if (platform.supports?(Msf::Module::PlatformList.new(plat[0])) == true)
html += "<img src=\"/images/platform-icons/#{plat[1]}\" alt=\"#{plat[2]}\"/>"
end
end
return html
end
# Returns a hash suitable for use with select method (FormHelper stuff) of
# the available platforms.
def return_selectable_platforms()
all_platforms = Msf::Module::Platform::find_children
select_list = {}
all_platforms.each do |p|
select_list[p.realname] = p
end
return select_list
end
# Returns an array suitable for use with select method (FormHelper stuff) of
# the supported architectures.
def return_selectable_architectures()
return ARCH_ALL
end
# Returns an array suitable for the select form option helper,
# of the available exploit mixins. thanks skape for the new method.
def return_selectable_exploit_mixins()
Msf::Exploit::mixins
end
# Returns an array suitable for the select form option helper,
# of the available module licenses.
def return_selectable_licenses()
LICENSES
end
end
@@ -0,0 +1,2 @@
module AuxiliariesHelper
end
@@ -0,0 +1,2 @@
module EncodersHelper
end
@@ -0,0 +1,2 @@
module ExploitsHelper
end
+2
View File
@@ -0,0 +1,2 @@
module IdeHelper
end
+2
View File
@@ -0,0 +1,2 @@
module JobsHelper
end
+2
View File
@@ -0,0 +1,2 @@
module MsfHelper
end
@@ -0,0 +1,2 @@
module MsfconsoleHelper
end
+2
View File
@@ -0,0 +1,2 @@
module NopsHelper
end
@@ -0,0 +1,2 @@
module PayloadsHelper
end
@@ -0,0 +1,2 @@
module SessionsHelper
end
+7
View File
@@ -0,0 +1,7 @@
class Auxiliary
def self.find_all()
mods = []
$msframework.auxiliary.each_module { |n,m| mods << m.new }
mods
end
end
+7
View File
@@ -0,0 +1,7 @@
class Encoder
def self.find_all()
mods = []
$msframework.encoders.each_module { |n,m| mods << m.new }
mods
end
end
+7
View File
@@ -0,0 +1,7 @@
class Exploit
def self.find_all()
mods = []
$msframework.exploits.each_module { |n,m| mods << $msframework.exploits.create(n) }
mods
end
end
+5
View File
@@ -0,0 +1,5 @@
class Job
def self.find_all()
$msframework.jobs
end
end
+7
View File
@@ -0,0 +1,7 @@
class Nop
def self.find_all()
mods = []
$msframework.nops.each_module { |n,m| mods << m.new }
mods
end
end
+12
View File
@@ -0,0 +1,12 @@
class Payload
def self.find_all()
mods = []
$msframework.payloads.each_module { |n,m| mods << m.new }
mods
end
def self.create(refname)
modinst = $msframework.payloads.create(refname)
modinst
end
end
+5
View File
@@ -0,0 +1,5 @@
class Session
def self.find_all()
$msframework.sessions
end
end
@@ -0,0 +1,160 @@
<%
def draw_option(name, opt)
defval = h(opt.default || '')
if (params[name.to_sym])
defval = params[name.to_sym].to_s
end
case opt.class.to_s
when 'Msf::OptEnum'
ret = '<select name="' + name + '">' + "\n"
opt.enums.sort.each do |val|
sel = (val == defval) ? 'SELECTED' : ''
ret << '<option value="' + val + '"' + " #{sel}>" + h(val) + "</option>\n"
end
ret << "</select>\n"
ret
else
'<input type="text" name="' + name + '" value="' + defval + '" />'
end
end
%>
<table width="100%" align="center" cellspacing="0" cellpadding="3" border="0">
<tr>
<td width="100%" class="EAconf_moduleName" colspan="2">
<%= h(@tmod.name) %> <br />
</td>
</tr>
<tr>
<td height="10">
</td>
</tr>
<% if @aux_error %>
<tr>
<td width="100%" class="moduleError" colspan="2">
Validation Error: <%= h(@aux_error) %><br />
</td>
</tr>
<% end %>
<% if @aux_console %>
<tr>
<td width="100%" class="moduleError" colspan="2">
Auxiliary launched. If the auxiliary console window does not appear, please click
<a href="#" onclick="window.parent.openConsoleWindowExploit(<%= @aux_console %>);">here</a>.
</td>
</tr>
<% end %>
<p>Please enter all of the required options and press 'Launch Auxiliary' to continue.</p>
<tr>
<th colspan="2" class="moduleOptionsHeader">
CURRENT CONFIGURATION -
<%= link_to "change action", :action => "view", :refname => h(params[:refname]) %>
</th>
</tr>
<tr>
<td class="opt_name">AUXILIARY</td>
<td><%= @tmod.refname %></td>
</tr>
<tr>
<td class="opt_name">ACTION</td>
<td><%= h(@act ? @act.name : 'Default Action') %></td>
</tr>
<tr>
<th colspan="2" class="moduleOptionsHeader">STANDARD OPTIONS</th>
</tr>
<form action="/auxiliaries/config" method="post">
<%= hidden_field_tag "refname", h(params[:refname]) %>
<%= hidden_field_tag "step", "run" %>
<%= hidden_field_tag "act", h(params[:act]) %>
<% @tmod.options.sort.each { |name, option|
next if (option.advanced?)
next if (option.evasion?) %>
<tr>
<td class="opt_name"><%= name %></td>
<td class="opt_required"><%= (option.required?) ? "Required" : "" %></td>
</tr>
<tr>
<td><%= html_escape(option.desc) %> (type: <%= option.type %>)</td>
<td>
<%= draw_option('aopt_'+h(name), option) %>
</td>
</tr>
<% } %>
<tr>
<th colspan="2"><br/><%= submit_tag "Launch Auxiliary" %><br/></th>
</tr>
<tr>
<th colspan="2" class="moduleOptionsHeader">ADVANCED OPTIONS</th>
</tr>
<% @tmod.options.sort.each { |name, option|
next if not option.advanced? %>
<tr>
<td class="opt_name"><%= name %></td>
<td class="opt_required"><%= (option.required?) ? "Required" : "" %></td>
</tr>
<tr>
<td><%= html_escape(option.desc) %> (type: <%= option.type %>)</td>
<td>
<%= draw_option('aopt_'+h(name), option) %>
</td>
</tr>
<% } %>
<tr>
<th colspan="2"><br/><%= submit_tag "Launch Auxiliary" %><br/></th>
</tr>
<tr>
<th colspan="2" class="moduleOptionsHeader">EVASION OPTIONS</th>
</tr>
<% @tmod.options.sort.each { |name, option|
next if not option.evasion? %>
<tr>
<td class="opt_name"><%= name %></td>
<td class="opt_required"><%= (option.required?) ? "Required" : "" %></td>
</tr>
<tr>
<td><%= html_escape(option.desc) %> (type: <%= option.type %>)</td>
<td>
<%= draw_option('aopt_'+h(name), option) %>
</td>
</tr>
<% } %>
<tr>
<th colspan="2"><br/><%= submit_tag "Launch Auxiliary" %><br/></th>
</tr>
</form>
<% if @aux_console %>
<script>
window.parent.openConsoleWindowExploit(<%= @aux_console %>);
</script>
<% end %>
</table>
@@ -0,0 +1,13 @@
<div id="module-search-box">
<span>Search</span>
<input id="module_search" name="terms" type="text" size="55" value=""/>
<img alt="Spinner" id="search_spinner" src="/images/spinner.gif" style="display: none;" />
</div>
<div id="search_results">
</div>
<script type="text/javascript">
document.getElementById('module_search').focus();
generic_live_search('module_search', 'auxiliaries', 'search_spinner', 0);
</script>
@@ -0,0 +1,2 @@
<h1>Auxiliaries#run</h1>
<p>Find me in app/views/auxiliaries/run.rhtml</p>
@@ -0,0 +1,75 @@
<table align="center" cellspacing="0" cellpadding="0" border="0" class="EAview_moduleFull">
<tr>
<td width="100%" class="EAview_moduleName">
<%= h(@tmod.name) %> <br />
</td>
</tr>
<tr>
<td height="10">
</td>
</tr>
<tr>
<td width="100%" class="EAview_moduleDescription">
<%= @tmod.description.split("\n\n").map{ |t| h(t) }.join("<br/><br/>") %>
</td>
</tr>
<tr>
<td height="10">
</td>
</tr>
<tr>
<td width="100%" class="EAview_moduleAuthor">
This module (v<%= h @tmod.version.gsub(/\$Revision:\s+|\s+\$/, '') %>) was
provided by <%= h @tmod.author.map{ |a| a.to_s.gsub(/\<.*/, '') }.join(' and ').strip %>,
under the <%= @tmod.license %>.
</td>
</tr>
<tr>
<td height="10">
</td>
</tr>
<tr>
<td width="100%" class="EAview_moduleTargets_Title">
Select a target to continue:
</td>
</tr>
<tr>
<td width="100%" class="EAview_moduleTargets">
<ul>
<% if @tmod.actions.length > 0 %>
<% p @tmod.actions %>
<% @tmod.actions.each_with_index { |act, idx| %>
<li><%= link_to h(act.name), :action => "config", :refname => @tmod.refname.gsub('/', ':'), :act => idx %></a></li>
<% } %>
<% else %>
<li><%= link_to 'Default Action', :action => "config", :refname => @tmod.refname.gsub('/', ':')%></a></li>
<% end %>
</ul>
</td>
</tr>
<% if (@tmod.references.length > 0) %>
<tr>
<td height="10">
</td>
</tr>
<tr>
<td width="100%" class="EAview_moduleReferences_Title">
External references:
</td>
</tr>
<tr>
<td width="100%" class="EAview_moduleReferences">
<ul>
<% @tmod.references.each { |ref| %>
<% if (ref.kind_of?(Msf::Module::SiteReference)) %>
<li><a href="<%= ref.site %>" target="_blank"><%= h(ref.to_s) %></a></li>
<% else %>
<li><%= h(ref.to_s) %></li>
<% end %>
<% } %>
</ul>
</td>
</tr>
<% end %>
</table>
+51
View File
@@ -0,0 +1,51 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="eng">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="Author" content="LMH (lmh@info-pull.com)" />
<meta name="Copyright" content="(c) 2006, LMH (lmh@info-pull.com)" />
<title>Metasploit Console</title>
<% ["prototype","effects","controls","window","application","console","cookiecheck"].each do |js| %>
<%= javascript_include_tag js %><% end %>
<script>document.writeln('<link rel="stylesheet" type="text/css" href="' + consoleStyle +'">');</script>
</head>
<body onload="console_init(<%=params[:id]%>)">
<div id="console_window">
<div id="console_output">
Welcome to the Metasploit Web Console!
<br/><br/>
</div>
<table id="console_command_bar" border=0 padding=4 cellspacing=0 width='100%'>
<tr>
<td
nowrap='true'
valign='top'
id="console_prompt"
>
<%=h @console.prompt %>
</td>
<td nowrap='true' width='100%'>
<textarea
id="console_input"
class="input"
wrap="off"
onkeydown="return console_keydown(event)"
onkeypress="return console_keypress(event)"
rows="1"
></textarea>
</td>
</tr>
</table>
</div>
</body>
</html>
@@ -0,0 +1,2 @@
<h1>Encoders#encode</h1>
<p>Find me in app/views/encoders/encode.rhtml</p>
+12
View File
@@ -0,0 +1,12 @@
<div id="module-search-box">
<span>Search</span>
<input id="module_search" name="terms" type="text" size="55" value=""/>
<img alt="Spinner" id="search_spinner" src="/images/spinner.gif" style="display: none;" />
<div id="search_results"></div>
</div>
<script type="text/javascript">
document.getElementById('module_search').focus();
generic_live_search('module_search', 'encoders', 'search_spinner', 0);
</script>
+46
View File
@@ -0,0 +1,46 @@
<table align="center" width="100%" cellspacing="0" cellpadding="15" border="0">
<tr width="100%" align="center">
<p class="moduleName">
<%= h(@tmod.name) %> <br />
</p>
</tr>
<tr width="100%" align="center">
<blockquote>
<p class="moduleDescription">
<%= h(@tmod.description) %>
</p>
</blockquote>
</tr>
<tr width="100%" align="center">
<blockquote>
<p class="moduleDescription">
This module (revision <%= h @tmod.version.gsub(/\$Revision:\s+|\s+\$/, '') %>) was provided by <%= h @tmod.author.map{ |a| a.to_s.gsub(/\<.*/, '') }.join(' and ').strip %>, under the <%= @tmod.license %>.
</p>
</blockquote>
</tr>
<% if (@tmod.references.length > 0) %>
<tr width="100%" align="center">
<blockquote>
<p class="moduleDescription">
External references:
<ul class="moduleReferences">
<% @tmod.references.each { |ref| %>
<% if (ref.kind_of?(Msf::Module::SiteReference)) %>
<li><a href="<%= ref.site %>" target="_blank">
<%= h(ref.to_s) %></a></li>
<% else %>
<li><%= h(ref.to_s) %></li>
<% end %>
<% } %>
</ul>
</p>
</blockquote>
</tr>
<% end %>
</table>
+264
View File
@@ -0,0 +1,264 @@
<%
def draw_option(name, opt)
defval = h(opt.default || '')
if (params[name.to_sym])
defval = params[name.to_sym].to_s
end
case opt.class.to_s
when 'Msf::OptEnum'
ret = '<select name="' + h(name) + '">' + "\n"
opt.enums.sort.each do |val|
sel = (val == defval) ? 'SELECTED' : ''
ret << '<option value="' + h(val) + '"' + " #{sel}>" + h(val) + "</option>\n"
end
ret << "</select>\n"
ret
else
'<input type="text" name="' + h(name) + '" value="' + defval + '" />'
end
end
%>
<table align="center" cellspacing="0" cellpadding="3" width="100%" class="EAconf_moduleFull">
<tr>
<td width="100%" class="EAconf_moduleName" colspan="2">
<%= h(@tmod.name) %> <br />
</td>
</tr>
<tr>
<td height="10" colspan="2">
</td>
</tr>
<tr>
<td width="100%" colspan="2">
<p>Select payload for target <strong><%= h(@target.name) %></strong>:</p>
</td>
</tr>
<tr>
<td height="10" colspan="2">
</td>
</tr>
<% if @exploit_error %>
<tr>
<td width="100%" class="moduleError" colspan="2">
Validation Error: <%= h(@exploit_error) %><br />
</td>
</tr>
<% end %>
<% if @exploit_console %>
<tr>
<td width="100%" class="moduleError" colspan="2">
Exploit launched. If the exploit console window does not appear, please click
<a href="#" onclick="javascript:window.parent.openConsoleWindowExploit(<%= @exploit_console %>);">here</a>.
</td>
</tr>
<% end %>
<% if @cur_step == nil %>
<tr>
<th colspan="2" class="moduleOptionsHeader">
CURRENT CONFIGURATION - <%= link_to "change target", :action => "view", :refname => h(params[:refname]) %>
</th>
</tr>
<tr>
<td class="opt_name">EXPLOIT</td>
<td><%= @tmod.refname %></td>
</tr>
<tr>
<td class="opt_name">TARGET</td>
<td><%= @target.name %></td>
</tr>
<tr>
<th class="moduleOptionsHeader">Name</th>
<th class="moduleOptionsHeader">Description</th>
</tr>
<%
rcol_a = 'item_row_col_a'
rcol_b = 'item_row_col_b'
rcol = rcol_b
%>
<% @payloads.each_with_index do |p, idx| %>
<tr class='<%=h rcol = (rcol == rcol_a) ? rcol_b : rcol_a %>'>
<% o = p[1].new %>
<td><%= link_to h(p[0]), :refname => @tmod.refname.gsub('/', ':'), :step => "config",
:target => h(params[:target].to_i), :payload => idx %></td>
<td><%= h(o.description) %></td>
</tr>
<% end %>
<% elsif @cur_step == "config" %>
<p>Please enter all of the required options and press 'Launch Exploit' to continue.</p>
<tr>
<th colspan="2" class="moduleOptionsHeader">
CURRENT CONFIGURATION -
<%= link_to "change payload", :action => "config", :refname => h(params[:refname]) %>
</th>
</tr>
<tr>
<td class="opt_name">EXPLOIT</td>
<td><%= h @tmod.refname %></td>
</tr>
<tr>
<td class="opt_name">TARGET</td>
<td><%= h @target.name %></td>
</tr>
<tr>
<td class="opt_name">PAYLOAD</td>
<td><%= h @payload_name %></td>
</tr>
<tr>
<th colspan="2" class="moduleOptionsHeader">STANDARD OPTIONS</th>
</tr>
<form action="/exploits/config" method="post">
<%= hidden_field_tag "refname", h(params[:refname]) %>
<%= hidden_field_tag "step", "exploit" %>
<%= hidden_field_tag "target", h(params[:target]) %>
<%= hidden_field_tag "payload", h(params[:payload]) %>
<% @tmod.options.sort.each { |name, option|
next if (option.advanced?)
next if (option.evasion?) %>
<tr>
<td class="opt_name"><%= h name %></td>
<td class="opt_required"><%= (option.required?) ? "Required" : "" %></td>
</tr>
<tr>
<td><%= h option.desc %> (type: <%= h option.type %>)</td>
<td>
<%= draw_option('eopt_'+h(name), option) %>
</td>
</tr>
<% } %>
<% @payload_inst.options.sort.each { |name, option|
next if (option.advanced?)
next if (option.evasion?) %>
<tr>
<td class="opt_name"><%= h name %></td>
<td class="opt_required"><%= (option.required?) ? "Required" : "" %></td>
</tr>
<tr>
<td><%= h option.desc %> (type: <%= h option.type %>)</td>
<td>
<%= draw_option('popt_'+h(name), option) %>
</td>
</tr>
<% } %>
<tr>
<th colspan="2"><br/><%= submit_tag "Launch Exploit" %><br/></th>
</tr>
<tr>
<th colspan="2" class="moduleOptionsHeader">ADVANCED OPTIONS</th>
</tr>
<% @tmod.options.sort.each { |name, option|
next if not option.advanced? %>
<tr>
<td class="opt_name"><%= h name %></td>
<td class="opt_required"><%= (option.required?) ? "Required" : "" %></td>
</tr>
<tr>
<td><%= h option.desc %> (type: <%= h option.type %>)</td>
<td>
<%= draw_option('eopt_'+h(name), option) %>
</td>
</tr>
<% } %>
<% @payload_inst.options.sort.each { |name, option|
next if not option.advanced? %>
<tr>
<td class="opt_name"><%= h name %></td>
<td class="opt_required"><%= (option.required?) ? "Required" : "" %></td>
</tr>
<tr>
<td><%= h option.desc %> (type: <%= h option.type %>)</td>
<td>
<%= draw_option('popt_'+h(name), option) %>
</td>
</tr>
<% } %>
<tr>
<th colspan="2"><br/><%= submit_tag "Launch Exploit" %><br/></th>
</tr>
<tr>
<th colspan="2" class="moduleOptionsHeader">EVASION OPTIONS</th>
</tr>
<% @tmod.options.sort.each { |name, option|
next if not option.evasion? %>
<tr>
<td class="opt_name"><%= name %></td>
<td class="opt_required"><%= (option.required?) ? "Required" : "" %></td>
</tr>
<tr>
<td><%= h option.desc %> (type: <%= h option.type %>)</td>
<td>
<%= draw_option('eopt_'+h(name), option) %>
</td>
</tr>
<% } %>
<% @payload_inst.options.sort.each { |name, option|
next if not option.evasion? %>
<tr>
<td class="opt_name"><%= h name %></td>
<td class="opt_required"><%= (option.required?) ? "Required" : "" %></td>
</tr>
<tr>
<td><%= html_escape(option.desc) %> (type: <%= option.type %>)</td>
<td>
<%= draw_option('popt_'+h(name), option) %>
</td>
</tr>
<% } %>
<tr>
<th colspan="2"><br/><%= submit_tag "Launch Exploit" %><br/></th>
</tr>
</form>
<% if @exploit_console %>
<script>
<% if params[:consoleOpen] and params[:consoleOpen] == "direct" %>
window.location="/console/index/<%= @exploit_console %>"
<% else %>
window.parent.openConsoleWindowExploit(<%= @exploit_console %>);
<% end %>
</script>
<% end %>
<% end %>
</table>
+13
View File
@@ -0,0 +1,13 @@
<div id="module-search-box">
<span>Search</span>
<input id="module_search" name="terms" type="text" size="50" value=""/>
<img alt="Spinner" id="search_spinner" src="/images/spinner.gif" style="display: none;" />
</div>
<div id="search_results">
</div>
<script type="text/javascript">
document.getElementById('module_search').focus();
generic_live_search('module_search', 'exploits', 'search_spinner', 0);
</script>
+70
View File
@@ -0,0 +1,70 @@
<table align="center" cellspacing="0" cellpadding="0" border="0" class="EAview_moduleFull">
<tr>
<td width="100%" class="EAview_moduleName">
<%= h(@tmod.name) %> <br />
</td>
</tr>
<tr>
<td height="10">
</td>
</tr>
<tr>
<td width="100%" class="EAview_moduleDescription">
<%= @tmod.description.split("\n\n").map{ |t| h(t) }.join("<br/><br/>") %>
</td>
</tr>
<tr>
<td height="10">
</td>
</tr>
<tr>
<td width="100%" class="EAview_moduleAuthor">
This module (v<%= h @tmod.version.gsub(/\$Revision:\s+|\s+\$/, '') %>) was
provided by <%= h @tmod.author.map{ |a| a.to_s.gsub(/\<.*/, '') }.join(' and ').strip %>,
under the <%= @tmod.license %>.
</td>
</tr>
<tr>
<td height="10">
</td>
</tr>
<tr>
<td width="100%" class="EAview_moduleTargets_Title">
Select a target to continue:
</td>
</tr>
<tr>
<td width="100%" class="EAview_moduleTargets">
<ul>
<% @tmod.targets.each_with_index { |tgt, idx| %>
<li><%= link_to h(tgt.name), :action => "config", :refname => @tmod.refname.gsub('/', ':'), :target => idx %></a></li>
<% } %>
</ul>
</td>
</tr>
<% if (@tmod.references.length > 0) %>
<tr>
<td height="10">
</td>
</tr>
<tr>
<td width="100%" class="EAview_moduleReferences_Title">
External references:
</td>
</tr>
<tr>
<td width="100%">
<ul class="EAview_moduleReferences">
<% @tmod.references.each { |ref| %>
<% if (ref.kind_of?(Msf::Module::SiteReference)) %>
<li><a href="<%= ref.site %>" target="_blank"><%= h(ref.to_s) %></a></li>
<% else %>
<li><%= h(ref.to_s) %></li>
<% end %>
<% } %>
</ul>
</td>
</tr>
<% end %>
</table>
+47
View File
@@ -0,0 +1,47 @@
<div id="ide-start" class="wizard_page">
<p class="motto">Find bug. Click. Profit.</p>
<table width="100%" align="center">
<tr width="100%" align="center">
<td>
<a href="#"
onclick="new Effect.Appear('edit_new'); new Effect.Fade('create_new');"
onmouseout="document.getElementById('devil').src = '/images/ide/devil.png';"
onmouseover="document.getElementById('devil').src = '/images/ide/devil_ne.png';">
<img src="/images/ide/devil.png" alt="" id="devil" /> <br />
<strong>edit existent<s/trong>
</a>
</td>
<td>
<a href="#"
onclick="new Effect.Appear('create_new'); new Effect.Fade('edit_new');"
onmouseout="document.getElementById('doomed').src = '/images/ide/doomed.png';"
onmouseover="document.getElementById('doomed').src = '/images/ide/doomed_ne.png';">
<img src="/images/ide/doomed.png" alt="" id="doomed" /> <br />
<strong>new exploit</strong>
</a>
</td>
</tr>
</table>
<div id="edit_new" style="display: none;">
<p>Editing an existing exploit...</p>
<div id="module_search_box">
Type in name or keyword:&nbsp;
<input id="exploit_search" name="terms" type="text" size="40" value="Edit me"/>
<div id="search_results"></div>
</div>
<a href="#" onclick="new Effect.Fade('edit_new')"><strong>hide</strong></a>
<script type="text/javascript">
generic_live_search('exploit_search', 'exploits', 'spinner', 1);
</script>
</div>
<div id="create_new" style="display: none;">
<p>Select the exploit type from the options below:</p>
<%= start_form_tag :action => "wizard" %>
<%= hidden_field "exploit", "step", :value => 1 %>
<%= select ("exploit", "mixin", return_selectable_exploit_mixins()) %>
<%= submit_tag "Next" %>
<%= end_form_tag %>
</div>
</div>
+98
View File
@@ -0,0 +1,98 @@
<div class="wizard_page">
<% if flash[:error] and flash[:error].length > 0 %>
<p class="error">
<%= flash[:error] %>
</p>
<% end %>
<% if @step == 1 %>
<h3>Step 1: Generic information</h3>
<p>
</p>
<table width="100%">
<%= start_form_tag %>
<%= hidden_field "exploit", "step", :value => 2 %>
<tr>
<td>Name:</td>
<td><%= text_field "exploit", "name" %></td>
</tr>
<tr>
<td>Title:</td>
<td><%= text_field "exploit", "title" %></td>
</tr>
<tr>
<td>Description:</td>
<td><%= text_area "exploit", "description", :cols => 40, :rows => 5 %></td>
</tr>
<tr>
<td>Authors:</td>
<td><%= text_area "exploit", "authors", :cols => 40, :rows => 5 %></td>
</tr>
<tr>
<td>References:</td>
<td><%= text_area "exploit", "references", :cols => 40, :rows => 5 %></td>
</tr>
<tr>
<td>License:</td>
<td><%= select ("exploit", "license", return_selectable_licenses()) %></td>
</tr>
<tr>
<td colspan="2"><%= submit_tag "Next" %></td>
</tr>
<%= end_form_tag %>
</table>
<% elsif @step == 2 %>
<h3>Step 2: Configure payload</h3>
<p>
</p>
<table width="100%">
<%= start_form_tag %>
<%= hidden_field "exploit", "step", :value => 3 %>
<tr>
<td>Space for payload:</td>
<td><%= text_field "exploit", "payload_space" %></td>
</tr>
<tr>
<td>Bad characters:</td>
<td><%= text_field "exploit", "payload_badchars" %></td>
</tr>
<tr>
<td>Prepend:</td>
<td><%= text_field "exploit", "payload_prepend" %></td>
</tr>
<tr>
<td>Append:</td>
<td><%= text_field "exploit", "payload_append" %></td>
</tr>
<tr>
<td>SaveRegisters:</td>
<td><%= text_field "exploit", "payload_saveregs" %></td>
</tr>
<tr>
<td>Previous</td>
<td><%= submit_tag "Next" %></td>
</tr>
<%= end_form_tag %>
</table>
<% elsif @step == 3 %>
<h3>Step 2: Configure targets</h3>
<p>
</p>
<table width="100%">
<%= start_form_tag %>
<%= hidden_field "exploit", "step", :value => 4 %>
<tr>
<td>SaveRegisters:</td>
<td><%= text_field "exploit", "payload_saveregs" %></td>
</tr>
<tr>
<td>Previous</td>
<td><%= submit_tag "Next" %></td>
</tr>
<%= end_form_tag %>
</table>
<% end %>
<span class="wizard_subs">
<%= link_to "Dump current exploit in YAML", :action => "dump_current", :format => "yaml" %>
</span>
</div>
+13
View File
@@ -0,0 +1,13 @@
<table cellpadding="0" cellspacing="0" border="0">
<thead>
<tr>
<th>ID</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<% @jobs.each_pair do |n,m| %>
<tr><td><%= n %></td><td><%= m %></td></tr>
<% end %>
</tbody>
</table>
+2
View File
@@ -0,0 +1,2 @@
<h1>Jobs#stop</h1>
<p>Find me in app/views/jobs/stop.rhtml</p>
@@ -0,0 +1,23 @@
<ul>
<li class="menuButton" onclick="openExploitsWindow()">
<img src="/images/bug.png" alt="" />Exploits
</li>
<li class="menuButton" onclick="openAuxiliariesWindow()">
<img src="/images/zoom.png" alt="" />Auxiliaries
</li>
<li class="menuButton" onclick="openPayloadsWindow()">
<img src="/images/bomb.png" alt="" />Payloads
</li>
<li class="menuButton" onclick="openConsoleWindow()">
<img src="/images/terminal.png" alt="" />Console
</li>
<li class="menuButton" onclick="openSessionsWindow()">
<img src="/images/star.png" alt="" />Sessions
</li>
<li class="menuButton" onclick="openOptionsWindow()">
<img src="/images/wrench.png" alt="" />Options
</li>
<li class="menuButton" onclick="openAboutDialog()">
<img src="/images/help.png" alt="" />About
</li>
</ul>
@@ -0,0 +1,27 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="eng">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="Author" content="LMH (lmh@info-pull.com)" />
<meta name="Copyright" content="(c) 2006, LMH (lmh@info-pull.com)" />
<title>Metasploit Framework Web IDE</title>
<%= stylesheet_link_tag "msfide" %>
<%= javascript_include_tag :defaults %>
</head>
<body>
<div id="logo">
<img src="/images/ide-logo.png" alt="Metasploit Framework Web IDE" />
</div>
<div id="spinner" style="display: none;">
<img src="/images/spinner_alt.gif" alt="Loading" />
</div>
<%= @content_for_layout %>
<div id="dyn_content"></div>
<div id="footer">
&copy; Copyright 2006 LMH &lt;lmh@info-pull.com&gt;.
</div>
</body>
</html>
@@ -0,0 +1,30 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Metasploit Framework Web Console <%=h ::Msf::Framework::Version %></title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="Author" content="Mike Whitehead (mwhite22[at]caledonian.ac.uk), Metasploit LLC" />
<meta name="Copyright" content="(c) 2007, Mike Whitehead (mwhite22[at]caledonian.ac.uk), (c) 2006-2007 Metasploit LLC" />
<% ["prototype","effects","controls","window","application","cookiecheck"].each do |js| %>
<%= javascript_include_tag js %><% end %>
<script>
document.writeln('<link rel="stylesheet" type="text/css" href="' + mainStyle + '">'); // MSFWeb main stylesheet
document.writeln('<link rel="stylesheet" type="text/css" href="' + windowStyle + '">'); // Window frame stylesheet
</script>
</head>
<body>
<div id="menuBar">
<%= render :partial => 'layouts/menu_bar' %>
</div>
<div id="maincontent">
<%= @content_for_layout %>
</div>
<script type="text/javascript">
run_tasks();
</script>
</body>
</html>
@@ -0,0 +1,22 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="eng">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="Author" content="LMH (lmh@info-pull.com)" />
<meta name="Copyright" content="(c) 2006, LMH (lmh@info-pull.com)" />
<% ["prototype","effects","dragdrop","controls","application","cookiecheck"].each do |js| %>
<%= javascript_include_tag js %><% end %>
<script>
document.writeln('<link rel="stylesheet" type="text/css" href="' + contentStyle +'">'); // Window content stylesheet
</script>
</head>
<body>
<%= @content_for_layout %>
</body>
</html>
+56
View File
@@ -0,0 +1,56 @@
<% if @results %>
<% unless @clean_list %>
<table width="100%" class="EAconf_moduleFull">
<tr>
<td>
<% if (params[:terms].strip.length > 0) %>
<% if (@results.size > 0) %>
Matched <%= @results.size %> modules for term <em><%=h params[:terms] %>
<% else %>
No matching modules for term <em><%=h params[:terms] %>
<% end %>
<% else %>
Showing all <%= @results.size %> modules
<% end %>
</td>
</tr>
<tr>
<td>
<% else %>
<ul>
<% end %>
<% @results.each do |m| %>
<% unless @clean_list %>
<tr>
<td class="EAconf_moduleName">
<span style="cursor:pointer;" onClick="window.parent.openModuleWindow('<%= @module_type %>', '<%= m.refname.gsub('/', ':') %>', '<%= m.name.gsub('"','').gsub("'","") %>')"><%= h(m.name) %></span>
<% if m.platform and @module_type =~ /(payloads|exploits)/ %>
<%= module_platform_icons(m.platform) %>
<% else %>
<% if (m.arch.length > 0) %>
(<%= h m.arch.join(', ') %>)
<% end %>
<% end %>
</td>
</tr>
<tr>
<td class="EAconf_moduleDescription" colspan="2">
<%= m.description %>
</td>
</tr>
<% else %>
<li><%= h(m.name) %></li>
<% end %>
<% end %>
<% unless @clean_list %>
</table>
<% else %>
</ul>
<% end %>
<% else %>
<p>
No results for terms <em><%= h(params[:terms]) %></em>.
</p>
<% end %>
@@ -0,0 +1,2 @@
<h1>Nops#generate</h1>
<p>Find me in app/views/nops/generate.rhtml</p>
+12
View File
@@ -0,0 +1,12 @@
<div id="module-search-box">
<span>Search</span>
<input id="module_search" name="terms" type="text" size="55" value=""/>
<img alt="Spinner" id="search_spinner" src="/images/spinner.gif" style="display: none;" />
<div id="search_results"></div>
</div>
<script type="text/javascript">
document.getElementById('module_search').focus();
generic_live_search('module_search', 'nops', 'search_spinner', 0);
</script>
+46
View File
@@ -0,0 +1,46 @@
<table align="center" width="100%" cellspacing="0" cellpadding="15" border="0">
<tr width="100%" align="center">
<p class="moduleName">
<%= h(@tmod.name) %> <br />
</p>
</tr>
<tr width="100%" align="center">
<blockquote>
<p class="moduleDescription">
<%= h(@tmod.description) %>
</p>
</blockquote>
</tr>
<tr width="100%" align="center">
<blockquote>
<p class="moduleDescription">
This module (revision <%= h @tmod.version.gsub(/\$Revision:\s+|\s+\$/, '') %>) was provided by <%= h @tmod.author.map{ |a| a.to_s.gsub(/\<.*/, '') }.join(' and ').strip %>, under the <%= @tmod.license %>.
</p>
</blockquote>
</tr>
<% if (@tmod.references.length > 0) %>
<tr width="100%" align="center">
<blockquote>
<p class="moduleDescription">
External references:
<ul class="moduleReferences">
<% @tmod.references.each { |ref| %>
<% if (ref.kind_of?(Msf::Module::SiteReference)) %>
<li><a href="<%= ref.site %>" target="_blank">
<%= h(ref.to_s) %></a></li>
<% else %>
<li><%= h(ref.to_s) %></li>
<% end %>
<% } %>
</ul>
</p>
</blockquote>
</tr>
<% end %>
</table>
+45
View File
@@ -0,0 +1,45 @@
<%
if (@force_reload)
%>
<script language="javascript">
window.parent.location.reload();
</script>
<%
end
%>
<form method="POST">
<table cellpadding="0" border="0" width="100%" class="EAConf_moduleFull">
<tr colspan="2">
<th align="center" class="moduleOptionsHeader">Style Name</td>
</tr>
<tr>
<td class="EAconf_moduleDescription">
Use the drop-down menu to select the desired theme for the Metasploit Framework Web Console<br /><br />
Current style: <strong><em><script language="javascript">document.writeln(styleName);</script></em></strong>
</td>
</tr>
<tr>
<td>
<select name="style">
<option value="empty">Choose a skin</option>
<%
sbase = File.join(Msf::Config::InstallRoot, "data", "msfweb", "public", "stylesheets", "skins")
sdirs = Dir.new(sbase).grep(/^[a-z0-9]+/i)
sdirs.each do |style|
next if not File.directory?(File.join(sbase, style))
sname = style.capitalize + " Style"
%>
<option value="<%=h style%>"><%=h sname%></option>
<%
end
%>
</select>
</td>
</tr>
<tr>
<td>
<input type="submit" value="Save Skin" name="save">
</td>
</tr>
</table>
</form>
@@ -0,0 +1,2 @@
<h1>Payloads#generate</h1>
<p>Find me in app/views/payloads/generate.rhtml</p>
+13
View File
@@ -0,0 +1,13 @@
<div id="module-search-box">
<span>Search</span>
<input id="module_search" name="terms" type="text" size="55" value=""/>
<img alt="Spinner" id="search_spinner" src="/images/spinner.gif" style="display: none;" />
</div>
<div id="search_results">
</div>
<script type="text/javascript">
document.getElementById('module_search').focus();
generic_live_search('module_search', 'payloads', 'search_spinner', 0);
</script>
+155
View File
@@ -0,0 +1,155 @@
<table align="center" cellspacing="0" cellpadding="0" border="0" class="Pview_moduleFull">
<tr>
<td width="100%" class="Pview_moduleName" colspan="2">
<%= h(@tmod.name) %> <br />
</td>
</tr>
<tr>
<td height="10" colspan="2">
</td>
</tr>
<tr>
<td width="100%" class="Pview_moduleDescription" colspan="2">
<%= @tmod.description.split("\n\n").map{ |t| h(t) }.join("<br/><br/>") %>
</td>
</tr>
<tr>
<td height="10" colspan="2">
</td>
</tr>
<tr>
<td width="100%" class="Pview_moduleAuthor" colspan="2">
This module (v<%= h @tmod.version.gsub(/\$Revision:\s+|\s+\$/, '') %>) was
provided by <%= h @tmod.author.map{ |a| a.to_s.gsub(/\<.*/, '') }.join(' and ').strip %>,
under the <%= @tmod.license %>.
</td>
</tr>
<tr>
<td height="10" colspan="2">
</td>
</tr>
<% if (@tmod.references.length > 0) %>
<tr>
<td width="100%" class="Pview_moduleReferences_Title" colspan="2">
External references:
</td>
</tr>
<tr>
<td width="100%" class="Pview_moduleReferences" colspan="2">
<ul>
<% @tmod.references.each { |ref| %>
<% if (ref.kind_of?(Msf::Module::SiteReference)) %>
<li><a href="<%= ref.site %>" target="_blank"><%= h(ref.to_s) %></a></li>
<% else %>
<li><%= h(ref.to_s) %></li>
<% end %>
<% } %>
</ul>
</td>
</tr>
<% end %>
<tr>
<td>Size:</td>
<td><%= @tmod.generate.length %></td>
</tr>
<tr>
<td>Architecture:</td>
<td><%= @tmod.arch_to_s %></td>
</tr>
<tr>
<td>Operating system:</td>
<td><%= @tmod.platform_to_s %></td>
</tr>
<tr>
<th colspan="2"></th>
</tr>
<% if @module_step == 0 %>
<tr>
<th colspan="2" class="moduleOptionsHeader">OPTIONS</th>
</tr>
<form action="/payloads/view" method="post">
<%= hidden_field_tag "refname", h(params[:refname]) %>
<%= hidden_field_tag "step", "1" %>
<% @tmod.options.each { |name, option|
next if (option.advanced?)
next if (option.evasion?) %>
<tr>
<td class="opt_name"><%= name %></td>
<td class="opt_required"><%= (option.required?) ? "Required" : "" %></td>
</tr>
<tr>
<td><%= html_escape(option.desc) %> (type: <%= option.type %>)</td>
<td>
<input type="text" name="opt_<%= h(name) %>" value="<%= h(option.default || '') %>"/>
</td>
</tr>
<% } %>
<tr>
<td>Max Size:</td>
<td><input type="text" name="max_size" size="10"/></td>
</tr>
<tr>
<td>Restricted Characters (format: 0x00 0x01):</td>
<td><input type="text" name="badchars" size="25" value="0x00 "/></td>
</tr>
<tr>
<td>Selected Encoder:</td>
<td>
<select name="encoder" size="1">
<option value="__default">Default
<% @tmod.compatible_encoders.each { |encname, mod| %>
<option><%= encname %></option>
<% } %>
</select>
</td>
</tr>
<tr>
<td>Format:</td>
<td>
<select name="format" size="1">
<option value="c">C</option>
<option value="ruby">Ruby</option>
<option value="perl">Perl</option>
<option value="js_<%= Rex::Arch.endian(@tmod.arch) == ENDIAN_BIG ? "b" : "l" %>e">Javascript</option>
<option value="java">Java</option>
<option value="raw">Raw</option>
</select>
</td>
</tr>
<tr>
<td><%= submit_tag "Generate" %></td>
</tr>
</form>
<% else %>
<tr>
<th colspan="2" class="moduleOptionsHeader">
Payload code
(<%= link_to "back", :action => "view", :refname => h(params[:refname]) %>)
</th>
</tr>
<tr>
<td colspan="2">
<textarea cols="64" rows="10"><%=@generation%></textarea>
</td>
</tr>
<% end %>
</table>
+24
View File
@@ -0,0 +1,24 @@
<% if(@sessions.length > 0) %>
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<thead>
<tr>
<th width="10">ID</th>
<th width="40">Target</th>
<th width="60">Payload</th>
<th width="60">Exploit</th>
</tr>
</thead>
<tbody>
<% @sessions.each_pair do |n,m| %>
<tr>
<td><%= n %></td>
<td><a onclick="window.parent.openConsoleWindowSession(<%= n %>);" href="#"><%= m.tunnel_peer %></a></td>
<td><%= m.via_payload %></td>
<td><%= m.via_exploit %></td>
<% end %>
</tbody>
</table>
<% else %>
There are no active sessions, go exploit something ;-)
<% end %>
+110
View File
@@ -0,0 +1,110 @@
# Don't change this file!
# Configure your app in config/environment.rb and config/environments/*.rb
RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
module Rails
class << self
def boot!
unless booted?
preinitialize
pick_boot.run
end
end
def booted?
defined? Rails::Initializer
end
def pick_boot
(vendor_rails? ? VendorBoot : GemBoot).new
end
def vendor_rails?
File.exist?("#{RAILS_ROOT}/vendor/rails")
end
def preinitialize
load(preinitializer_path) if File.exist?(preinitializer_path)
end
def preinitializer_path
"#{RAILS_ROOT}/config/preinitializer.rb"
end
end
class Boot
def run
load_initializer
Rails::Initializer.run(:set_load_path)
end
end
class VendorBoot < Boot
def load_initializer
require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
Rails::Initializer.run(:install_gem_spec_stubs)
Rails::GemDependency.add_frozen_gem_path
end
end
class GemBoot < Boot
def load_initializer
self.class.load_rubygems
load_rails_gem
require 'initializer'
end
def load_rails_gem
if version = self.class.gem_version
gem 'rails', version
else
gem 'rails'
end
rescue Gem::LoadError => load_error
$stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
exit 1
end
class << self
def rubygems_version
Gem::RubyGemsVersion rescue nil
end
def gem_version
if defined? RAILS_GEM_VERSION
RAILS_GEM_VERSION
elsif ENV.include?('RAILS_GEM_VERSION')
ENV['RAILS_GEM_VERSION']
else
parse_gem_version(read_environment_rb)
end
end
def load_rubygems
require 'rubygems'
min_version = '1.3.1'
unless rubygems_version >= min_version
$stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
exit 1
end
rescue LoadError
$stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
exit 1
end
def parse_gem_version(text)
$1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
end
private
def read_environment_rb
File.read("#{RAILS_ROOT}/config/environment.rb")
end
end
end
end
# All that for this:
Rails.boot!
+22
View File
@@ -0,0 +1,22 @@
# SQLite version 3.x
# gem install sqlite3-ruby (not necessary on OS X Leopard)
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
production:
adapter: sqlite3
database: db/production.sqlite3
pool: 5
timeout: 5000
+102
View File
@@ -0,0 +1,102 @@
#
# Force the application into production mode
#
ENV['RAILS_ENV'] = 'production'
# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.3.2' unless defined? RAILS_GEM_VERSION
msfbase = __FILE__
while File.symlink?(msfbase)
msfbase = File.expand_path(File.readlink(msfbase), File.dirname(msfbase))
end
$:.unshift(File.join(File.dirname(msfbase), '..', '..', '..','lib'))
#
# New versions of Rails force the KCODE to unicode. This breaks
# binary string generation used by Metasploit for shellcode,
# text generation, and encoding. We override the initialize_encoding
# method and force KCODE to be 'NONE'
#
class Rails::Initializer
def initialize_encoding
if (RUBY_VERSION !~ /^1\.9\./)
$KCODE = 'NONE'
end
end
end
# Bootstrap the Rails environment, frameworks, and default configuration
require File.join(File.dirname(__FILE__), 'boot')
Rails::Initializer.run do |config|
config.frameworks -= [ :active_record ]
config.action_controller.session =
{
:session_key => "_msfweb_session",
:secret => ::Rex::Text.rand_text_alphanumeric(30)
}
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Add additional load paths for your own custom dirs
# config.load_paths += %W( #{RAILS_ROOT}/extras )
# Specify gems that this application depends on and have them installed with rake gems:install
# config.gem "bj"
# config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
# config.gem "sqlite3-ruby", :lib => "sqlite3"
# config.gem "aws-s3", :lib => "aws/s3"
# Only load the plugins named here, in the order given (default is alphabetical).
# :all can be used as a placeholder for all plugins not explicitly named
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
# Skip frameworks you're not going to use. To use Rails without a database,
# you must remove the Active Record framework.
# config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
# Activate observers that should always be running
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names.
config.time_zone = 'UTC'
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')]
# config.i18n.default_locale = :de
end
#
# Metasploit Initialization
#
require 'rex'
require 'msf/ui'
require 'msf/base'
$msfweb = Msf::Ui::Web::Driver.new({'LogLevel' => 5})
$msframework = $msfweb.framework
if ($browser_start)
Thread.new do
select(nil, nil, nil, 0.5)
case RUBY_PLATFORM
when /mswin32/
system("start #{$browser_url}")
when /darwin/
system("open #{$browser_url}")
else
system("firefox #{$browser_url} &")
end
end
end
@@ -0,0 +1,17 @@
# Settings specified here will take precedence over those in config/environment.rb
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since you don't have to restart the webserver when you make code changes.
config.cache_classes = false
# Log error messages when you accidentally call methods on nil.
config.whiny_nils = true
# Show full error reports and disable caching
config.action_controller.consider_all_requests_local = true
config.action_view.debug_rjs = true
config.action_controller.perform_caching = false
# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = false
@@ -0,0 +1,28 @@
# Settings specified here will take precedence over those in config/environment.rb
# The production environment is meant for finished, "live" apps.
# Code is not reloaded between requests
config.cache_classes = true
# Full error reports are disabled and caching is turned on
config.action_controller.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.action_view.cache_template_loading = true
# See everything in the log (default is :info)
# config.log_level = :debug
# Use a different logger for distributed setups
# config.logger = SyslogLogger.new
# Use a different cache store in production
# config.cache_store = :mem_cache_store
# Enable serving of images, stylesheets, and javascripts from an asset server
# config.action_controller.asset_host = "http://assets.example.com"
# Disable delivery errors, bad email addresses will be ignored
# config.action_mailer.raise_delivery_errors = false
# Enable threaded mode
# config.threadsafe!
+28
View File
@@ -0,0 +1,28 @@
# Settings specified here will take precedence over those in config/environment.rb
# The test environment is used exclusively to run your application's
# test suite. You never need to work with it otherwise. Remember that
# your test database is "scratch space" for the test suite and is wiped
# and recreated between test runs. Don't rely on the data there!
config.cache_classes = true
# Log error messages when you accidentally call methods on nil.
config.whiny_nils = true
# Show full error reports and disable caching
config.action_controller.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.action_view.cache_template_loading = true
# Disable request forgery protection in test environment
config.action_controller.allow_forgery_protection = false
# Tell Action Mailer not to deliver emails to the real world.
# The :test delivery method accumulates sent emails in the
# ActionMailer::Base.deliveries array.
config.action_mailer.delivery_method = :test
# Use SQL instead of Active Record's schema dumper when creating the test database.
# This is necessary if your schema can't be completely dumped by the schema dumper,
# like if you have constraints or database-specific column types
# config.active_record.schema_format = :sql
@@ -0,0 +1,7 @@
# Be sure to restart your server when you modify this file.
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
# You can also remove all the silencers if you're trying do debug a problem that might steem from framework code.
# Rails.backtrace_cleaner.remove_silencers!
@@ -0,0 +1,10 @@
# Be sure to restart your server when you modify this file.
# Add new inflection rules using the following format
# (all these examples are active by default):
# ActiveSupport::Inflector.inflections do |inflect|
# inflect.plural /^(ox)$/i, '\1en'
# inflect.singular /^(ox)en/i, '\1'
# inflect.irregular 'person', 'people'
# inflect.uncountable %w( fish sheep )
# end
@@ -0,0 +1,5 @@
# Be sure to restart your server when you modify this file.
# Add new mime types for use in respond_to blocks:
# Mime::Type.register "text/richtext", :rtf
# Mime::Type.register_alias "text/html", :iphone
@@ -0,0 +1,19 @@
# Be sure to restart your server when you modify this file.
# These settings change the behavior of Rails 2 apps and will be defaults
# for Rails 3. You can remove this initializer when Rails 3 is released.
if defined?(ActiveRecord)
# Include Active Record class name as root for JSON serialized output.
ActiveRecord::Base.include_root_in_json = true
# Store the full class name (including module namespace) in STI type column.
ActiveRecord::Base.store_full_sti_class = true
end
# Use ISO 8601 format for JSON serialized times and dates.
ActiveSupport.use_standard_json_time_format = true
# Don't escape HTML entities in JSON, leave that for the #json_escape helper.
# if you're including raw json in an HTML page.
ActiveSupport.escape_html_entities_in_json = false
@@ -0,0 +1,15 @@
# Be sure to restart your server when you modify this file.
# Your secret key for verifying cookie session data integrity.
# If you change this key, all old sessions will become invalid!
# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
ActionController::Base.session = {
:key => '_msfweb_session',
:secret => 'f604cddb9e95fe02234d1ddb08f73f3c64e672998ff743cf80171429d6c985cafbb39698de70ee7f626ebc5aa9afdcd23d9da562fa70d942e83b6ba49e0046c4'
}
# Use the database for sessions instead of the cookie-based default,
# which shouldn't be used to store highly confidential information
# (create the session table with "rake db:sessions:create")
# ActionController::Base.session_store = :active_record_store
+5
View File
@@ -0,0 +1,5 @@
# Sample localization file for English. Add more files in this directory for other locales.
# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
en:
hello: "Hello world"
+43
View File
@@ -0,0 +1,43 @@
ActionController::Routing::Routes.draw do |map|
# The priority is based upon order of creation: first created -> highest priority.
# Sample of regular route:
# map.connect 'products/:id', :controller => 'catalog', :action => 'view'
# Keep in mind you can assign values other than :controller and :action
# Sample of named route:
# map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase'
# This route can be invoked with purchase_url(:id => product.id)
# Sample resource route (maps HTTP verbs to controller actions automatically):
# map.resources :products
# Sample resource route with options:
# map.resources :products, :member => { :short => :get, :toggle => :post }, :collection => { :sold => :get }
# Sample resource route with sub-resources:
# map.resources :products, :has_many => [ :comments, :sales ], :has_one => :seller
# Sample resource route with more complex sub-resources
# map.resources :products do |products|
# products.resources :comments
# products.resources :sales, :collection => { :recent => :get }
# end
# Sample resource route within a namespace:
# map.namespace :admin do |admin|
# # Directs /admin/products/* to Admin::ProductsController (app/controllers/admin/products_controller.rb)
# admin.resources :products
# end
# You can have the root of your site routed with map.root -- just remember to delete public/index.html.
map.root :controller => "msf"
# See how all your routes lay out with "rake routes"
# Install the default routes as the lowest priority.
# Note: These default routes make all actions in every controller accessible via GET requests. You should
# consider removing the them or commenting them out if you're using named routes and resources.
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end
+2
View File
@@ -0,0 +1,2 @@
Use this README file to introduce your application and point to useful places in the API for learning more.
Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries.
+40
View File
@@ -0,0 +1,40 @@
# General Apache options
AddHandler fastcgi-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI
# If you don't want Rails to look in certain directories,
# use the following rewrite rules so that Apache won't rewrite certain requests
#
# Example:
# RewriteCond %{REQUEST_URI} ^/notrails.*
# RewriteRule .* - [L]
# Redirect all requests not available on the filesystem to Rails
# By default the cgi dispatcher is used which is very slow
#
# For better performance replace the dispatcher with the fastcgi one
#
# Example:
# RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
RewriteEngine On
# If your Rails application is accessed via an Alias directive,
# then you MUST also set the RewriteBase in this htaccess file.
#
# Example:
# Alias /myrailsapp /path/to/myrailsapp/public
# RewriteBase /myrailsapp
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
# In case Rails experiences terminal errors
# Instead of displaying this message you can supply a file here which will be rendered instead
#
# Example:
# ErrorDocument 500 /500.html
ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
+30
View File
@@ -0,0 +1,30 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>The page you were looking for doesn't exist (404)</title>
<style type="text/css">
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
div.dialog {
width: 25em;
padding: 0 4em;
margin: 4em auto 0 auto;
border: 1px solid #ccc;
border-right-color: #999;
border-bottom-color: #999;
}
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
</style>
</head>
<body>
<!-- This file lives in public/404.html -->
<div class="dialog">
<h1>The page you were looking for doesn't exist.</h1>
<p>You may have mistyped the address or the page may have moved.</p>
</div>
</body>
</html>
+30
View File
@@ -0,0 +1,30 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>The change you wanted was rejected (422)</title>
<style type="text/css">
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
div.dialog {
width: 25em;
padding: 0 4em;
margin: 4em auto 0 auto;
border: 1px solid #ccc;
border-right-color: #999;
border-bottom-color: #999;
}
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
</style>
</head>
<body>
<!-- This file lives in public/422.html -->
<div class="dialog">
<h1>The change you wanted was rejected.</h1>
<p>Maybe you tried to change something you didn't have access to.</p>
</div>
</body>
</html>
+30
View File
@@ -0,0 +1,30 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>We're sorry, but something went wrong (500)</title>
<style type="text/css">
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
div.dialog {
width: 25em;
padding: 0 4em;
margin: 4em auto 0 auto;
border: 1px solid #ccc;
border-right-color: #999;
border-bottom-color: #999;
}
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
</style>
</head>
<body>
<!-- This file lives in public/500.html -->
<div class="dialog">
<h1>We're sorry, but something went wrong.</h1>
<p>We've been notified about this issue and we'll take a look at it shortly.</p>
</div>
</body>
</html>
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/ruby
require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
require "dispatcher"
ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
Dispatcher.dispatch
+24
View File
@@ -0,0 +1,24 @@
#!/usr/bin/ruby
#
# You may specify the path to the FastCGI crash log (a log of unhandled
# exceptions which forced the FastCGI instance to exit, great for debugging)
# and the number of requests to process before running garbage collection.
#
# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
# and the GC period is nil (turned off). A reasonable number of requests
# could range from 10-100 depending on the memory footprint of your app.
#
# Example:
# # Default log path, normal GC behavior.
# RailsFCGIHandler.process!
#
# # Default log path, 50 requests between GC.
# RailsFCGIHandler.process! nil, 50
#
# # Custom log path, normal GC behavior.
# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
#
require File.dirname(__FILE__) + "/../config/environment"
require 'fcgi_handler'
RailsFCGIHandler.process!
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/ruby
require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
require "dispatcher"
ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
Dispatcher.dispatch
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 793 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 818 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 786 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 819 B

Some files were not shown because too many files have changed in this diff Show More