Rakefile 7.13 KB
Newer Older
1
#
Sophie Brun's avatar
Sophie Brun committed
2
# Copyright (c) 2006-2019 Wade Alcorn - [email protected]
3 4 5
# Browser Exploitation Framework (BeEF) - http://beefproject.com
# See the file 'doc/COPYING' for copying permission
#
Sophie Brun's avatar
Sophie Brun committed
6 7
require 'yaml'
#require 'pry-byebug'
8 9 10 11 12

task :default => ["quick"]

desc "Run quick tests"
task :quick do
13
  Rake::Task['unit'].invoke # run unit tests
14 15 16 17
end

desc "Run all tests"
task :all do
18 19 20
  Rake::Task['integration'].invoke # run integration tests
  Rake::Task['unit'].invoke # run unit tests
  Rake::Task['msf'].invoke # run msf tests
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
end

desc "Run automated tests (for Jenkins)"
task :automated do
  Rake::Task['xserver_start'].invoke
  Rake::Task['all'].invoke
  Rake::Task['xserver_stop'].invoke
end

desc "Run integration unit tests"
task :integration => ["install"] do
  Rake::Task['beef_start'].invoke
  sh "export DISPLAY=:0; cd test/integration;ruby -W0 ts_integration.rb"
  Rake::Task['beef_stop'].invoke
end

desc "Run integration unit tests"
task :unit => ["install"] do
  sh "cd test/unit;ruby -W0 ts_unit.rb"
end

desc "Run MSF unit tests"
43
task :msf => ["install", "msf_install"] do
44 45 46 47 48 49
  Rake::Task['msf_update'].invoke
  Rake::Task['msf_start'].invoke
  sh "cd test/thirdparty/msf/unit/;ruby -W0 ts_metasploit.rb"
  Rake::Task['msf_stop'].invoke
end

Sophie Brun's avatar
Sophie Brun committed
50 51 52 53
desc 'Generate API documentation to doc/rdocs/index.html'
task :rdoc do
  Rake::Task['rdoc:rerdoc'].invoke
end
54

Sophie Brun's avatar
Sophie Brun committed
55 56 57
desc 'rest test examples'
task :rest_test do
  Rake::Task['beef_start'].invoke
58

Sophie Brun's avatar
Sophie Brun committed
59
  sh 'cd test/api/; ruby -W2 1333_auth_rate.rb'
60

Sophie Brun's avatar
Sophie Brun committed
61 62
  Rake::Task['beef_stop'].invoke
end
63

Sophie Brun's avatar
Sophie Brun committed
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
################################
# SSL/TLS certificate

namespace :ssl do
  desc 'Create a new SSL certificate'
  task :create do
    if File.file?('beef_key.pem')
      puts 'Certificate already exists. Replace? [Y/n]'
      confirm = STDIN.getch.chomp
      unless confirm.eql?('') || confirm.downcase.eql?('y')
        puts "Aborted"
        exit 1
      end
    end
    Rake::Task['ssl:replace'].invoke
79 80
  end

Sophie Brun's avatar
Sophie Brun committed
81 82 83 84 85 86 87 88 89 90 91
  desc 'Re-generate SSL certificate'
  task :replace do
    if File.file?('/usr/local/bin/openssl')
      path = '/usr/local/bin/openssl'
    elsif File.file?('/usr/bin/openssl')
      path = '/usr/bin/openssl'
    else
      puts "[-] Error: could not find openssl"
      exit 1
    end
    IO.popen([path, 'req', '-new', '-newkey', 'rsa:4096', '-sha256', '-x509', '-days', '3650', '-nodes', '-out', 'beef_cert.pem', '-keyout', 'beef_key.pem', '-subj', '/CN=localhost'], 'r+').read.to_s
92 93 94
  end
end

Sophie Brun's avatar
Sophie Brun committed
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
################################
# rdoc

namespace :rdoc do
  require 'rdoc/task'

  desc 'Generate API documentation to doc/rdocs/index.html'
  Rake::RDocTask.new do |rd|
    rd.rdoc_dir = 'doc/rdocs'
    rd.main = 'README.mkd'
    rd.rdoc_files.include('core/**/*\.rb')
      #'extensions/**/*\.rb'
      #'modules/**/*\.rb'
    rd.options << '--line-numbers'
    rd.options << '--all'
  end
111 112 113 114 115 116
end


################################
# Install

117 118 119
#task :install do
#  sh "export BEEF_TEST=true"
#end
120

121

122 123 124 125 126 127 128 129
################################
# X11 set up

@xserver_process_id = nil;

task :xserver_start do
  printf "Starting X11 Server (wait 10 seconds)..."
  @xserver_process_id = IO.popen("/usr/bin/Xvfb :0 -screen 0 1024x768x24 2> /dev/null", "w+")
130
  delays = [2, 2, 1, 1, 1, 0.5, 0.5, 0.5, 0.3, 0.2, 0.1, 0.1, 0.1, 0.05, 0.05]
131 132 133 134 135 136 137 138 139
  delays.each do |i| # delay for 10 seconds
    printf '.'
    sleep (i) # increase the . display rate
  end
  puts '.'
end

task :xserver_stop do
  puts "\nShutting down X11 Server...\n"
Sophie Brun's avatar
Sophie Brun committed
140
  sh "ps -ef|grep Xvfb|grep -v grep|grep -v rake|awk '{print $2}'|xargs kill"
141 142 143 144 145 146
end

################################
# BeEF environment set up

