@@ -11,9 +11,10 @@ class Metasploit3 < Msf::Auxiliary
11
11
12
12
def initialize ( info = { } )
13
13
super ( update_info ( info ,
14
- 'Name' => 'F5 Management Interface Scanner' ,
14
+ 'Name' => 'F5 Networks Devices Management Interface Scanner' ,
15
15
'Description' => %q{
16
- This module simply detects web management interface of the following F5 Networks devices: BigIP, BigIQ, Enterprise Manager, ARX, and FirePass.
16
+ This module scans for web management interfaces of the following F5 Networks devices:
17
+ BigIP, BigIQ, Enterprise Manager, ARX, and FirePass.
17
18
} ,
18
19
'License' => MSF_LICENSE ,
19
20
'Author' =>
@@ -31,76 +32,63 @@ def initialize(info = {})
31
32
) )
32
33
33
34
register_options (
34
- [
35
- OptInt . new ( 'TIMEOUT' , [ true , "Timeout for the HTTPS probe in milliseconds" , 1000 ] )
36
- ] , self . class )
35
+ [
36
+ OptInt . new ( 'TIMEOUT' , [ true , ' HTTPS connect/read timeout in seconds' , 1 ] )
37
+ ] , self . class )
37
38
end
38
39
39
- def port_open? ( to , verbose )
40
+ def port_open?
40
41
begin
41
- ::Timeout . timeout ( to ) do
42
- begin
43
- res = send_request_raw ( 'method' => 'GET' , 'uri' => '/' )
44
- return true if res
45
- rescue ::Rex ::ConnectionRefused
46
- print_status ( "#{ peer } - TCP port closed" ) if verbose
47
- return false
48
- rescue ::Rex ::ConnectionError
49
- print_error ( "#{ peer } - Connection failed" ) if verbose
50
- return false
51
- rescue ::OpenSSL ::SSL ::SSLError
52
- print_error ( "#{ peer } - SSL/TLS connection error" ) if verbose
53
- return false
54
- rescue => e
55
- print_error ( "#{ peer } - Connection failed" ) if verbose
56
- end
57
- end
58
- rescue Timeout ::Error
59
- print_error ( "#{ peer } - HTTP connection timed out" ) if verbose
42
+ res = send_request_raw ( 'method' => 'GET' , 'uri' => '/' , 'timeout' => datastore [ 'TIMEOUT' ] )
43
+ return true if res
44
+ rescue ::Rex ::ConnectionRefused
45
+ vprint_status ( "#{ peer } - Connection refused" )
46
+ return false
47
+ rescue ::Rex ::ConnectionError
48
+ vprint_error ( "#{ peer } - Connection failed" )
49
+ return false
50
+ rescue ::OpenSSL ::SSL ::SSLError
51
+ vprint_error ( "#{ peer } - SSL/TLS connection error" )
60
52
return false
61
53
end
62
54
end
63
55
64
56
def run_host ( ip )
65
- # Test if a RPORT on a remote host is reachable using HTTPClient
66
- to = ( datastore [ 'TIMEOUT' ] || 500 ) . to_f / 1000.0
67
- verbose = datastore [ 'VERBOSE' ]
68
- return unless port_open? ( to , verbose )
57
+ return unless port_open?
69
58
70
59
res = send_request_raw ( 'method' => 'GET' , 'uri' => '/' )
71
60
if res && res . code == 200
72
61
73
62
# Detect BigIP management interface
74
63
if res . body =~ /<title>BIG\- IP/
75
- print_status ( "#{ peer } - F5 BigIP web management interface found" )
64
+ print_good ( "#{ peer } - F5 BigIP web management interface found" )
76
65
return
77
66
end
78
67
79
68
# Detect EM management interface
80
69
if res . body =~ /<title>Enterprise Manager/
81
- print_status ( "#{ peer } - F5 Enterprise Manager web management interface found" )
70
+ print_good ( "#{ peer } - F5 Enterprise Manager web management interface found" )
82
71
return
83
72
end
84
73
85
74
# Detect ARX management interface
86
75
if res . body =~ /<title>F5 ARX Manager Login<\/ title>/
87
- print_status ( "#{ peer } - ARX web management interface found" )
76
+ print_good ( "#{ peer } - ARX web management interface found" )
88
77
return
89
78
end
90
79
end
91
80
92
- res = send_request_raw ( 'method' => 'GET' , 'uri' => '/ui/login/' , 'rport' => rport )
93
-
94
81
# Detect BigIQ management interface
82
+ res = send_request_raw ( 'method' => 'GET' , 'uri' => '/ui/login/' )
95
83
if res && res . code == 200 && res . body =~ /<title>BIG\- IQ/
96
- print_status ( "#{ peer } - F5 BigIQ web management interface found" )
84
+ print_good ( "#{ peer } - F5 BigIQ web management interface found" )
97
85
return
98
86
end
99
87
100
88
# Detect FirePass management interface
101
89
res = send_request_raw ( 'method' => 'GET' , 'uri' => '/admin/' , 'rport' => rport )
102
90
if res && res . code == 200 && res . body =~ /<br><br><br><big><b> FirePass/
103
- print_status ( "#{ peer } - F5 FirePass web management interface found" )
91
+ print_good ( "#{ peer } - F5 FirePass web management interface found" )
104
92
return
105
93
end
106
94
end
0 commit comments