lab 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/.gitignore +4 -0
  2. data/config/test_lab.yml +11 -0
  3. data/config/test_targets.yml +21 -0
  4. data/lib/lab/controller/dynagen_controller.rb +6 -6
  5. data/lib/lab/controller/remote_esx_controller.rb +51 -51
  6. data/lib/lab/controller/remote_esxi_controller.rb +62 -0
  7. data/lib/lab/controller/remote_workstation_controller.rb +12 -12
  8. data/lib/lab/controller/virtualbox_controller.rb +16 -16
  9. data/lib/lab/controller/workstation_controller.rb +9 -9
  10. data/lib/lab/controller/workstation_vixr_controller.rb +9 -9
  11. data/lib/lab/controllers.rb +1 -3
  12. data/lib/lab/driver/dynagen_driver.rb +32 -32
  13. data/lib/lab/driver/fog_driver.rb +144 -144
  14. data/lib/lab/driver/remote_esxi_driver.rb +177 -0
  15. data/lib/lab/driver/remote_workstation_driver.rb +181 -181
  16. data/lib/lab/driver/virtualbox_driver.rb +132 -132
  17. data/lib/lab/driver/vm_driver.rb +177 -177
  18. data/lib/lab/driver/workstation_driver.rb +218 -218
  19. data/lib/lab/driver/workstation_vixr_driver.rb +108 -108
  20. data/lib/lab/drivers.rb +1 -1
  21. data/lib/lab/modifier/backtrack5_modifier.rb +8 -8
  22. data/lib/lab/modifier/dos_modifier.rb +3 -3
  23. data/lib/lab/modifier/test_modifier.rb +6 -6
  24. data/lib/lab/version.rb +1 -1
  25. data/lib/lab/vm.rb +242 -242
  26. data/lib/lab/vm_controller.rb +217 -211
  27. data/src/Gemfile +4 -0
  28. data/src/README.md +80 -0
  29. data/src/Rakefile +1 -0
  30. data/src/TODO +15 -0
  31. data/src/config/test_lab.yml +11 -0
  32. data/src/config/test_targets.yml +21 -0
  33. data/src/lab.gemspec +35 -0
  34. data/src/lib/lab.rb +2 -0
  35. data/src/lib/lab/controller/dynagen_controller.rb +14 -0
  36. data/src/lib/lab/controller/fog_controller.rb +6 -0
  37. data/src/lib/lab/controller/remote_esxi_controller.rb +62 -0
  38. data/src/lib/lab/controller/remote_workstation_controller.rb +22 -0
  39. data/src/lib/lab/controller/virtualbox_controller.rb +25 -0
  40. data/src/lib/lab/controller/vsphere_controller.rb +18 -0
  41. data/src/lib/lab/controller/workstation_controller.rb +17 -0
  42. data/src/lib/lab/controller/workstation_vixr_controller.rb +19 -0
  43. data/src/lib/lab/controllers.rb +9 -0
  44. data/src/lib/lab/driver/dynagen_driver.rb +47 -0
  45. data/src/lib/lab/driver/fog_driver.rb +104 -0
  46. data/src/lib/lab/driver/remote_esxi_driver.rb +177 -0
  47. data/src/lib/lab/driver/remote_workstation_driver.rb +197 -0
  48. data/src/lib/lab/driver/virtualbox_driver.rb +142 -0
  49. data/src/lib/lab/driver/vm_driver.rb +195 -0
  50. data/src/lib/lab/driver/vsphere_driver.rb +120 -0
  51. data/src/lib/lab/driver/workstation_driver.rb +234 -0
  52. data/src/lib/lab/driver/workstation_vixr_driver.rb +126 -0
  53. data/src/lib/lab/drivers.rb +9 -0
  54. data/src/lib/lab/modifier/backtrack5_modifier.rb +16 -0
  55. data/src/lib/lab/modifier/dos_modifier.rb +14 -0
  56. data/src/lib/lab/modifier/test_modifier.rb +16 -0
  57. data/src/lib/lab/modifiers.rb +3 -0
  58. data/src/lib/lab/version.rb +3 -0
  59. data/src/lib/lab/vm.rb +269 -0
  60. data/src/lib/lab/vm_controller.rb +275 -0
  61. data/src/test/.gitkeep +0 -0
  62. metadata +51 -12
  63. data/lib/lab/driver/remote_esx_driver.rb +0 -177
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
@@ -0,0 +1,11 @@
1
+ - vmid: backtrack
2
+ driver: workstation
3
+ location: /opt/vm/backtrack5/Backtrack5x64.vmx
4
+ modifiers:
5
+ - Test
6
+ credentials:
7
+ - user: root
8
+ pass: toor
9
+ os: linux
10
+ flavor: ubuntu
11
+ arch: 64
@@ -0,0 +1,21 @@
1
+ - vmid: metasploitable
2
+ driver: workstation
3
+ location: /opt/vm/lab/user/Metasploitable/Metasploitable.vmx
4
+ tools: false
5
+ credentials:
6
+ - user: msfadmin
7
+ pass: msfadmin
8
+ - vmid: windows2000_target
9
+ driver: workstation
10
+ location: /opt/vm/lab/vuln/msf_Win2000SP4/Windows 2000 AS.vmx
11
+ tools: true
12
+ credentials:
13
+ - vmid: windowsxp_target
14
+ driver: remote_workstation
15
+ host: vmhost
16
+ user: root
17
+ location: /opt/vm/lab/vuln/msf_WinXPSP1/Windows XP Professional.vmx
18
+ tools: true
19
+ credentials:
20
+ - user: administrator
21
+ pass: administrator
@@ -2,13 +2,13 @@ module Lab
2
2
  module Controllers
