3
3
module Msf
4
4
module Exploit ::FileDropper
5
5
6
+ attr_accessor :session
7
+
6
8
def initialize ( info = { } )
7
9
super
8
10
@@ -20,7 +22,18 @@ def initialize(info = {})
20
22
# @return [void]
21
23
#
22
24
def on_new_session ( session )
23
- super ( session )
25
+ super
26
+
27
+ print_status ( "new session..." )
28
+ on_new_session_job ( session )
29
+ end
30
+
31
+ def on_new_session_job ( new_session )
32
+ if session
33
+ session_orig = session
34
+ end
35
+
36
+ self . session = new_session
24
37
25
38
if session . type == 'meterpreter'
26
39
session . core . use ( 'stdapi' ) unless session . ext . aliases . include? ( 'stdapi' )
@@ -31,13 +44,20 @@ def on_new_session(session)
31
44
end
32
45
33
46
@dropped_files . delete_if do |file |
47
+ puts "Deleting #{ file } "
34
48
exists_before = file_dropper_check_file ( file )
35
49
if file_dropper_delete ( file )
36
50
file_dropper_deleted? ( file , exists_before )
37
51
else
38
52
false
39
53
end
40
54
end
55
+
56
+ if session_orig
57
+ self . session = session_orig
58
+ else
59
+ self . session = nil
60
+ end
41
61
end
42
62
43
63
#
@@ -108,6 +128,7 @@ def file_dropper_win_file(file)
108
128
end
109
129
110
130
def file_dropper_delete ( file )
131
+ puts "Deleting #{ file } "
111
132
win_file = file_dropper_win_file ( file )
112
133
113
134
if session . type == 'meterpreter'
@@ -124,6 +145,7 @@ def file_dropper_delete(file)
124
145
false
125
146
end
126
147
else
148
+ puts "Deleting with shell"
127
149
win_cmds = [
128
150
%Q|attrib.exe -r "#{ win_file } "| ,
129
151
%Q|del.exe /f /q "#{ win_file } "|
@@ -141,16 +163,19 @@ def file_dropper_delete(file)
141
163
end
142
164
143
165
def file_dropper_check_file ( file )
166
+ puts "Checking file... #{ file } "
144
167
if session . platform =~ /win/
145
168
normalized = file_dropper_win_file ( file )
146
169
else
147
170
normalized = file
148
171
end
149
172
173
+ puts "Checking normalized file... #{ file } "
150
174
Msf ::Post ::File . file_exist? ( normalized )
151
175
end
152
176
153
177
def file_dropper_deleted? ( file , exists_before )
178
+ puts "Deleted? ... #{ file } "
154
179
if exists_before && file_dropper_check_file ( file )
155
180
print_error ( "Unable to delete #{ file } " )
156
181
false
0 commit comments