@beef_process_id = nil;
Sophie Brun's avatar
Sophie Brun committed
147 148
@beef_config_file = 'tmp/rk_beef_conf.yaml';

149 150

task :beef_start => 'beef' do
Sophie Brun's avatar
Sophie Brun committed
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
  # read environment param for creds or use bad_fred
  test_user = ENV['TEST_BEEF_USER'] || 'bad_fred'
  test_pass = ENV['TEST_BEEF_PASS'] || 'bad_fred_no_access'

  # write a rake config file for beef
  config = YAML.load(File.read('./config.yaml'))
  config['beef']['credentials']['user'] = test_user
  config['beef']['credentials']['passwd'] = test_pass
  Dir.mkdir('tmp') unless Dir.exists?('tmp')
  File.open(@beef_config_file, 'w') { |f| YAML.dump(config, f) }

  # set the environment creds -- in case we're using bad_fred
  ENV['TEST_BEEF_USER'] = test_user
  ENV['TEST_BEEF_PASS'] = test_pass
  config = nil
  puts "Using config file: #{@beef_config_file}\n"

168
  printf "Starting BeEF (wait a few seconds)..."
Sophie Brun's avatar
Sophie Brun committed
169 170
  @beef_process_id = IO.popen("ruby ./beef -c #{@beef_config_file} -x 2> /dev/null", "w+")
  delays = [5, 5, 5, 4, 4, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1]
171
  delays.each do |i| # delay for a few seconds
172 173 174
    printf '.'
    sleep (i)
  end
Sophie Brun's avatar
Sophie Brun committed
175
  puts ".\n\n"
176 177 178
end

task :beef_stop do
Sophie Brun's avatar
Sophie Brun committed
179 180 181 182 183 184 185 186 187
  # cleanup tmp/config files
  puts "\nCleanup config file:\n"
  rm_f @beef_config_file
  ENV['TEST_BEEF_USER'] = nil
  ENV['TEST_BEEF_PASS'] = nil

  # shutting down
  puts "Shutting down BeEF...\n"
  sh "ps -ef|grep beef|grep -v grep|grep -v rake|awk '{print $2}'|xargs kill"
188 189 190 191 192 193 194 195 196 197
end

################################
# MSF environment set up

@msf_process_id = nil;

task :msf_start => '/tmp/msf-test/msfconsole' do
  printf "Starting MSF (wait 45 seconds)..."
  @msf_process_id = IO.popen("/tmp/msf-test/msfconsole -r test/thirdparty/msf/unit/BeEF.rc 2> /dev/null", "w+")
198
  delays = [10, 7, 6, 5, 4, 3, 2, 2, 1, 1, 1, 0.5, 0.5, 0.5, 0.3, 0.2, 0.1, 0.1, 0.1, 0.05, 0.05]
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
  delays.each do |i| # delay for 45 seconds
    printf '.'
    sleep (i) # increase the . display rate
  end
  puts '.'
end

task :msf_stop do
  puts "\nShutting down MSF...\n"
  @msf_process_id.puts "quit"
end

task :msf_install => '/tmp/msf-test/msfconsole' do
  # Handled by the 'test/msf-test/msfconsole' task.
end

215
task :msf_update => '/tmp/msf-test/msfconsole' do
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243
  sh "cd /tmp/msf-test;git pull"
end

file '/tmp/msf-test/msfconsole' do
  puts "Installing MSF"
  sh "cd test;git clone https://github.com/rapid7/metasploit-framework.git /tmp/msf-test"
end


################################
# Create Mac DMG File

task :dmg do
  puts "\nCreating Working Directory\n";
  sh "mkdir dmg";
  sh "mkdir dmg/BeEF";
  sh "rsync * dmg/BeEF --exclude=dmg -r";
  sh "ln -s /Applications dmg/";
  puts "\nCreating DMG File\n"
  sh "hdiutil create ./BeEF.dmg -srcfolder dmg -volname BeEF -ov";
  puts "\nCleaning Up\n"
  sh "rm -r dmg";
  puts "\nBeEF.dmg created\n"
end


################################
# Create CDE Package
Sophie Brun's avatar
Sophie Brun committed
244
# This will download and make the CDE Executable and
245 246 247 248 249 250 251 252 253 254 255 256 257
# gnereate a CDE Package in cde-package

task :cde do
  puts "\nCloning and Making CDE...";
  sh "git clone git://github.com/pgbovine/CDE.git";
  Dir.chdir "CDE";
  sh "make";
  Dir.chdir "..";
  puts "\nCreating CDE Package...\n";
  sh "bundle install"
  Rake::Task['cde_beef_start'].invoke
  Rake::Task['beef_stop'].invoke
  puts "\nCleaning Up...\n";
258
  sleep (2);
259 260
  sh "rm -rf CDE";
  puts "\nCDE Package Created...\n";
261
end
262 263 264 265 266 267 268 269 270

################################
# CDE/BeEF environment set up

@beef_process_id = nil;

task :cde_beef_start => 'beef' do
  printf "Starting CDE BeEF (wait 10 seconds)..."
  @beef_process_id = IO.popen("./CDE/cde ruby beef -x 2> /dev/null", "w+")
271
  delays = [2, 2, 1, 1, 1, 0.5, 0.5, 0.5, 0.3, 0.2, 0.1, 0.1, 0.1, 0.05, 0.05]
272 273 274 275 276 277 278 279 280
  delays.each do |i| # delay for 10 seconds
    printf '.'
    sleep (i)
  end
  puts '.'
end


################################