3
3
  module DynagenController
4
4
 
5
- def self.running_list
6
- raise "Unsupported"
7
- end
5
+ def self.running_list
6
+ raise "Unsupported"
7
+ end
8
8
 
9
- def self.dir_list(basepath=nil)
10
- raise "Unsupported"
11
- end
9
+ def self.dir_list(basepath=nil)
10
+ raise "Unsupported"
11
+ end
12
12
  end
13
13
  end
14
14
  end
@@ -3,60 +3,60 @@
3
3
 
4
4
  module Lab
5
5
  module Controllers
6
- module RemoteEsxController
7
-
8
- # Note that 3.5 was different (vmware-vim-cmd)
9
- VIM_CMD = 'vim-cmd'.freeze
10
-
11
- def self.dir_list(basepath=nil)
12
- # Does this method really even make sense for esx?
13
- return "Unsupported :("
14
- end
15
-
16
- def self.running_list(user, host)
17
- user.gsub!(/(\W)*/, '')
18
- host.gsub!(/(\W)*/, '')
19
-
20
- # first get all registered vms
21
- registered_vms = self.get_vms(user, host) || []
22
- running_vms = []
23
-
24
- # now let's see which ones are running
25
- # TODO: this is ghetto, would be better not to connect repeatedly
26
- registered_vms.each do |vm|
27
- remote_cmd = "ssh #{user}@#{host} \"#{VIM_CMD} vmsvc/power.getstate #{vm[:id]}\""
28
- raw = `#{remote_cmd}`
29
- running_vms << vm if raw =~ /Powered on/
30
- end
31
-
32
- return running_vms
33
- end
6
+ module RemoteEsxiController
7
+
8
+ # Note that 3.5 was different (vmware-vim-cmd)
9
+ VIM_CMD = 'vim-cmd'.freeze
10
+
11
+ def self.dir_list(basepath=nil)
12
+ # Does this method really even make sense for esx?
13
+ return "Unsupported :("
14
+ end
15
+
16
+ def self.running_list(user, host)
17
+ user.gsub!(/(\W)*/, '')
18
+ host.gsub!(/(\W)*/, '')
19
+
20
+ # first get all registered vms
21
+ registered_vms = self.get_vms(user, host) || []
22
+ running_vms = []
23
+
24
+ # now let's see which ones are running
25
+ # TODO: this is ghetto, would be better not to connect repeatedly
26
+ registered_vms.each do |vm|
27
+ remote_cmd = "ssh #{user}@#{host} \"#{VIM_CMD} vmsvc/power.getstate #{vm[:id]}\""
28
+ raw = `#{remote_cmd}`
29
+ running_vms << vm if raw =~ /Powered on/
30
+ end
31
+
32
+ return running_vms
33
+ end
34
34
 
