2
2
require 'msf/core/post/common'
3
3
require 'msf/core/post/windows/registry'
4
4
5
- module Msf
6
- class Post
7
- module Windows
8
-
9
- #
10
- # This module serves to hold methods related to .NET framework
11
- #
12
- module Dotnet
5
+ module Msf ::Post ::Windows ::Dotnet
13
6
include ::Msf ::Post ::Common
14
7
include ::Msf ::Post ::Windows ::Registry
15
8
16
9
def initialize ( info = { } )
17
10
super
18
- register_advanced_options (
19
- [
20
- OptInt . new ( 'Dotnet::Post::timeout' , [ true , 'Dotnet execution timeout, set < 0 to run async without termination' , 15 ] ) ,
21
- OptBool . new ( 'Dotnet::Post::log_output' , [ true , 'Write output to log file' , false ] ) ,
22
- OptBool . new ( 'Dotnet::Post::dry_run' , [ true , 'Return encoded output to caller' , false ] ) ,
23
- OptBool . new ( 'Dotnet::Post::force_wow64' , [ true , 'Force WOW64 execution' , false ] )
24
- ] ,
25
- self . class
26
- )
27
11
end
28
12
#
29
13
# Searches the subkey for the value 'Version' which contains the
@@ -35,13 +19,16 @@ def search_for_version(dotnet_subkey)
35
19
dotnet_version = nil
36
20
begin
37
21
subkeys = registry_enumvals ( dotnet_subkey )
38
- rescue :: Exception => e
22
+ rescue Rex :: Post :: Meterpreter :: RequestError => e
39
23
print_status ( "Encountered exception in search_for_version: #{ e . class } #{ e } " )
24
+ elog ( "#{ e . class } #{ e . message } \n #{ e . backtrace * "\n " } " )
40
25
end
41
- subkeys . each do |i |
42
- if i == 'Version'
43
- dotnet_version = registry_getvaldata ( dotnet_subkey , i )
44
- break
26
+ unless subkeys . nil?
27
+ subkeys . each do |subkey |
28
+ if subkey == 'Version'
29
+ dotnet_version = registry_getvaldata ( dotnet_subkey , subkey )
30
+ break
31
+ end
45
32
end
46
33
end
47
34
return dotnet_version
@@ -55,14 +42,17 @@ def get_versionception(dotnet_vkey)
55
42
exact_version = nil
56
43
begin
57
44
subkeys = registry_enumkeys ( dotnet_vkey )
58
- rescue :: Exception => e
45
+ rescue Rex :: Post :: Meterpreter :: RequestError => e
59
46
print_status ( "Encountered exception in get_versionception: #{ e . class } #{ e } " )
47
+ elog ( "#{ e . class } #{ e . message } \n #{ e . backtrace * "\n " } " )
60
48
end
61
- subkeys . each do |i |
62
- exact_version = search_for_version ( dotnet_vkey + '\\' + i )
63
- unless exact_version . nil?
64
- # if we find a version, stop looking
65
- break
49
+ unless subkeys . nil?
50
+ subkeys . each do |subkey |
51
+ exact_version = search_for_version ( dotnet_vkey + '\\' + subkey )
52
+ unless exact_version . nil?
53
+ # if we find a version, stop looking
54
+ break
55
+ end
66
56
end
67
57
end
68
58
return exact_version
@@ -77,13 +67,14 @@ def get_dotnet_versions
77
67
key = 'HKLM\\SOFTWARE\\Microsoft\NET Framework Setup\\NDP'
78
68
begin
79
69
dotnet_keys = registry_enumkeys ( key )
80
- rescue :: Exception => e
70
+ rescue Rex :: Post :: Meterpreter :: RequestError => e
81
71
print_status ( "Encountered exception in get_dotnet_version: #{ e . class } #{ e } " )
72
+ elog ( "#{ e . class } #{ e . message } \n #{ e . backtrace * "\n " } " )
82
73
end
83
74
unless dotnet_keys . nil?
84
- dotnet_keys . each do |i |
85
- if i [ 0 , 1 ] == 'v'
86
- key = 'HKLM\\SOFTWARE\\Microsoft\NET Framework Setup\\NDP\\' + i
75
+ dotnet_keys . each do |temp_key |
76
+ if temp_key [ 0 ] == 'v'
77
+ key = 'HKLM\\SOFTWARE\\Microsoft\NET Framework Setup\\NDP\\' + temp_key
87
78
dotnet_version = get_versionception ( key )
88
79
unless dotnet_version . nil?
89
80
ret_val << dotnet_version
@@ -94,6 +85,4 @@ def get_dotnet_versions
94
85
return ret_val
95
86
end
96
87
end
97
- end
98
- end
99
- end
88
+
0 commit comments