35
35
  private
36
36
 
37
- def self.get_vms(user, host)
38
- user.gsub!(/(\W)*/, '')
39
- host.gsub!(/(\W)*/, '')
40
-
41
- vms = [] # array of VM hashes
42
- remote_cmd = "ssh #{user}@#{host} \"#{VIM_CMD} vmsvc/getallvms | grep ^[0-9] | sed 's/[[:blank:]]\\{3,\\}/ /g'\""
43
- raw = `#{remote_cmd}`.split("\n")
44
-
45
- raw.each do |line|
46
- # So effing ghetto
47
- id_and_name = line.split('[datastore').first
48
- id = id_and_name.split(' ').first
49
-
50
- ## TODO - there's surely a better way to do this.
51
- name_array = id_and_name.split(' ')
52
- name_array.shift
53
- name = name_array.join(' ')
54
- vms << {:id => id, :name => name}
55
- end
56
-
57
- return vms
58
- end
59
-
37
+ def self.get_vms(user, host)
38
+ user.gsub!(/(\W)*/, '')
39
+ host.gsub!(/(\W)*/, '')
40
+
41
+ vms = [] # array of VM hashes
42
+ remote_cmd = "ssh #{user}@#{host} \"#{VIM_CMD} vmsvc/getallvms | grep ^[0-9] | sed 's/[[:blank:]]\\{3,\\}/ /g'\""
43
+ raw = `#{remote_cmd}`.split("\n")
44
+
45
+ raw.each do |line|
46
+ # So effing ghetto
47
+ id_and_name = line.split('[datastore').first
48
+ id = id_and_name.split(' ').first
49
+
50
+ ## TODO - there's surely a better way to do this.
51
+ name_array = id_and_name.split(' ')
52
+ name_array.shift
53
+ name = name_array.join(' ')
54
+ vms << {:id => id, :name => name}
55
+ end
56
+
57
+ return vms
58
+ end
59
+
60
60
  end
61
61
  end
62
62
  end
@@ -0,0 +1,62 @@
1
+ # This controller was built against:
2
+ # VMware ESX Host Agent 4.1.0 build-348481
3
+
4
+ module Lab
5
+ module Controllers
6
+ module RemoteEsxiController
7
+
8
+ # Note that 3.5 was different (vmware-vim-cmd)
9
+ VIM_CMD = 'vim-cmd'.freeze
10
+
11
+ def self.dir_list(basepath=nil)
12
+ # Does this method really even make sense for esx?
13
+ return "Unsupported :("
14
+ end
15
+
16
+ def self.running_list(user, host)
17
+ user.gsub!(/(\W)*/, '')
18
+ host.gsub!(/(\W)*/, '')
19
+
20
+ # first get all registered vms
21
+ registered_vms = self.get_vms(user, host) || []
22
+ running_vms = []
23
+
24
+ # now let's see which ones are running
25
+ # TODO: this is ghetto, would be better not to connect repeatedly
26
+ registered_vms.each do |vm|
27
+ remote_cmd = "ssh #{user}@#{host} \"#{VIM_CMD} vmsvc/power.getstate #{vm[:id]}\""
28
+ raw = `#{remote_cmd}`
29
+ running_vms << vm if raw =~ /Powered on/
30
+ end
31
+
32
+ return running_vms
33
+ end
34
+
35
+ private
36
+
37
+ def self.get_vms(user, host)
38
+ user.gsub!(/(\W)*/, '')
39
+ host.gsub!(/(\W)*/, '')
40
+
41
+ vms = [] # array of VM hashes
42
+ remote_cmd = "ssh #{user}@#{host} \"#{VIM_CMD} vmsvc/getallvms | grep ^[0-9] | sed 's/[[:blank:]]\\{3,\\}/ /g'\""
43
+ raw = `#{remote_cmd}`.split("\n")
44
+
45
+ raw.each do |line|
46
+ # So effing ghetto
47
+ id_and_name = line.split('[datastore').first
48
+ id = id_and_name.split(' ').first
49
+
50
+ ## TODO - there's surely a better way to do this.
51
+ name_array = id_and_name.split(' ')
52
+ name_array.shift
53
+ name = name_array.join(' ')
54
+ vms << {:id => id, :name => name}
55
+ end
56
+
57
+ return vms
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -2,21 +2,21 @@ module Lab
2
2
  module Controllers
3
3
  module RemoteWorkstationController
4
4
 
5
- def self.running_list(user, host)
6
- user.gsub!(/(\W)*/, '')
7
- host.gsub!(/(\W)*/, '')
5
+ def self.running_list(user, host)
6
+ user.gsub!(/(\W)*/, '')
7
+ host.gsub!(/(\W)*/, '')
8
8
 
9
- remote_cmd = "ssh #{user}@#{host} \"vmrun list nogui\""
10
- vm_list = `#{remote_cmd}`.split("\n")
11
- vm_list.shift
9
+ remote_cmd = "ssh #{user}@#{host} \"vmrun list nogui\""
10
+ vm_list = `#{remote_cmd}`.split("\n")
11
+ vm_list.shift
12
12
 
13
- return vm_list
14
- end
13
+ return vm_list
14
+ end
15
15
 
16
- def self.dir_list(basepath=nil)
17
- vm_list = Find.find(basepath).select { |f| f =~ /\.vmx$/ }
18
- return vm_list
19
- end
16
+ def self.dir_list(basepath=nil)
17
+ vm_list = Find.find(basepath).select { |f| f =~ /\.vmx$/ }
18
+ return vm_list
19
+ end
20
20
  end
21
21
  end
22
22
  end
@@ -2,24 +2,24 @@ module Lab
2
2
  module Controllers
3
3
  module VirtualBoxController
4
4
 
5
- def self.running_list
6
- vm_names_and_uuids = `VBoxManage list runningvms`
7
- return vm_names_and_uuids.scan(/\"(.*)\" {.*}/).flatten
8
- end
5
+ def self.running_list
6
+ vm_names_and_uuids = `VBoxManage list runningvms`
7
+ return vm_names_and_uuids.scan(/\"(.*)\" {.*}/).flatten
8
+ end
9
9
 
10
- def self.config_list
11
- vm_names_and_uuids = `VBoxManage list vms`
12
- return vm_names_and_uuids.scan(/\"(.*)\" {.*}/).flatten
13
- end
10
+ def self.config_list
11
+ vm_names_and_uuids = `VBoxManage list vms`
12
+ return vm_names_and_uuids.scan(/\"(.*)\" {.*}/).flatten
13
+ end
14
14
 
15
- def self.config_list_uuid
16
- vm_names_and_uuids = `VBoxManage list vms`
17
- return vm_names_and_uuids.scan(/\".*\" {(.*)}/).flatten
18
- end
19
-
20
- def self.dir_list(basepath=nil)
21
- vm_list = Find.find(basepath).select { |f| f =~ /\.xml$/ }
22
- end
15
+ def self.config_list_uuid
16
+ vm_names_and_uuids = `VBoxManage list vms`
17
+ return vm_names_and_uuids.scan(/\".*\" {(.*)}/).flatten
18
+ end
19
+
20
+ def self.dir_list(basepath=nil)
21
+ vm_list = Find.find(basepath).select { |f| f =~ /\.xml$/ }
22
+ end
23
23
  end
24
24
  end
25
25
  end
@@ -2,16 +2,16 @@ module Lab
2
2
  module Controllers
3
3
  module WorkstationController
4
4
 
5
- def self.running_list
6
- vm_list = `vmrun list`.split("\n")
7
- vm_list.shift
8
- return vm_list
9
- end
5
+ def self.running_list
6
+ vm_list = `vmrun list`.split("\n")
7
+ vm_list.shift
8
+ return vm_list
9
+ end
10
10
 
11
- def self.dir_list(basepath=nil)
12
- vm_list = Find.find(basepath).select { |f| f =~ /\.vmx$/ }
13
- return vm_list
14
- end
11
+ def self.dir_list(basepath=nil)
12
+ vm_list = Find.find(basepath).select { |f| f =~ /\.vmx$/ }
13
+ return vm_list
14
+ end
15
15
  end
16
16
  end
17
17
  end
@@ -2,18 +2,18 @@ module Lab
2
2
  module Controllers
3
3
  module WorkstationVixrController
4
4
 
5
- def self.running_list
6
- vm_list = `vmrun list`.split("\n")
7
- vm_list.shift
5
+ def self.running_list
6
+ vm_list = `vmrun list`.split("\n")
7
+ vm_list.shift
8
8
 
9
- return vm_list
10
- end
9
+ return vm_list
10
+ end
11
11
 
12
- def self.dir_list(basepath=nil)
13
- vm_list = Find.find(basepath).select { |f| f =~ /\.vmx$/ }
12
+ def self.dir_list(basepath=nil)
13
+ vm_list = Find.find(basepath).select { |f| f =~ /\.vmx$/ }
14
14
 
15
- return vm_list
16
- end
15
+ return vm_list
16
+ end
17
17
  end
18
18
  end
19
19
  end
@@ -3,8 +3,6 @@ require 'controller/virtualbox_controller'
3
3
  require 'controller/fog_controller'
4
4
  require 'controller/dynagen_controller'
5
5
  require 'controller/remote_workstation_controller'
6
- require 'controller/remote_esx_controller'
6
+ require 'controller/remote_esxi_controller'
7
7
  #require 'controller/qemu_controller'
8
8
  #require 'controller/qemudo_controller'
9
-
10
-
@@ -11,37 +11,37 @@ require 'vm_driver'
11
11
 
12
12
  module Lab
13
13
  module Drivers
14
- class DynagenDriver < VmDriver
15
- def initialize(config,dynagen_config)
16
- super(config)
17
- @running = false
18
- @dynagen_platform = filter_command(dynagen_config['dynagen_platform'])
19
- end
20
-
21
- def start
22
- # TODO - write the location-file to a temp-file
23
- # and set the autostart property
24
-
25
- ## start background dynamips process
26
- system_command("dynamips -H #{@dynagen_platform} &")
27
- system_command("dynagen #{@location}")
28
- @running = true
29
- end
30
-
31
- def stop
32
- system_command("killall dynagen")
33
- @running = false
34
- end
35
-
36
- def cleanup
37
- `killall dynagen`
38
- `killall dynamips`
39
- @running = false
40
- end
41
-
42
- def running?
43
- return @running
44
- end
45
- end
14
+ class DynagenDriver < VmDriver
15
+ def initialize(config,dynagen_config)
16
+ super(config)
17
+ @running = false
18
+ @dynagen_platform = filter_command(dynagen_config['dynagen_platform'])
19
+ end
20
+
21
+ def start
22
+ # TODO - write the location-file to a temp-file
23
+ # and set the autostart property
24
+
25
+ ## start background dynamips process
26
+ system_command("dynamips -H #{@dynagen_platform} &")
27
+ system_command("dynagen #{@location}")
28
+ @running = true
29
+ end
30
+
31
+ def stop
32
+ system_command("killall dynagen")
33
+ @running = false
34
+ end
35
+
36
+ def cleanup
37
+ `killall dynagen`
38
+ `killall dynamips`
39
+ @running = false
40
+ end
41
+
42
+ def running?
43
+ return @running
44
+ end
45
+ end
46
46
  end
47
47
  end